普歌-騰訊雲簡訊+使用node傳送簡訊(3種方法API、SDK)、封裝工具、搭建web服務、寫介面、呼叫介面傳送簡訊、時效性判斷(上)

wantLG發表於2020-12-13

普歌-騰訊雲簡訊+三種實現傳送簡訊的方法

前提準備:

  1. 騰訊雲賬號
  2. 新使用者領取200條免費簡訊騰訊雲簡訊SMS
  3. 登入賬號進入簡訊的控制檯進行建立 簽名和正文模板,根據提示進行建立
  4. 不會理解簽名和正文模板的簽名正文模板

這是我的正文模板: 您的驗證碼為:{1},該驗證碼{2}分鐘內有效,請勿洩漏於他人!
在這裡插入圖片描述

  1. 有了簽名和正文模板後,需要準備這些引數(這是在有了前面兩個東西之後)

以上為前提準備,沒有準備好先去準備

第一種,使用api介面傳送簡訊

  • 這一種是最基本的呼叫介面的方式,就不具體附程式碼了,下面放上訪問介面的基本引數
  • 介面請求域名: sms.tencentcloudapi.com
  • 請求方式:post
  • 請求引數(以下我標註紅色是一些必選項或可能要傳遞的引數):
引數名稱必選型別描述
ActionString公共引數,本介面取值:SendSms。
VersionString公共引數,本介面取值:2019-07-11。
RegionString公共引數,本介面不需要傳遞此引數。
PhoneNumberSet.NArray of String下發手機號碼,採用 e.164 標準,格式為+[國家或地區碼][手機號],單次請求最多支援200個手機號且要求全為境內手機號或全為境外手機號。例如:+8613711112222, 其中前面有一個+號 ,86為國家碼,13711112222為手機號。
TemplateIDString模板 ID,必須填寫已稽核通過的模板 ID。模板ID可登入 簡訊控制檯 檢視,若向境外手機號傳送簡訊,僅支援使用國際/港澳臺簡訊模板。
SmsSdkAppidString簡訊SdkAppid在 簡訊控制檯 新增應用後生成的實際SdkAppid,示例如1400006666。
SignString簡訊簽名內容,使用 UTF-8 編碼,必須填寫已稽核通過的簽名,簽名資訊可登入 簡訊控制檯 檢視。注:國內簡訊為必填引數。
TemplateParamSet.NArray of String模板引數,若無模板引數,則設定為空。
ExtendCodeString簡訊碼號擴充套件號,預設未開通,如需開通請聯絡 sms helper。
SessionContextString使用者的 session 內容,可以攜帶使用者側 ID 等上下文資訊,server 會原樣返回。
SenderIdString國內簡訊無senderid,無需填寫該項;若需開通國際/港澳臺簡訊senderid,請聯絡smshelper。

請求示例

https://sms.tencentcloudapi.com/?Action=SendSms
&PhoneNumberSet.0=+8618511122233
&PhoneNumberSet.1=+8618511122266
&TemplateID=1234
&Sign=騰訊雲
&TemplateParamSet.0=12345
&SmsSdkAppid=1400006666
&SessionContext=test
&<公共請求引數>
  • 響應(輸出)引數:
引數名稱型別描述
SendStatusSetArray of SendStatus簡訊傳送狀態。
RequestIdString唯一請求 ID,每次請求都會返回。定位問題時需要提供該次請求的 RequestId。

成功響應示例

{
  "Response": {
    "SendStatusSet": [
      {
        "SerialNo": "5000:1045710669157053657849499619",
        "PhoneNumber": "+8618511122233",
        "Fee": 1,
        "SessionContext": "test",
        "Code": "Ok",
        "Message": "send success",
        "IsoCode": "CN"
      },
      {
        "SerialNo": "5000:104571066915705365784949619",
        "PhoneNumber": "+8618511122266",
        "Fee": 1,
        "SessionContext": "test",
        "Code": "Ok",
        "Message": "send success",
        "IsoCode": "CN"
      }
    ],
    "RequestId": "a0aabda6-cf91-4f3e-a81f-9198114a2279"
  }
}

