springboot整合阿里短信服務
springboot整合阿里短信服務
參考URL: https://www.cnblogs.com/huoyufei/p/11436035.html
springboot整合騰訊雲短信服務
官網:https://console.cloud.tencent.com/sms/smslist
java實現發短信功能—騰訊雲短信
參考URL: https://www.cnblogs.com/L-Wirepuller/p/11337086.html
開通短信服務
- 進入官網 https://console.cloud.tencent.com/sms/smslist 開通短信服務。
- 根據官方流程操作流程如下,我們首先需要 申請短信簽名與短信正文模板
短信由簽名和正文內容組成,發送短信前需要創建短信簽名和正文內容模板。
- 簽名
短信簽名必須符合歸屬方自身屬性,創建時需要提供相關的資質證明,且需審覈通過後方可使用。 - 正文內容
短信正文內容必須提前申請爲模板,且需審覈通過後方可使用。
模板支持使用變量實現短信內容自定義,除變量以外的文本內容必須可判讀短信含義和使用場景。
總結: 簽名和正文模板都需要審覈。
1)創建簽名
登錄 短信控制檯。
如下圖:在應用列表頁面,單擊目標應用名稱進入應用詳情頁。
個人用戶允許申請簽名爲:產品(網站+APP)、微信公衆號,小程序。都沒有的話建議使用公司名稱或者註冊個正規名稱個人公衆號申請簽名。
這一塊條件限制很多,自己想辦法吧。 很麻煩,門檻比較高!
建議你們註冊個正規名稱個人公衆號(訂閱號)申請簽名。
2) 創建正文模板
注意:模板內部不支持【投資理財】類短信的接入,審覈標準請參考http://url.cn/5vqRejj。
注意: 經過測試,模板替換,單個{}最多12個字符,需要注意,否則返回如下。
"Code":"InvalidParameterValue.TemplateParameterLengthLimit","Message":"Single template variable has more than 12 characters"}
- 等待以上信息審覈完成之後,便可以開始使用了,騰訊短信服務需要用到SDK AppID 和App Key
如下,選擇應用列表
點擊這個應用,進入就可以看到SDK AppID 和App Key
代碼使用
官方參考文檔: https://cloud.tencent.com/document/product/382/38763
官網git: https://github.com/TencentCloud/tencentcloud-sdk-java
使用前準備
使用之前先過一遍官方文檔。
官網:https://cloud.tencent.com/document/product/382/38768
騰訊雲 API 會對每個請求進行身份驗證,用戶需要使用安全憑證,經過特定的步驟對請求進行簽名(Signature),每個請求都需要在公共請求參數中指定該簽名結果並以指定的方式和格式發送請求。
經過測試,使用新的 tencentcloud-sdk-java SDK發短信,首先你得創建一個創建 API 密鑰。
- 創建 API 密鑰
官網參考:https://cloud.tencent.com/document/product/598/40488#.E5.88.9B.E5.BB.BA.E4.B8.BB.E8.B4.A6.E5.8F.B7-api-.E5.AF.86.E9.92.A5
sdk引入
- sdk引入
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.9</version>
</dependency>
阿里倉庫 找tencentcloud-sdk-java 查詢最新版本
https://maven.aliyun.com/mvn/search
代碼測試 發送短信
官方example示例:https://github.com/TencentCloud/tencentcloud-sdk-java/tree/master/examples/sms/v20190711
注意:注調代理等一些你不需要的配置。secretId、secretKey 填入你新創建的API祕鑰。appid填入短信應用ID。短信簽名內容req.setSign(sign);必須填寫已審覈通過的簽名,簽名信息可登錄 [短信控制檯] 查看。
官方 發送短信demo
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
//導入可選配置類
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
// 導入對應SMS模塊的client
import com.tencentcloudapi.sms.v20190711.SmsClient;
// 導入要請求接口對應的request response類
import com.tencentcloudapi.sms.v20190711.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20190711.models.SendSmsResponse;
/**
* Tencent Cloud Sms Sendsms
* https://cloud.tencent.com/document/product/382/38778
*
*/
public class SendSms
{
public static void main( String[] args )
{
try {
/* 必要步驟:
* 實例化一個認證對象,入參需要傳入騰訊雲賬戶密鑰對secretId,secretKey。
* 這裏採用的是從環境變量讀取的方式,需要在環境變量中先設置這兩個值。
* 你也可以直接在代碼中寫死密鑰對,但是小心不要將代碼複製、上傳或者分享給他人,
* 以免泄露密鑰對危及你的財產安全。
* CAM密匙查詢: https://console.cloud.tencent.com/cam/capi*/
Credential cred = new Credential("secretId", "secretKey");
// 實例化一個http選項,可選,沒有特殊需求可以跳過
HttpProfile httpProfile = new HttpProfile();
// 設置代理
httpProfile.setProxyHost("host");
httpProfile.setProxyPort(port);
/* SDK默認使用POST方法。
* 如果你一定要使用GET方法,可以在這裏設置。GET方法無法處理一些較大的請求 */
httpProfile.setReqMethod("POST");
/* SDK有默認的超時時間,非必要請不要進行調整
* 如有需要請在代碼中查閱以獲取最新的默認值 */
httpProfile.setConnTimeout(60);
/* SDK會自動指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區的服務
* 則必須手動指定域名,例如sms的上海金融區域名: sms.ap-shanghai-fsi.tencentcloudapi.com */
httpProfile.setEndpoint("sms.tencentcloudapi.com");
/* 非必要步驟:
* 實例化一個客戶端配置對象,可以指定超時時間等配置 */
ClientProfile clientProfile = new ClientProfile();
/* SDK默認用TC3-HMAC-SHA256進行簽名
* 非必要請不要修改這個字段 */
clientProfile.setSignMethod("HmacSHA256");
clientProfile.setHttpProfile(httpProfile);
/* 實例化要請求產品(以sms爲例)的client對象
* 第二個參數是地域信息,可以直接填寫字符串ap-guangzhou,或者引用預設的常量 */
SmsClient client = new SmsClient(cred, "",clientProfile);
/* 實例化一個請求對象,根據調用的接口和實際情況,可以進一步設置請求參數
* 你可以直接查詢SDK源碼確定接口有哪些屬性可以設置
* 屬性可能是基本類型,也可能引用了另一個數據結構
* 推薦使用IDE進行開發,可以方便的跳轉查閱各個接口和數據結構的文檔說明 */
SendSmsRequest req = new SendSmsRequest();
/* 填充請求參數,這裏request對象的成員變量即對應接口的入參
* 你可以通過官網接口文檔或跳轉到request對象的定義處查看請求參數的定義
* 基本類型的設置:
* 幫助鏈接:
* 短信控制檯: https://console.cloud.tencent.com/sms/smslist
* sms helper: https://cloud.tencent.com/document/product/382/3773 */
/* 短信應用ID: 短信SdkAppid在 [短信控制檯] 添加應用後生成的實際SdkAppid,示例如1400006666 */
String appid = "1400009099";
req.setSmsSdkAppid(appid);
/* 短信簽名內容: 使用 UTF-8 編碼,必須填寫已審覈通過的簽名,簽名信息可登錄 [短信控制檯] 查看 */
String sign = "簽名內容";
req.setSign(sign);
/* 國際/港澳臺短信 senderid: 國內短信填空,默認未開通,如需開通請聯繫 [sms helper] */
String senderid = "xxx";
req.setSenderId(senderid);
/* 用戶的 session 內容: 可以攜帶用戶側 ID 等上下文信息,server 會原樣返回 */
String session = "xxx";
req.setSessionContext(session);
/* 短信碼號擴展號: 默認未開通,如需開通請聯繫 [sms helper] */
String extendcode = "xxx";
req.setExtendCode(extendcode);
/* 模板 ID: 必須填寫已審覈通過的模板 ID。模板ID可登錄 [短信控制檯] 查看 */
String templateID = "400000";
req.setTemplateID(templateID);
/* 下發手機號碼,採用 e.164 標準,+[國家或地區碼][手機號]
* 示例如:+8613711112222, 其中前面有一個+號 ,86爲國家碼,13711112222爲手機號,最多不要超過200個手機號*/
String[] phoneNumbers = {"+8621212313123", "+8612345678902", "+8612345678903"};
req.setPhoneNumberSet(phoneNumbers);
/* 模板參數: 若無模板參數,則設置爲空*/
String[] templateParams = {"5678"};
req.setTemplateParamSet(templateParams);
/* 通過 client 對象調用 SendSms 方法發起請求。注意請求方法名與請求對象是對應的
* 返回的 res 是一個 SendSmsResponse 類的實例,與請求對象對應 */
SendSmsResponse res = client.SendSms(req);
// 輸出json格式的字符串回包
System.out.println(SendSmsResponse.toJsonString(res));
// 也可以取出單個值,你可以通過官網接口文檔或跳轉到response對象的定義處查看返回字段的定義
System.out.println(res.getRequestId());
} catch (TencentCloudSDKException e) {
e.printStackTrace();
}
}
}