做個(gè)小程序需要發(fā)送驗(yàn)證碼膛堤,短信接口是騰訊云的手趣。了解官方的sdk和demo發(fā)現(xiàn)對(duì)于我這種淺層次的人來(lái)說(shuō)太麻煩了,然后就從網(wǎng)上找了一版肥荔。短信服務(wù)開(kāi)通可以訪問(wèn) 騰訊云短信服務(wù)
開(kāi)發(fā)準(zhǔn)備
- 申請(qǐng) SDK AppID 以及 App Key:
在開(kāi)始本教程之前绿渣,您需要先獲取 SDK AppID 和 App Key,如您尚未申請(qǐng)燕耿,請(qǐng)到 短信控制臺(tái) 中添加應(yīng)用中符。應(yīng)用添加成功后您將獲得 SDK AppID 以及 App Key。
注意:
SDK AppID 是以 14xxxxx 開(kāi)頭缸棵。
申請(qǐng)簽名:
下發(fā)短信必須攜帶簽名舟茶,您可以在短信 控制臺(tái) 中申請(qǐng)短信簽名申請(qǐng)模板:
下發(fā)短信內(nèi)容必須經(jīng)過(guò)審核,您可以在短信控制臺(tái)中申請(qǐng)短信模板
完成以上三項(xiàng)便可開(kāi)始代碼開(kāi)發(fā)堵第。
詳情咨詢:https://cloud.tencent.com/document/product/382/13613
Java版本SDK下載:騰訊云短信SDK下載以及文檔查看
需要的依賴
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>qcloud-java-sdk</artifactId>
<version>2.0.1</version>
</dependency>
當(dāng)然你也需要去騰訊云注冊(cè)APPID和appkey吧凉,選擇所需要的模板,單發(fā)或者群發(fā)踏志,我的是單發(fā)指定模板的阀捅。
image
import com.qcloud.Utilities.Json.JSONObject;
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.util.Arrays;
import java.util.List;
import java.util.Random;
public class TencentSmsSender {
Random random = new Random();
int sdkappid ;
String appkey;
// 請(qǐng)根據(jù)我們的說(shuō)明文檔適時(shí)調(diào)整 url
final String url = "https://yun.tim.qq.com/v3/tlssmssvr/sendsms";
public TencentSmsSender(int sdkappid, String appkey) {
this.sdkappid = sdkappid;
this.appkey = appkey;
}
// "sign": "騰訊云", //短信簽名,如果使用默認(rèn)簽名针余,則可以缺省此字段
public String sendMsg(String nationCode, String phoneNumber, String content) {
long rnd = random.nextInt(999999) % (999999 - 100000 + 1) + 100000;
String wholeUrl = String.format("%s?sdkappid=%d&random=%d", url, sdkappid, rnd);
String pnum = null;
try {
URL object = new URL(wholeUrl);
HttpURLConnection con = (HttpURLConnection) object.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
JSONObject data = new JSONObject();
JSONObject tel = new JSONObject();
tel.put("nationcode", nationCode);
String phone = phoneNumber;
tel.put("phone", phone);
data.put("type", "0");
data.put("tpl_id", );//正文ID
pnum = String.valueOf(rnd);
List<String> places = Arrays.asList(pnum, "5");隨機(jī)生成6位數(shù)饲鄙,間隔5分鐘
data.put("params", places);
String sig = stringMD5(appkey.concat(phone));
data.put("sig", sig);
data.put("tel", tel);
//data.put("sign", "");
data.put("extend", "");
data.put("ext", "");
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "utf-8");
wr.write(data.toString());
wr.flush();
// 顯示 POST 請(qǐng)求返回的內(nèi)容
StringBuilder sb = new StringBuilder();
int HttpResult = con.getResponseCode();
if (HttpResult == HttpURLConnection.HTTP_OK) {
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
br.close();
System.out.println("" + sb.toString());
} else {
System.out.println(con.getResponseMessage());
}
} catch (Exception e) {
e.printStackTrace();
}
return pnum;
}
private static String stringMD5(String input) throws NoSuchAlgorithmException {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
byte[] inputByteArray = input.getBytes();
messageDigest.update(inputByteArray);
byte[] resultByteArray = messageDigest.digest();
return byteArrayToHex(resultByteArray);
}
private static String byteArrayToHex(byte[] byteArray) {
char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
char[] resultCharArray = new char[byteArray.length * 2];
int index = 0;
for (byte b : byteArray) {
resultCharArray[index++] = hexDigits[b >>> 4 & 0xf];
resultCharArray[index++] = hexDigits[b & 0xf];
}
return new String(resultCharArray);
}
public static void main(String[] args) {
}
}
image