第二種,使用Node SDK 2.0傳送

下面是我總結的四步驟:

  1. 第一步下載模組 npm install qcloudsms_js
  2. 第二步 引入模組,給相應的引數{SDK的appid、appkey(例項化QcloudSms)、手機號、簽名內容}
  3. 第三步生成六位驗證碼
  4. 第四步呼叫sendWithParam傳送簡訊

這裡有官方示例以及2.0文件:官方示例2.0文件

放上程式碼

/*
* @fileName: sendNote
* @author: LG
* @date: 2020/12/7 8:21
* @description:測試傳送簡訊
* @update: 2020/12/7 8:21
*/

/**
 * 騰訊雲簡訊 Node.js SDK 2.0
 * 最近更新時間2020-09-23 17:15:17
 * 1. qcloudsms_js採用npm進行安裝,要使用qcloudsms功能,只需要執行:
 * npm install qcloudsms_js
 */
//引入qcloudsms_js模組
const QcloudSms = require('qcloudsms_js');
//簡訊應用SDK appid   (number型別)
var appid = 14xxxxxxx;
//簡訊應用SDK appkey (字串型別)
var appkey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//例項化QcloudSms
var qcloudsms = QcloudSms(appid, appkey);
//需要傳送簡訊的手機號
 var phoneNumbers = ['',''];
//簡訊模板的id (number型別)
var templateId = xxxxxx;
//簽名 (字串)
var smsSign = 'xxx';

// 設定請求回撥處理, 這裡只是演示,使用者需要自定義相應處理回撥
 function callback(err, res, resData) {
     if (err) {
         console.log("err: ", err);
     } else {
         console.log("request data: ", res.req);
         console.log("response data: ", resData);
     }
 }

//生成n位驗證碼
function RndNum(n) {
    var rnd = "";
    for (var i = 0; i < n; i++)
        rnd += Math.floor(Math.random() * 10);
    return rnd;
}

//六位驗證碼
var VerificationCode = RndNum(6);

var ssender = qcloudsms.SmsSingleSender();
//簡訊模板的引數
var params = [VerificationCode, "2"];

/**
 * 引數詳情
 * 第一個nationCode(字串):國家撥號程式碼,例如中國為86,美國為1
 * 第二個phoneNumber(字串):電話號碼
 * 第三個tempId(數字型):模板編號ID
 * 第四個params(陣列):模板中的引數的陣列
 * 第五個sign(字串):簽名內容
 * 第六個extend(字串):擴充套件欄位,預設為空
 * 第七個ext(字串):內容將按原樣由伺服器返回
 * 第八個callback(函式):回撥函式,傳送成功/失敗後觸發的函式
 */

 ssender.sendWithParam("86", phoneNumbers[0], templateId, params, smsSign, "", "", callback);  
 // 簽名引數未提供或者為空時,會使用預設簽名傳送簡訊

最後執行node xxxx執行
如果呼叫成功會響應一個OK,失敗的話會給你提示哪裡有錯
在這裡插入圖片描述

第二種Node SDK3.0傳送簡訊

  1. Node SDK2.0和Node SDK3.0的區別:

    • Node SDK 3.0 通過tencentcloud-sdk-nodejs模組實現:新版 SDK 實現了統一化,具有各個語言版本的 SDK 使用方法相同,介面呼叫方式相同,錯誤碼相同以及返回包格式相同等優點。
    • 本質上沒什麼區別,用哪個都行,SDK2.0也在維護中
  2. 已準備依賴環境:NODEJS 7.10.1 及以上版本。

  3. 我總結的傳送簡訊的必要步驟:

  • 第一步 下載模組 tencentcloud-sdk-nodejs
  • 第二步 匯入對應產品模組client models
  • 第三步 配置client配置(金鑰id、金鑰key、可選配置),例項化sms的client物件
  • 第四步生成六位驗證碼
  • 第五步 請求引數(手機號、模板引數、模板id、appid、簽名內容)
  • 第六步 呼叫client.SendSms傳送簡訊
  1. 官方文件github使用地址
  2. 下面是程式碼:
