由于項目在注冊、登錄、找回密碼時需要發(fā)送短信驗證的功能,可以使用騰訊云短信做,新人注冊有100條免費(fèi)短信可用。
前期工作
1、注冊騰訊云
2、短信實(shí)名認(rèn)證和領(lǐng)取免費(fèi)100條短信福利
3、新建API秘鑰
4、在短信控制臺創(chuàng)建簽名(要認(rèn)證和通過審核)
5、在短信控制臺創(chuàng)建正文模板(要通過審核)
6、在短信控制臺應(yīng)用列表創(chuàng)建應(yīng)用
完成上面工作可以拿到下面代碼需要各種id和秘鑰

secretId和secretKey.png

Sign:藍(lán)色的精靈小程序.png

TemplateID.png

SDK AppID和App Key.png
第1種:使用NODE SDK 2.0發(fā)送
- 第一步下載模塊 npm install qcloudsms_js
- 第二步 引入模塊,給相應(yīng)的參數(shù){SDK的appid、appkey(實(shí)例化QcloudSms)、手機(jī)號、簽名內(nèi)容}
- 第三步生成六位驗證碼
- 第四步調(diào)用sendWithParam發(fā)送短信
/*
* 1. qcloudsms_js采用npm進(jìn)行安裝,要使用qcloudsms功能,只需要執(zhí)行:
* npm install qcloudsms_js
*/
//引入qcloudsms_js模塊
const QcloudSms = require('qcloudsms_js');
//短信應(yīng)用SDK appid (number類型)
var appid = 14xxxxxxx;
//短信應(yīng)用SDK appkey (字符串類型)
var appkey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//實(shí)例化QcloudSms
var qcloudsms = QcloudSms(appid, appkey);
//需要發(fā)送短信的手機(jī)號
var phoneNumbers = ['',''];
//短信模板的id (number類型)
var templateId = xxxxxx;
//簽名 (字符串)
var smsSign = 'xxx';
// 設(shè)置請求回調(diào)處理, 這里只是演示,用戶需要自定義相應(yīng)處理回調(diào)
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();
//短信模板的參數(shù)
var params = [VerificationCode, "2"];
/**
* 參數(shù)詳情
* 第一個nationCode(字符串):國家撥號代碼,例如中國為86,美國為1
* 第二個phoneNumber(字符串):電話號碼
* 第三個tempId(數(shù)字型):模板編號ID
* 第四個params(數(shù)組):模板中的參數(shù)的數(shù)組
* 第五個sign(字符串):簽名內(nèi)容
* 第六個extend(字符串):擴(kuò)展字段,默認(rèn)為空
* 第七個ext(字符串):內(nèi)容將按原樣由服務(wù)器返回
* 第八個callback(函數(shù)):回調(diào)函數(shù),發(fā)送成功/失敗后觸發(fā)的函數(shù)
*/
ssender.sendWithParam("86", phoneNumbers[0], templateId, params, smsSign, "", "", callback);
// 簽名參數(shù)未提供或者為空時,會使用默認(rèn)簽名發(fā)送短信
第2種:NODE SDK3.0發(fā)送短信
1、下載模塊 tencentcloud-sdk-nodejs
2、導(dǎo)入對應(yīng)產(chǎn)品模塊client models
3、配置client配置(id、key、可選配置),實(shí)例化sms的client對象
4、生成六位驗證碼
5、請求參數(shù)(手機(jī)號、模板參數(shù)、模板id、appid、簽名內(nèi)容)
6、調(diào)用client.SendSms發(fā)送短信
官方示例:官方文檔和github使用地址
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");
//導(dǎo)入對應(yīng)產(chǎn)品模塊的client models
const SmsClient = tencentcloud.sms.v20190711.Client;
/* SDK 會自動指定域名,通常無需指定域名,但訪問金融區(qū)的服務(wù)時必須手動指定域名
* 例如 SMS 的上海金融區(qū)域名為 sms.ap-shanghai-fsi.tencentcloudapi.com *
* 第二個參數(shù)是地域信息,可以直接填寫字符串 ap-guangzhou,或者引用預(yù)設(shè)的常量 */
const clientConfig = {
//騰訊云認(rèn)證信息
credential: {
secretId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
//產(chǎn)品地域
region: "",
//可選配置實(shí)例
profile: {
httpProfile: {
endpoint: "sms.tencentcloudapi.com",
},
},
};
//實(shí)例化要請求產(chǎn)品的client對象
//實(shí)例化 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);
/**
* 參數(shù)說明
* !! SmsSdkAppid 短信應(yīng)用 ID:在 [短信控制臺] 添加應(yīng)用后生成的實(shí)際 SDKAppID,例如1400006666
* !! Sign 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫已審核通過的簽名,可登錄 [短信控制臺] 查看簽名信息
* ExtendCode 短信碼號擴(kuò)展號: 默認(rèn)未開通,如需開通請聯(lián)系 [sms helper]
* SenderId 國際/港澳臺短信 senderid: 國內(nèi)短信填空,默認(rèn)未開通,如需開通請聯(lián)系 [sms helper]
* SessionContext 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息,server 會原樣返回
* PhoneNumberSet 下發(fā)手機(jī)號碼,采用 e.164 標(biāo)準(zhǔn),+[國家或地區(qū)碼][手機(jī)號] 最多不要超過200個手機(jī)號
* TemplateID 模板 ID: 必須填寫已審核通過的模板 ID,可登錄 [短信控制臺] 查看模板 ID
* TemplateParamSet 模板參數(shù): 若無模板參數(shù),則設(shè)置為空
*/
const params = {
PhoneNumberSet: ["+86xxxxxxxxxx"],
TemplateParamSet: [VerificationCode, "5"],
TemplateID: "xxxxxx",
SmsSdkAppid: "14xxxxxxxxxxx",
Sign: "xxxxxxx",
};
// 通過 client 對象調(diào)用想要訪問的接口,需要傳入請求對象以及響應(yīng)回調(diào)函數(shù)
client.SendSms(params).then(
(data) => {
console.log(data);
},
(err) => {
console.error("error", err);
}
);
關(guān)于頻率限制
由于我們是免費(fèi)用戶所以無法進(jìn)行設(shè)置,只能使用默認(rèn)的配置(30秒發(fā)1條/1小時發(fā)5條/1天發(fā)10條)。