目錄
一、準備工作
二、具體實現
JAVA代碼
三、總結
一、準備工作
首先要找一個提供短信驗證服務的平臺。
上一年我寫短信驗證的時候,這種平臺還是很容易就找到了,而且是註冊就免費送餘額,但是現在基本上都是要公司認證才能使用,或者用錢買短信條數,比如:阿里雲,5000條起賣,賣幾百塊錢,這對於我們學生來說未免負擔太大了。
我這一次也是找了秒嘀雲平臺(之前好像也是這個,註冊就能用了,但是現在要公司認證,不過不用擔心,接下來我會教你們一個小方法)
秒嘀雲:http://www.miaodiyun.com/
1號才註冊實現的,方法和代碼都是最新的
1、註冊
在秒嘀雲註冊完成後,首先要進行驗證纔可以使用
我這裏是已經認證了,認證的時候需要提供自己公司的營業執照,但是自己只是一名普通學生沒有公司怎麼辦呢?
以下有兩種方法可以解決:
1. 上網找一個帶紅章的營業執照
2. 自己去周邊的超市、飯店什麼的都行,找到他們的營業執照拍下來就行了
我一開始是在網上隨便找了一張營業執照去認證,結果客服小姐姐就打電話給我了,她先問了我用來幹什麼的,我很誠實地回答了:學生,測試。然後她告訴我:只有公司能用,你的營業執照是網上找的吧……😂(當然也有人找成功的,但我不好意思又讓客服小姐姐打電話給我了😅)
方法一,pass。
然後我不死心跑去了我們學校的飯堂拍了他們的營業執照,上傳,然後成功通過驗證了🤫
這裏需要注意以下幾點:
- 營業執照不能有邊框
- 姓名記得填營業執照上的法人代表
- 編號填“社會信用代碼”
2、編輯短信模板
身份驗證通過後,就可以去編輯驗證碼的短信模板了
點擊“模板庫”可以使用現成的模板
選好模板後繼續填寫剩下的內容:
注意:短信簽名與營業執照上面的不一樣時,會審覈失敗,但是沒有關係,多審覈幾次就通過了😁😁
二、具體實現
1、API文檔和demo下載
打開短信配置,點擊API文檔和demo下載。
也可不下載,直接看我的代碼。
2、ACCOUNT_SID和AUTH_TOKEN的獲取
還是同一個頁面,點擊查看即可獲取
3、JAVA代碼
1. Config.class(配置類)
ACCOUNT_SID和AUTH_TOKEN填入上一步獲取到的內容
public class Config {
/**
* url前半部分
*/
public static final String BASE_URL = "https://openapi.miaodiyun.com/distributor/sendSMS";
/**
* 開發者註冊後系統自動生成的賬號,可在官網登錄後查看
*/
public static final String ACCOUNT_SID = "***********";
/**
* 開發者註冊後系統自動生成的TOKEN,可在官網登錄後查看
*/
public static final String AUTH_TOKEN = "****************";
/**
* 響應數據類型, JSON或XML
*/
public static final String RESP_DATA_TYPE = "JSON";
}
2. Http請求工具
這裏沒有什麼要改的,直接複製粘貼就行
package utils;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
/**
* http請求工具
*/
public class HttpUtil {
/**
* 構造通用參數timestamp、sig和respDataType
*
* @return
*/
public static String createCommonParam(String sid,String token) {
// 時間戳
long timestamp = System.currentTimeMillis();
// 簽名
String sig = DigestUtils.md5Hex(sid + token + timestamp);
return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + Config.RESP_DATA_TYPE;
}
/**
* post請求
*
* @param url
* 功能和操作
* @param body
* 要post的數據
* @return
* @throws IOException
*/
public static String post(String url, String body) {
System.out.println("body:" + System.lineSeparator() + body);
String result = "";
try {
OutputStreamWriter out = null;
BufferedReader in = null;
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 設置連接參數
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(20000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 提交數據
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
out.write(body);
out.flush();
// 讀取返回數據
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line = "";
// 讀第一行不加換行符
boolean firstLine = true;
while ((line = in.readLine()) != null) {
if (firstLine) {
firstLine = false;
} else {
result += System.lineSeparator();
}
result += line;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* 回調測試工具方法
*
* @param url
* @return
*/
public static String postHuiDiao(String url, String body) {
String result = "";
try {
OutputStreamWriter out = null;
BufferedReader in = null;
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 設置連接參數
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(20000);
// 提交數據
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
out.write(body);
out.flush();
// 讀取返回數據
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line = "";
// 讀第一行不加換行符
boolean firstLine = true;
while ((line = in.readLine()) != null) {
if (firstLine) {
firstLine = false;
} else {
result += System.lineSeparator();
}
result += line;
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
3. 發送工具
這裏只需修改一些發送的短信內容就可以了,儘量從自己的模板複製粘貼過來,不然有可能會審覈不通過。然後直接將其中的變量{1}替換成自己生成的驗證碼。
package utils;
import java.net.URLEncoder;
/**
* @author 0416
* @date 2019/11/1
**/
public class SendMessageUtil {
/**
* 短信發送(驗證碼通知)
*/
public static Integer execute(String phone) throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("accountSid").append("=").append(Config.ACCOUNT_SID);
sb.append("&to").append("=").append(phone);
sb.append("¶m").append("=").append(URLEncoder.encode("", "UTF-8"));
// 驗證碼
Integer verifyCode = UUIDUtil.getVerifyCode();
sb.append("&smsContent").append("=").append(URLEncoder.encode(
"【自己的簽名】尊敬的用戶,您的短信驗證碼爲" + verifyCode +
",2分鐘內有效,若非本人操作請忽略。", "UTF-8"));
String body = sb.toString() + HttpUtil.createCommonParam(Config.ACCOUNT_SID, Config.AUTH_TOKEN);
String result = HttpUtil.post(Config.BASE_URL, body);
System.out.println(result);
return verifyCode;
}
}
- 驗證碼生成工具
package utils;
/**
* @author 0416
* @date 2019/11/1
**/
public class UUIDUtil {
/**
* 獲取六位隨機驗證碼
* @return
*/
public static int getVerifyCode(){
int vertifyCode = (int)(Math.random()*(999999-100000+1)+100000);
return vertifyCode ;
}
}
5. 調用方法
我寫代碼的時候是使用了ssm框架的。
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import static utils.SendMessageUtil.execute;
/**
* @author 0416
* @date 2019/11/1
**/
@Controller
public class SendMessageController {
@RequestMapping("/sendMessage.do")
public void sendMessage(String phone){
try{
Integer verifyCode = execute(phone);
}catch (Exception e){
e.printStackTrace();
}
}
}
三、總結
1. 發送的短信內容一定要在自己的模板那裏添加並審覈通過
(我一開始因爲模板內容有點出入,找不到原因就去問客服了,結果還是同一個客服小姐姐給我打了電話,問我是不是需要技術支持,我說是的;然後她說:你是學生測試吧,學生是不可以使用的……看來她已經記住我了,太尷尬了🤣🤣不知道一開始就一口咬定是公司使用回是什麼結果,你們可以試一下👀)
2. 代碼執行之後很快就能收到驗證碼,如果沒有可以去秒嘀雲上查看一下是不是審覈沒有通過
(這裏需要注意一下,審覈沒通過後臺也給我返回了發送成功的信息,我一直以爲自己代碼出問題了)
在產品概覽那裏能看到發送成功還是失敗