1. 程式人生 > >使用JAVA+秒嘀傳送手機驗證碼

使用JAVA+秒嘀傳送手機驗證碼

隨著阿里雲簡訊服務的改版,使用阿里雲簡訊服務的過程明顯比過去要麻煩的多。相信很多人或多或少大概都被困擾過,所以,選用另外的企業所推出的簡訊傳送或許會是個更好的選擇,所以,對於很多小白來說,秒嘀 http://www.miaodiyun.com/auth/login 無疑是一個不錯的選擇。
首先點選上面的官方連結,註冊賬號然後登陸
新使用者會送你10塊錢的金額,差不多200條簡訊,然後點選配置管理
在這裡插入圖片描述
進入配置管理後,點選新建模版
在這裡插入圖片描述
根據提示填寫,模板可以自己定義,當然也可以使用下面的模板,最後點選提交稽核等待稽核通過即可
在這裡插入圖片描述

接下來就是程式碼:
首先pom.xml

<dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20160810</version>
        </dependency>

Util:
先獲取所需的SID和TOKEN填入工具類對應的地方
在這裡插入圖片描述
將申請模版時填寫的簡訊簽名填入 中括號,後面的內容就是你們所選擇的模板的內容,這個一定要對應起來,不然會報錯

String tamp = "【模版時填寫的簡訊簽名】您的驗證碼為:" + rod + ",請於"+1+"分鐘內正確輸入,如非本人操作,請忽略此簡訊。";

在這裡插入圖片描述




package com.athome.jd.util;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.json.JSONObject;

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 = "【xxxx】您的驗證碼為:" + rod + ",請於"+1+"分鐘內正確輸入,如非本人操作,請忽略此簡訊。";
        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");
            System.out.println(args);
            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 = new JSONObject(result.toString());
        String respCode = json.getString("respCode");
        String defaultRespCode = "00000";
        if (defaultRespCode.equals(respCode)) {
            return rod;
        } else {
            return defaultRespCode;
        }
    }

    

    //測試功能
  public static void main(String[] args) {
     String result = getCode("");
 }


    // 定義一個請求引數拼接方法
    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;
    }
}


這樣也就OK了,直接呼叫方法傳入正確的手機號即可