1、短信平臺 --莫名短信
html
該平臺能夠加後綴和本身定義發送內容,用戶接收到的短信示例以下:mysql
123456【圈圈科技】
web
2、webservice核心代碼spring
這個是springMVC框架下的實現層代碼,註釋都在裏面
sql
@Service public class SendPhoneMessageServiceImpl implements SendPhoneMessageService{ @Autowired private MessageMapper messageMapper; /** * 發送短信 * * @param iCode * 驗證碼 * @param phoneNumber * 手機號碼 * @param content * 驗證內容(手機號碼&驗證碼) * * @return 操做結果 */ public ResultObject sendSMS(SMSParams message) { ResultObject resultObject = new ResultObject(); resultObject.setResultCode(ResultCode.FAILED); //手機號碼有效性判斷 if(!isMobile(message.getPhoneNumber())){ resultObject.setResultMsg(ResultMsg.MSG_CHECKPHONE_FAILED); return resultObject; } //驗證 發送碼,前臺將 手機號碼&驗證碼 的字符串發送過來 //後臺也用 手機號碼&字符串,這個是調用mysql的md5方法 //比較不相等,則說明驗證失敗 String checkStr = message.getPhoneNumber() + "&" + message.getiCode(); //調用一次數據庫進行md5加密 //下面調用數據庫實際執行的操做是 select md5(Str); String md5Data = sMSInfoMapper.getMD5Data(checkStr); if(!md5Data.equals(message.getSign())) { //驗證失敗 resultObject.setResultMsg(ResultMsg.MSG_CHECKCODE_FAILED); return resultObject; } //獲取發送短信所需參數 // 帳號 String smsAccount = ""; // 密碼 String smsPwd = ""; // 接口地址 String smsURL = ""; // 發送內容 String smsContent = ""; //從數據庫取發送短信的帳號、密碼、接口地址和發送內容 SMSInfo messageInfo = messageMapper.getSMSInfo(); if(messageInfo != null) { //賦值 smsAccount = messageInfo.getSmsAccount(); smsPwd = messageInfo.getSmsPwd(); smsURL = messageInfo.getSmsUrl(); smsContent = messageInfo.getSmsContent(); //發送內容 //若是取到的內容不爲空,則用驗證碼代替取到的內容中的"CODE"字符串 //取到的內容應該是: 您註冊xx公司的驗證碼爲{CODE} if(!smsContent.isEmpty()){ smsContent = smsContent.replace("{CODE}", message.getiCode()); }else{ smsContent = message.getiCode(); } //發送內容、地址不爲空的狀況 if(!smsAccount.isEmpty() && !smsURL.isEmpty() && smsURL.indexOf("{ACCOUNT}") != -1) { try{ smsContent = URLEncoder.encode(smsContent,"UTF-8"); }catch (UnsupportedEncodingException e) { e.printStackTrace(); } //用取到的數據代替設置的 smsURL = smsURL.replace("{ACCOUNT}", smsAccount) .replace("{PWD}", smsPwd) .replace("{PHONE}", message.getPhoneNumber()) .replace("{MESSAGE}",smsContent); }else { //沒有取到地址時給個默認的 smsURL = "http://api.duanxin.cm/?action=send&encode=utf8&username=70208843&password=6d85231f4343aab761c24c550fd8263d&phone="+message.getPhoneNumber()+"&content="+smsContent; } // 發送短息 System.out.println(smsURL); String retValue = requestURL(smsURL,"UTF-8"); if(retValue.equals("100")){ //發送成功 resultObject.setResultCode(ResultCode.SUCCESS); resultObject.setResultMsg(ResultMsg.MSG_SEND_SUCCESS); }else{ resultObject.setResultMsg(ResultMsg.MSG_GETSMSINFO_FAILED); } }else { resultObject.setResultMsg(ResultMsg.MSG_GETSMSINFO_FAILED); } return resultObject; } /** * 手機號驗證 * * @param str * @return 驗證經過返回true */ public static boolean isMobile(String str) { Pattern p = null; Matcher m = null; boolean b = false; // 驗證手機號 p = Pattern.compile("^[1][3,4,5,7,8][0-9]{9}$"); m = p.matcher(str); b = m.matches(); return b; } /** * 網絡請求 * * @param String str 請求的網頁地址 * @param String charSet 編碼格式 * @return String 網頁返回值 */ private String requestURL(String URLStr, String charSet){ // 網絡的url地址 URL url = null; // 輸入流 BufferedReader in = null; StringBuffer sb = new StringBuffer(); try{ url = new URL(URLStr); in = new BufferedReader( new InputStreamReader(url.openStream(),charSet) ); String str = null; while((str = in.readLine()) != null) { sb.append(str); } } catch (Exception ex) { ex.printStackTrace(); System.out.println(ex.getMessage()); } finally{ try{ if(in!=null) { in.close(); } }catch(Exception ex) { } } String result = sb.toString(); System.out.println(result); return result; }