App、網(wǎng)站中常有手機(jī)驗(yàn)證碼等需求,例如手機(jī)號(hào)注冊(cè),手機(jī)號(hào)登錄,密碼找回等。

手機(jī)注冊(cè)短信驗(yàn)證碼流程大致如下
用戶填寫手機(jī)號(hào),點(diǎn)擊獲取驗(yàn)證碼,發(fā)送手機(jī)號(hào)給服務(wù)端
服務(wù)端生成隨機(jī)驗(yàn)證碼,調(diào)用騰訊云短信接口向用戶手機(jī)發(fā)送短信。
騰訊云短信向用戶發(fā)送短信,短信包含驗(yàn)證碼。
用戶收到帶有驗(yàn)證碼的短信,在注冊(cè)界面輸入驗(yàn)證碼并提交注冊(cè)。
服務(wù)端收到用戶提交的驗(yàn)證碼,核對(duì)無誤,則允許注冊(cè)。
一 注冊(cè)登錄
先進(jìn)行賬號(hào)注冊(cè),騰訊提供了免費(fèi)100條短信,足夠用于測(cè)試了。
騰訊云:https://console.cloud.tencent.com/smsv2
如果大量短信需求,則需要購(gòu)買。價(jià)格如下:

二 創(chuàng)建簽名
注冊(cè)完成后,點(diǎn)擊快速入門,這里會(huì)一步步引導(dǎo)你完成整個(gè)流程。首先創(chuàng)建短信簽名。

因?yàn)槲覜]有個(gè)人的app和小程序,只有網(wǎng)站,所以選擇簽名類型"網(wǎng)站",并填寫對(duì)應(yīng)的其它信息。

三 創(chuàng)建正文模板
騰訊提供了標(biāo)準(zhǔn)模板可供選擇,也可以自定義模塊。我這里選擇了一個(gè)標(biāo)準(zhǔn)模板 "您正在申請(qǐng)手機(jī)注冊(cè)..."

四 等待審核
等待審核,一般很快,幾分鐘我就過了。如果等了很久沒過,可以點(diǎn)擊列表右邊的"催審"。
簽名審核通過:

正文審核通過:

五 創(chuàng)建NodeJS服務(wù)器
需要下載騰訊云短信的nodejs版本SDK才能發(fā)送短信。具體參看:https://cloud.tencent.com/document/product/382/43197

