結(jié)合一些第三方提供的短信API,使用云開發(fā)的云函數(shù)也能發(fā)送短信驗(yàn)證碼、系統(tǒng)和活動通知等,下面以騰訊云的短信服務(wù)為例。騰訊云有針對Node環(huán)境的tencentcloud-sdk-nodejs模塊,集成了騰訊云多項(xiàng)服務(wù),除了短信之外,騰訊云服務(wù)的幾乎所有能力都會集成在這個(gè)開發(fā)者工具套件(SDK)里。
登錄短信控制臺,這里的賬號不限于小程序的賬號,其他賬號也可以;也不限于是個(gè)人賬號還是企業(yè)賬號,不過賬號需要進(jìn)行實(shí)名認(rèn)證,個(gè)人認(rèn)證用戶只能發(fā)送短信驗(yàn)證碼、短信通知等,不能用于營銷短信;企業(yè)認(rèn)證用戶可以發(fā)送短信驗(yàn)證碼、短信通知、營銷短信等。如果賬號已經(jīng)認(rèn)證,直接申請短信服務(wù)就可以開通了。
創(chuàng)建應(yīng)用可用于個(gè)性化管理短信發(fā)送任務(wù),例如設(shè)置不同的發(fā)送頻率和發(fā)送超量提醒等。打開左側(cè)菜單里的應(yīng)用管理-應(yīng)用列表,點(diǎn)擊創(chuàng)建應(yīng)用,應(yīng)用名稱可以為你的小程序名稱+云開發(fā),便于區(qū)分管理。創(chuàng)建后,會有一個(gè)SDKAppID
,這個(gè)之后會用到。
國內(nèi)短信由簽名+正文組成,簽名符號為【】,發(fā)送短信內(nèi)容時(shí)必須帶簽名。所以要發(fā)送短信,需要申請短信簽名和正文模板,兩者都通過審核后,就可以開始發(fā)送短信了。
(1)創(chuàng)建簽名
打開左側(cè)菜單里的國內(nèi)短信-簽名管理,點(diǎn)擊創(chuàng)建簽名,創(chuàng)建完簽名后,這個(gè)簽名內(nèi)容
之后會用到。
(2)創(chuàng)建正文模板
打開左側(cè)菜單里的國內(nèi)短信-正文模板管理,點(diǎn)擊創(chuàng)建正文模板,創(chuàng)建完模板后,會有一個(gè)模板ID
,這個(gè)之后會用到,也要記住你模板的變量位置。
{1}
和{2}
是你要在代碼里傳入的變量,變量的編碼必須是從{1}開始,傳入變量時(shí)也要按照順序傳入
在使用云API之前,用戶首先需要在騰訊云控制臺上申請安全憑證(API密鑰),安全憑證包括 SecretID 和 SecretKey。打開騰訊云訪問密鑰的API密鑰管理,點(diǎn)擊新建密鑰,就可以創(chuàng)建密鑰了,創(chuàng)建之后,就可以看到 SecretID
和SecretKey
,這兩個(gè)之后會用到。
API 密鑰是構(gòu)建騰訊云 API 請求的重要憑證,使用騰訊云 API 可以操作你這個(gè)賬號名下的所有騰訊云資源,一定要妥善保管和定期更新,不要分享給別人或者上傳到網(wǎng)絡(luò)上。
使用開發(fā)者工具新建一個(gè)云函數(shù),比如sms,打開云函數(shù)目錄中的 package.json ,新增最新版tencentcloud-sdk-nodejs 依賴,右鍵云函數(shù)目錄選擇在終端中打開輸入命令npm install安裝依賴::
"dependencies": {
"wx-server-sdk":"latest",
"tencentcloud-sdk-nodejs":"latest"
}
然后再在云函數(shù)的目錄下面新建一個(gè)config文件夾,在config文件夾里創(chuàng)建一個(gè)config.js,云函數(shù)的目錄結(jié)構(gòu)如下圖所示:
sms // 云函數(shù)目錄
├── config //config文件夾
│ └── config.js //config.js文件
└── index.js
└── config.json
└── package.json
然后再在config.js里輸入以下代碼,填入獲取安全憑證里的SecretID 和 SecretKey:
module.exports = {
secretId: 'wxda99ae45313257046',
secretKey: 'josgjwoijgowjgjsogjo',
}
再在index.js里輸入以下代碼,代碼的內(nèi)容比較多,但是基本都是從騰訊云短信的技術(shù)文檔里直接Copy過來的,我們只需要改里面相應(yīng)的參數(shù)即可,比如
SDKAppID
,簽名內(nèi)容
,ID
,修改完以上內(nèi)容之后,就可以觸發(fā)該云函數(shù)給相應(yīng)的手機(jī)號發(fā)送短信了:
const cloud = require('wx-server-sdk')
const tencentcloud = require("tencentcloud-sdk-nodejs");
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
const config= require("./config/config.js")
const {secretId,secretKey} = config
exports.main = async (event, context) => {
const smsClient = tencentcloud.sms.v20190711.Client;
const models = tencentcloud.sms.v20190711.Models;
const Credential = tencentcloud.common.Credential;
const ClientProfile = tencentcloud.common.ClientProfile;
const HttpProfile = tencentcloud.common.HttpProfile;
let cred = new Credential(secretId,secretKey)
let httpProfile = new HttpProfile();
httpProfile.reqMethod = "POST";
httpProfile.reqTimeout = 30;
httpProfile.endpoint = "sms.tencentcloudapi.com";
let clientProfile = new ClientProfile();
clientProfile.signMethod = "HmacSHA256";
clientProfile.httpProfile = httpProfile;
let client = new smsClient(cred, "ap-guangzhou", clientProfile);
let req = new models.SendSmsRequest();
req.SmsSdkAppid = "1400364657";
req.Sign = "HackWeek";
req.ExtendCode = "";
req.SenderId = "";
req.SessionContext = "";
req.PhoneNumberSet = ["+86185****3"];
req.TemplateID = "597853";
req.TemplateParamSet = ["1234","5"];
client.SendSms(req, function (err, response) {
if (err) {
console.log(err);
return;
}
console.log(response.to_json_string());
});
}
更多建議: