Java --webservice發送驗證短信

1、短信平臺 --莫名短信
html

www.duanxin.cm/api.html
java

該平臺能夠加後綴和本身定義發送內容,用戶接收到的短信示例以下: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;
    }
相關文章
相關標籤/搜索