java實現發送手機驗證碼功能


1. 進入秒嘀科技(http://www.miaodiyun.com/),注冊一個賬號
2. 注冊好之后,點擊 用戶中心 -> 賬戶管理,就會進入如下界面 (順便提一下,新注冊的用戶,平台會免費贈送你10元,足夠大家學習和使用了,所以不用擔心需要充錢)  你需要做的就是獲取你自己的 ACCOUNT SID 和 AUTH TOKEN
3. 點擊 用戶中心 -> 認證,進行企業認證,企業的資質證件就是企業的營業執照,網上百度一張帶有紅色的公章就行,公司電話填寫自己的就行,最后點擊提交
4. 需要在秒嘀上新建一個發送手機驗證碼的模板,點擊 配置管理 -> 驗證碼短信模板,就會進入如下界面
5. 點擊“新建模板”按鈕, 填寫好模板名稱、短信簽名 和 短信內容(短信內容可以選擇 驗證碼通知短信模板 或者 自己編寫短信內容),點擊“提交審核”按鈕即可,界面如下
6. 然后等待 短信驗證碼模板 審核通過即可,點擊 配置管理 -> 驗證碼短信模板,查看 短信驗證碼 是否審核通過
7. 接下來就是代碼了,把我圈住的地方改成自己的就行,其他的不用動,tamp值 一定要與自己創建短信模板的短信內容保持一致
8. java短信發送驗證碼
   導入阿里巴巴fastjson.jar包:  
                 方式一:下載fastjson.jar包導入工程就行      鏈接:https://pan.baidu.com/s/1RH4-x82G8-sNmn7y5YhdjA   
                方式二:maven工程直接把     下面這段代碼復制到  pom.xml 中就行
 <dependency>                                                                               

     <groupId>com.alibaba</groupId>                                                        

     <artifactId>fastjson</artifactId>

     <version>1.2.47</version>

 </dependency>   
package com.group.util;

 

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.HttpURLConnection;

import java.net.URL;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

import com.alibaba.fastjson.JSONObject;

 

/**

 * 

 * @Title:GetMessageCode

 * @Description:發送驗證碼

 * @author:ヅ零碎de記憶ぷ

 * @Date 2018年7月4日 下午9:27:04

 */

public class GetMessageCode {

    private static final String QUERY_PATH = "https://api.miaodiyun.com/20150822/industrySMS/sendSMS";

    private static final String ACCOUNT_SID = "";

    private static final String AUTH_TOKEN = "";

 

    // 根據相應的手機號發送驗證碼

    public static String getCode(String phone) {

        String rod = smsCode();

        String timestamp = getTimestamp();

        String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp);

        String tamp = "【聯途旅游】尊敬的用戶,您好,您的驗證碼為:" + rod + ",若非本人操作,請忽略此短信。";

        OutputStreamWriter out = null;

        BufferedReader br = null;

        StringBuilder result = new StringBuilder();

        try {

            URL url = new URL(QUERY_PATH);

            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            connection.setRequestMethod("POST");

            connection.setDoInput(true);// 設置是否允許數據寫入

            connection.setDoOutput(true);// 設置是否允許參數數據輸出

            connection.setConnectTimeout(5000);// 設置鏈接響應時間

            connection.setReadTimeout(10000);// 設置參數讀取時間

            connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");

            // 提交請求

            out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");

            String args = getQueryArgs(ACCOUNT_SID, tamp, phone, timestamp, sig, "JSON");

            out.write(args);

            out.flush();

            // 讀取返回參數

 

            br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));

            String temp = "";

            while ((temp = br.readLine()) != null) {

                result.append(temp);

            }

        } catch (Exception e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

        JSONObject json = JSONObject.parseObject(result.toString());

        String respCode = json.getString("respCode");

        String defaultRespCode = "00000";

        if (defaultRespCode.equals(respCode)) {

            return rod;

        } else {

            return defaultRespCode;

        }

    }

 

    // 定義一個請求參數拼接方法

    public static String getQueryArgs(String accountSid, String smsContent, String to, String timestamp, String sig,

            String respDataType) {

        return "accountSid=" + accountSid + "&smsContent=" + smsContent + "&to=" + to + "&"+"timestamp=" + timestamp

                + "&sig=" + sig + "&respDataType=" + respDataType;

    }

 

    // 獲取時間戳

    public static String getTimestamp() {

        return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

    }

 

    // sing簽名

    public static String getMD5(String sid, String token, String timestamp) {

 

        StringBuilder result = new StringBuilder();

        String source = sid + token + timestamp;

        // 獲取某個類的實例

        try {

            MessageDigest digest = MessageDigest.getInstance("MD5");

            // 要進行加密的東西

            byte[] bytes = digest.digest(source.getBytes());

            for (byte b : bytes) {

                String hex = Integer.toHexString(b & 0xff);

                if (hex.length() == 1) {

                    result.append("0" + hex);

                } else {

                    result.append(hex);

                }

            }

        } catch (NoSuchAlgorithmException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

 

        return result.toString();

    }

 

    // 創建驗證碼

    public static String smsCode() {

        String random = (int) ((Math.random() * 9 + 1) * 100000) + "";

        return random;

    }

}

 

9. 測試發送手機短信驗證碼 源碼如下   (手機號碼換成你想要發送到指定手機的手機號碼即可)

package com.message.test;

 

public class Test {

 

    public static void main(String[] args) {

        String phone = "12345678910";

        GetMessageCode.getCode(phone);

    }

 

}
10. 常見的問題
      (1)返回錯誤碼 00104 “相同的應用當天給同一手機號發送短信的條數小於等於n” 如何處理?
        答:此錯誤是同一手機號短信發送請求頻率限制,請求失敗也算次;
               驗證碼短信下發次數限制為:1分鍾2次、1小時4次、24小時內10次;
               通知類短信下發次數限制為:24小時內20次;
               營銷類短信下發次數限制為:24小時內20次。
               驗證碼短信24小時下發10次,不能修改
               通知類短信有需要可調整下發次數
               該類配置的修改需要在后台中修改設置,客戶端不能設置
               如果在測試時候遇到請求限制,可聯系客服添加白名單
 
     (2)返回錯誤碼 00134 "沒有和內容匹配的模板” 如何處理?
        答:請檢查是否在官網建立模板,smscontent=【短信簽名】+內容,發送內容要與模板匹配。      
 
     (3)返回錯誤碼 0005 "timestamp已過期” 如何處理?
       答:把獲取時間戳 getTimestamp()方法中的 return new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());換成return System.currentTimeMillis()+""; 即可
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM