App、網站中常有手機驗證碼等需求,例如手機號注冊,手機號登錄,密碼找回等。
手機注冊短信驗證碼流程大致如下
1. 用戶填寫手機號,點擊獲取驗證碼,發送手機號給服務端
2. 服務端生成隨機驗證碼,調用騰訊雲短信接口向用戶手機發送短信。
3. 騰訊雲短信向用戶發送短信,短信包含驗證碼。
4. 用戶收到帶有驗證碼的短信,在注冊界面輸入驗證碼並提交注冊。
5. 服務端收到用戶提交的驗證碼,核對無誤,則允許注冊。
現在嘗試用騰訊雲短信做下測試。
一 注冊登錄
先進行賬號注冊,騰訊提供了免費100條短信,足夠用於測試了。
騰訊雲:https://console.cloud.tencent.com/smsv2
如果大量短信需求,則需要購買。價格如下:
二 創建簽名
注冊完成后,點擊快速入門,這里會一步步引導你完成整個流程。首先創建短信簽名。
因為我沒有個人的app和小程序,只有網站,所以選擇簽名類型"網站",並填寫對應的其它信息。
三 創建正文模板
騰訊提供了標准模板可供選擇,也可以自定義模塊。我這里選擇了一個標准模板 "您正在申請手機注冊..."
四 等待審核
等待審核,一般很快,幾分鍾我就過了。如果等了很久沒過,可以點擊列表右邊的"催審"。
簽名審核通過:
正文審核通過:
五 創建NodeJS服務器
需要下載騰訊雲短信的nodejs版本SDK才能發送短信。具體參看:https://cloud.tencent.com/document/product/382/43197
我在本地搭建nodejs服務端,入口文件index.js,復制騰訊的發送短信代碼到本地服務端index.js中,代碼可以在 https://cloud.tencent.com/document/product/382/43197 找到。
index.js:
const tencentcloud = require("tencentcloud-sdk-nodejs") // 導入對應產品模塊的client models。 const smsClient = tencentcloud.sms.v20210111.Client /* 實例化要請求產品(以sms為例)的client對象 */ const client = new smsClient({ credential: { /* 必填:騰訊雲賬戶密鑰對secretId,secretKey。 * 這里采用的是從環境變量讀取的方式,需要在環境變量中先設置這兩個值。 * 你也可以直接在代碼中寫死密鑰對,但是小心不要將代碼復制、上傳或者分享給他人, * 以免泄露密鑰對危及你的財產安全。 * CAM密匙查詢: https://console.cloud.tencent.com/cam/capi */ secretId: process.env.secretId, secretKey: process.env.secretKey, }, /* 必填:地域信息,可以直接填寫字符串ap-guangzhou,或者引用預設的常量 */ region: "ap-guangzhou", /* 非必填: * 客戶端配置對象,可以指定超時時間等配置 */ profile: { /* SDK默認用TC3-HMAC-SHA256進行簽名,非必要請不要修改這個字段 */ signMethod: "HmacSHA256", httpProfile: { /* SDK默認使用POST方法。 * 如果你一定要使用GET方法,可以在這里設置。GET方法無法處理一些較大的請求 */ reqMethod: "POST", /* SDK有默認的超時時間,非必要請不要進行調整 * 如有需要請在代碼中查閱以獲取最新的默認值 */ reqTimeout: 30, /** * SDK會自動指定域名。通常是不需要特地指定域名的,但是如果你訪問的是金融區的服務 * 則必須手動指定域名,例如sms的上海金融區域名: sms.ap-shanghai-fsi.tencentcloudapi.com */ endpoint: "sms.tencentcloudapi.com" }, }, }) /* 請求參數,根據調用的接口和實際情況,可以進一步設置請求參數 * 屬性可能是基本類型,也可能引用了另一個數據結構 * 推薦使用IDE進行開發,可以方便的跳轉查閱各個接口和數據結構的文檔說明 */ const params = { /* 短信應用ID: 短信SmsSdkAppId在 [短信控制台] 添加應用后生成的實際SmsSdkAppId,示例如1400006666 */ SmsSdkAppId: "1400787878", /* 短信簽名內容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,簽名信息可登錄 [短信控制台] 查看 */ SignName: "xxx", /* 短信碼號擴展號: 默認未開通,如需開通請聯系 [sms helper] */ ExtendCode: "", /* 國際/港澳台短信 senderid: 國內短信填空,默認未開通,如需開通請聯系 [sms helper] */ SenderId: "", /* 用戶的 session 內容: 可以攜帶用戶側 ID 等上下文信息,server 會原樣返回 */ SessionContext: "", /* 下發手機號碼,采用 e.164 標准,+[國家或地區碼][手機號] * 示例如:+8613711112222, 其中前面有一個+號 ,86為國家碼,13711112222為手機號,最多不要超過200個手機號*/ PhoneNumberSet: ["+8613711112222"], /* 模板 ID: 必須填寫已審核通過的模板 ID。模板ID可登錄 [短信控制台] 查看 */ TemplateId: "449739", /* 模板參數: 若無模板參數,則設置為空*/ TemplateParamSet: ["666"], } // 通過client對象調用想要訪問的接口,需要傳入請求對象以及響應回調函數 client.SendSms(params, function (err, response) { // 請求異常返回,打印異常信息 if (err) { console.log(err) return } // 請求正常返回,打印response對象 console.log(response) })
上面所需添加的信息均可以在管理台找到
1 secretId和secretKey
API密鑰在 https://console.cloud.tencent.com/cam/capi ,需要新建一個。
2 SmsSdkAppId
應用ID在應用列表中
3 短信簽名和模板
可在簽名管理和正文模板管理中找到短信簽名和模板的ID等。
4 模板參數
我選擇模板有兩個變量{1}和{2}
填寫模板變量如下,短信內容將會顯示 "驗證碼為:12345,5分鍾內有效"
TemplateParamSet: ["12345","5"],
六 運行發送短信
在控制台運行index.js文件,輸入 "node index.js"。
可以看到打印的response顯示OK
手機上收到了騰訊發送的短信,到此測試成功。