Davie's Happy Life
阿新 • • 發佈:2019-02-15
import com.alibaba.fastjson.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.StringUtils; import javax.servlet.http.HttpServletRequest; import java.text.MessageFormat; public class SmsUtil { private static Logger logger = LoggerFactory.getLogger(SmsUtil.class); public static final int smsFlag =1; //1:傳送簡訊 0:不傳送簡訊 private static final String smsUrl = "http: //sms.253.com/msg/send"; private static final String user = "******"; private static final String pwd = "******"; /** * 傳送簡訊驗證碼 * * @param phoneNum * @return */ public static JSONObject sendSmsCode(HttpServletRequest request, String phoneNum) { if(StringUtils.isEmpty(phoneNum)){ logger.error(String.format("傳送簡訊失敗,手機號:%s",phoneNum)); } String verifyCode = RandomSeriUtil.genRandoms(); String smsTxt = String.format(Constants.SMSMODEL_VERIFYSMSCODE, verifyCode); try { String url = new StringBuffer(smsUrl).append("?un={0}&pw={1}&phone={2}&msg={3}&rd=1").toString(); /*try { URLEncoder.encode(RandomSeriUtil.formatStr(smsContent, RandomSeriUtil.genRandoms()), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); }*/ String urlParam = MessageFormat.format(url, user, pwd, phoneNum, smsTxt); if (smsFlag == 1) { String smsResp = HttpTool.httpGetRequest(urlParam); if (smsResp.contains(String.valueOf(ConstVar.ZERO))) { SessionUtil.setAttr(request, Constants.SMSCODE_KEY, verifyCode + Constants.GLOBAL_DEFAULT_FENFGEFU + System.currentTimeMillis() + Constants.GLOBAL_DEFAULT_FENFGEFU + phoneNum); return RespMsg.SUCCESS(); } } else { logger.info("接收手機:" + phoneNum + "驗證碼內容:" + smsTxt); SessionUtil.setAttr(request, Constants.SMSCODE_KEY, verifyCode + Constants.GLOBAL_DEFAULT_FENFGEFU + System.currentTimeMillis() + Constants.GLOBAL_DEFAULT_FENFGEFU + phoneNum); return RespMsg.SUCCESS(); } } catch (Exception e) { logger.error(String.format("傳送簡訊失敗,手機號:%s******簡訊內容:%s",phoneNum,smsTxt)); e.printStackTrace(); } return RespMsg.FAIL("獲取驗證碼錯誤"); } /** * 傳送簡訊 * * @param phoneNum * @return */ public static JSONObject sendSmsMessage(String phoneNum,String message) { try { String url = new StringBuffer(smsUrl).append("?un={0}&pw={1}&phone={2}&msg={3}&rd=1").toString(); String urlParam = MessageFormat.format(url, user, pwd, phoneNum, message); if (smsFlag == 1) { String smsResp = HttpTool.httpGetRequest(urlParam); if (smsResp.contains(String.valueOf(ConstVar.ZERO))) { return RespMsg.SUCCESS(); } } else { logger.info("接收手機:" + phoneNum + "驗證碼內容:" + message); return RespMsg.SUCCESS(); } } catch (Exception e) { logger.error(String.format("傳送簡訊失敗,手機號:%s******簡訊內容:%s",phoneNum,message)); } return RespMsg.FAIL("傳送簡訊訊息錯誤"); } /** * 校驗驗證碼 * * @param request * @param verifyCode * @return */ public static boolean verifySmsCode(HttpServletRequest request, String verifyCode,String phoneNum) { String codeStr = (String) SessionUtil.getAttrs(request, Constants.SMSCODE_KEY); //未傳送驗證碼 if (StringUtils.isEmpty(codeStr) || StringUtils.isEmpty(verifyCode) || StringUtils.isEmpty(phoneNum)) { return false; } try{ String localCode = codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[0]; long timeSpan = Long.valueOf(codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[1]); String phone = codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[2]; int diff = (int) (System.currentTimeMillis() - timeSpan) / (1000 * 60); //驗證碼過期,刪除本地快取 if (diff >= Constants.SMS_CODE_EFFECTIVE_TIME) { SessionUtil.removeCacheInfo(request, Constants.SMSCODE_KEY); return false; } if (!verifyCode.equals(localCode) || !phoneNum.equals(phone)) { return false; } //驗證通過,刪除本地快取 SessionUtil.removeCacheInfo(request, Constants.SMSCODE_KEY); return true; }catch (Exception e){ logger.error(e.getMessage()); return false; } } /** * 註冊碼傳送頻率驗證 * * @param request * @return */ public static boolean verifyFrequency(HttpServletRequest request) { String codeStr = (String) SessionUtil.getAttrs(request, Constants.SMSCODE_KEY); //未傳送驗證碼 if (StringUtils.isEmpty(codeStr)) { return true; } long timeSpan = Long.valueOf(codeStr.split(Constants.GLOBAL_DEFAULT_FENFGEFU)[1]); int diff = (int) (System.currentTimeMillis() - timeSpan) / (1000 * 60); //距上次申請時間超過1分鐘 if (diff >= 1) { return true; } return false; } public static void main(String[] args) { sendSmsMessage("******","*********"); } }
1、註冊253簡訊賬號,購買服務,獲取api地址、賬號和密碼
2、繫結傳送簡訊的ip、白名單