const tencentcloud = require("tencentcloud-sdk-nodejs")
// 導(dǎo)入對(duì)應(yīng)產(chǎn)品模塊的client models。
const smsClient = tencentcloud.sms.v20210111.Client
/* 實(shí)例化要請(qǐng)求產(chǎn)品(以sms為例)的client對(duì)象 */
const client = new smsClient({
credential: {
/* 必填:騰訊云賬戶密鑰對(duì)secretId,secretKey。
* 這里采用的是從環(huán)境變量讀取的方式,需要在環(huán)境變量中先設(shè)置這兩個(gè)值。
* 你也可以直接在代碼中寫死密鑰對(duì),但是小心不要將代碼復(fù)制、上傳或者分享給他人,
* 以免泄露密鑰對(duì)危及你的財(cái)產(chǎn)安全。
* CAM密匙查詢: https://console.cloud.tencent.com/cam/capi */
secretId: process.env.secretId,
secretKey: process.env.secretKey,
},
/* 必填:地域信息,可以直接填寫字符串a(chǎn)p-guangzhou,或者引用預(yù)設(shè)的常量 */
region: "ap-guangzhou",
/* 非必填:
* 客戶端配置對(duì)象,可以指定超時(shí)時(shí)間等配置 */
profile: {
/* SDK默認(rèn)用TC3-HMAC-SHA256進(jìn)行簽名,非必要請(qǐng)不要修改這個(gè)字段 */
signMethod: "HmacSHA256",
httpProfile: {
/* SDK默認(rèn)使用POST方法。
* 如果你一定要使用GET方法,可以在這里設(shè)置。GET方法無法處理一些較大的請(qǐng)求 */
reqMethod: "POST",
/* SDK有默認(rèn)的超時(shí)時(shí)間,非必要請(qǐng)不要進(jìn)行調(diào)整
* 如有需要請(qǐng)?jiān)诖a中查閱以獲取最新的默認(rèn)值 */
reqTimeout: 30,
/**
* SDK會(huì)自動(dòng)指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區(qū)的服務(wù)
* 則必須手動(dòng)指定域名,例如sms的上海金融區(qū)域名: sms.ap-shanghai-fsi.tencentcloudapi.com
*/
endpoint: "sms.tencentcloudapi.com"
},
},
})
/* 請(qǐng)求參數(shù),根據(jù)調(diào)用的接口和實(shí)際情況,可以進(jìn)一步設(shè)置請(qǐng)求參數(shù)
* 屬性可能是基本類型,也可能引用了另一個(gè)數(shù)據(jù)結(jié)構(gòu)
* 推薦使用IDE進(jìn)行開發(fā),可以方便的跳轉(zhuǎn)查閱各個(gè)接口和數(shù)據(jù)結(jié)構(gòu)的文檔說明 */
const params = {
/* 短信應(yīng)用ID: 短信SmsSdkAppId在 [短信控制臺(tái)] 添加應(yīng)用后生成的實(shí)際SmsSdkAppId,示例如1400006666 */
SmsSdkAppId: "1400787878",
/* 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,簽名信息可登錄 [短信控制臺(tái)] 查看 */
SignName: "xxx",
/* 短信碼號(hào)擴(kuò)展號(hào): 默認(rèn)未開通,如需開通請(qǐng)聯(lián)系 [sms helper] */
ExtendCode: "",
/* 國(guó)際/港澳臺(tái)短信 senderid: 國(guó)內(nèi)短信填空,默認(rèn)未開通,如需開通請(qǐng)聯(lián)系 [sms helper] */
SenderId: "",
/* 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息,server 會(huì)原樣返回 */
SessionContext: "",
/* 下發(fā)手機(jī)號(hào)碼,采用 e.164 標(biāo)準(zhǔn),+[國(guó)家或地區(qū)碼][手機(jī)號(hào)]
* 示例如:+8613711112222, 其中前面有一個(gè)+號(hào) ,86為國(guó)家碼,13711112222為手機(jī)號(hào),最多不要超過200個(gè)手機(jī)號(hào)*/
PhoneNumberSet: ["+8613711112222"],
/* 模板 ID: 必須填寫已審核通過的模板 ID。模板ID可登錄 [短信控制臺(tái)] 查看 */
TemplateId: "449739",
/* 模板參數(shù): 若無模板參數(shù),則設(shè)置為空*/
TemplateParamSet: ["666"],
}
// 通過client對(duì)象調(diào)用想要訪問的接口,需要傳入請(qǐng)求對(duì)象以及響應(yīng)回調(diào)函數(shù)
client.SendSms(params, function (err, response) {
// 請(qǐng)求異常返回,打印異常信息
if (err) {
console.log(err)
return
}
// 請(qǐng)求正常返回,打印response對(duì)象
console.log(response)
})
上面所需添加的信息均可以在管理臺(tái)找到
1 secretId和secretKey
API密鑰在 https://console.cloud.tencent.com/cam/capi ,需要新建一個(gè)。

2 SmsSdkAppId
應(yīng)用ID在應(yīng)用列表中

3 短信簽名和模板
可在簽名管理和正文模板管理中找到短信簽名和模板的ID等。

4 模板參數(shù)
我選擇模板有兩個(gè)變量{1}和{2}

填寫模板變量如下,短信內(nèi)容將會(huì)顯示 "驗(yàn)證碼為:12345,5分鐘內(nèi)有效"
TemplateParamSet: ["12345","5"],//進(jìn)行修改上面的配置
六 運(yùn)行發(fā)送短信
手機(jī)上收到了騰訊發(fā)送的短信,到此測(cè)試成功。