/*
 * @fileName: sendNote2
 * @author: LG
 * @date: 2020/12/7 13:41
 * @description:sendNote2
 * @update: 2020/12/7 13:41
 */
/**
 * SDK 3.0是雲 API 3.0平臺的配套工具,您可以通過 SDK 使用所有 簡訊 API。新版 SDK 實現了統一化,具有各個語言版本的 SDK 使用方法相同,介面呼叫方式相同,錯誤碼相同以及返回包格式相同等優點。
 */
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");
//匯入對應產品模組的client models
const SmsClient = tencentcloud.sms.v20190711.Client;

/* SDK 會自動指定域名,通常無需指定域名,但訪問金融區的服務時必須手動指定域名
 * 例如 SMS 的上海金融區域名為 sms.ap-shanghai-fsi.tencentcloudapi.com *
 * 第二個引數是地域資訊,可以直接填寫字串 ap-guangzhou,或者引用預設的常量 */
const clientConfig = {
  //騰訊雲認證資訊
  credential: {
    secretId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  },
  //產品地域
  region: "",
  //可選配置例項
  profile: {
    httpProfile: {
      endpoint: "sms.tencentcloudapi.com",
    },
  },
};
//例項化要請求產品的client物件
//例項化 SMS 的 client 物件
const client = new SmsClient(clientConfig);

//生成n位驗證碼
function RndNum(n) {
  var rnd = "";
  for (var i = 0; i < n; i++) rnd += Math.floor(Math.random() * 10);
  return rnd;
}

//五位驗證碼
var VerificationCode = RndNum(6);
/**
 * 引數說明
 * !! SmsSdkAppid  簡訊應用 ID:在 [簡訊控制檯] 新增應用後生成的實際 SDKAppID,例如1400006666
 * !! Sign 簡訊簽名內容: 使用 UTF-8 編碼,必須填寫已稽核通過的簽名,可登入 [簡訊控制檯] 檢視簽名資訊
 * ExtendCode   簡訊碼號擴充套件號: 預設未開通,如需開通請聯絡 [sms helper]
 * SenderId 國際/港澳臺簡訊 senderid: 國內簡訊填空,預設未開通,如需開通請聯絡 [sms helper]
 * SessionContext  使用者的 session 內容: 可以攜帶使用者側 ID 等上下文資訊,server 會原樣返回
 * PhoneNumberSet 下發手機號碼,採用 e.164 標準,+[國家或地區碼][手機號] 最多不要超過200個手機號
 * TemplateID   模板 ID: 必須填寫已稽核通過的模板 ID,可登入 [簡訊控制檯] 檢視模板 ID
 *  TemplateParamSet  模板引數: 若無模板引數,則設定為空
 */
const params = {
  PhoneNumberSet: ["+86xxxxxxxxxx"],
  TemplateParamSet: [VerificationCode, "5"],
  TemplateID: "xxxxxx",
  SmsSdkAppid: "14xxxxxxxxxxx",
  Sign: "xxxxxxx",
};
// 通過 client 物件呼叫想要訪問的介面,需要傳入請求物件以及響應回撥函式

client.SendSms(params).then(
  (data) => {
    console.log(data);
  },
  (err) => {
    console.error("error", err);
  }
);

最後執行node xxxx執行
如果呼叫成功會響應一個OK,失敗的話會給你提示哪裡有錯。

到這裡結束了,基本傳送簡訊的方法已經詳解,下篇說封裝簡訊工具,搭建web服務,寫介面,時效性,呼叫介面傳送

收藏、點讚唄

更多推薦:wantLG的《普歌-騰訊雲簡訊+使用node傳送簡訊(3種方法API、SDK)、封裝工具、搭建web服務、寫介面、呼叫介面傳送簡訊、時效性判斷(下)


相關文章