由于項(xiàng)目在注冊(cè)家乘、登錄方仿、找回密碼時(shí)需要發(fā)送短信驗(yàn)證的功能固棚,可以使用騰訊云短信做,新人注冊(cè)有100條免費(fèi)短信可用仙蚜。
前期工作
1此洲、注冊(cè)騰訊云
2、短信實(shí)名認(rèn)證和領(lǐng)取免費(fèi)100條短信福利
3委粉、新建API秘鑰
4呜师、在短信控制臺(tái)創(chuàng)建簽名(要認(rèn)證和通過(guò)審核)
5、在短信控制臺(tái)創(chuàng)建正文模板(要通過(guò)審核)
6艳丛、在短信控制臺(tái)應(yīng)用列表創(chuàng)建應(yīng)用
完成上面工作可以拿到下面代碼需要各種id和秘鑰
第1種:使用NODE SDK 2.0發(fā)送
- 第一步下載模塊 npm install qcloudsms_js
- 第二步 引入模塊匣掸,給相應(yīng)的參數(shù){SDK的appid、appkey(實(shí)例化QcloudSms)氮双、手機(jī)號(hào)、簽名內(nèi)容}
- 第三步生成六位驗(yàn)證碼
- 第四步調(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類(lèi)型)
var appid = 14xxxxxxx;
//短信應(yīng)用SDK appkey (字符串類(lèi)型)
var appkey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//實(shí)例化QcloudSms
var qcloudsms = QcloudSms(appid, appkey);
//需要發(fā)送短信的手機(jī)號(hào)
var phoneNumbers = ['',''];
//短信模板的id (number類(lèi)型)
var templateId = xxxxxx;
//簽名 (字符串)
var smsSign = 'xxx';
// 設(shè)置請(qǐng)求回調(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位驗(yàn)證碼
function RndNum(n) {
var rnd = "";
for (var i = 0; i < n; i++)
rnd += Math.floor(Math.random() * 10);
return rnd;
}
//六位驗(yàn)證碼
var VerificationCode = RndNum(6);
var ssender = qcloudsms.SmsSingleSender();
//短信模板的參數(shù)
var params = [VerificationCode, "2"];
/**
* 參數(shù)詳情
* 第一個(gè)nationCode(字符串):國(guó)家撥號(hào)代碼,例如中國(guó)為86暖释,美國(guó)為1
* 第二個(gè)phoneNumber(字符串):電話號(hào)碼
* 第三個(gè)tempId(數(shù)字型):模板編號(hào)ID
* 第四個(gè)params(數(shù)組):模板中的參數(shù)的數(shù)組
* 第五個(gè)sign(字符串):簽名內(nèi)容
* 第六個(gè)extend(字符串):擴(kuò)展字段,默認(rèn)為空
* 第七個(gè)ext(字符串):內(nèi)容將按原樣由服務(wù)器返回
* 第八個(gè)callback(函數(shù)):回調(diào)函數(shù)袭厂,發(fā)送成功/失敗后觸發(fā)的函數(shù)
*/
ssender.sendWithParam("86", phoneNumbers[0], templateId, params, smsSign, "", "", callback);
// 簽名參數(shù)未提供或者為空時(shí),會(huì)使用默認(rèn)簽名發(fā)送短信
第2種:NODE SDK3.0發(fā)送短信
1球匕、下載模塊 tencentcloud-sdk-nodejs
2纹磺、導(dǎo)入對(duì)應(yīng)產(chǎn)品模塊client models
3、配置client配置(id亮曹、key橄杨、可選配置),實(shí)例化sms的client對(duì)象
4、生成六位驗(yàn)證碼
5照卦、請(qǐng)求參數(shù)(手機(jī)號(hào)式矫、模板參數(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)入對(duì)應(yīng)產(chǎn)品模塊的client models
const SmsClient = tencentcloud.sms.v20190711.Client;
/* SDK 會(huì)自動(dòng)指定域名瞬痘,通常無(wú)需指定域名故慈,但訪問(wèn)金融區(qū)的服務(wù)時(shí)必須手動(dòng)指定域名
* 例如 SMS 的上海金融區(qū)域名為 sms.ap-shanghai-fsi.tencentcloudapi.com *
* 第二個(gè)參數(shù)是地域信息,可以直接填寫(xiě)字符串 ap-guangzhou框全,或者引用預(yù)設(shè)的常量 */
const clientConfig = {
//騰訊云認(rèn)證信息
credential: {
secretId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
//產(chǎn)品地域
region: "",
//可選配置實(shí)例
profile: {
httpProfile: {
endpoint: "sms.tencentcloudapi.com",
},
},
};
//實(shí)例化要請(qǐng)求產(chǎn)品的client對(duì)象
//實(shí)例化 SMS 的 client 對(duì)象
const client = new SmsClient(clientConfig);
//生成n位驗(yàn)證碼
function RndNum(n) {
var rnd = "";
for (var i = 0; i < n; i++) rnd += Math.floor(Math.random() * 10);
return rnd;
}
//五位驗(yàn)證碼
var VerificationCode = RndNum(6);
/**
* 參數(shù)說(shuō)明
* !! SmsSdkAppid 短信應(yīng)用 ID:在 [短信控制臺(tái)] 添加應(yīng)用后生成的實(shí)際 SDKAppID惯悠,例如1400006666
* !! Sign 短信簽名內(nèi)容: 使用 UTF-8 編碼,必須填寫(xiě)已審核通過(guò)的簽名竣况,可登錄 [短信控制臺(tái)] 查看簽名信息
* ExtendCode 短信碼號(hào)擴(kuò)展號(hào): 默認(rèn)未開(kāi)通克婶,如需開(kāi)通請(qǐng)聯(lián)系 [sms helper]
* SenderId 國(guó)際/港澳臺(tái)短信 senderid: 國(guó)內(nèi)短信填空,默認(rèn)未開(kāi)通丹泉,如需開(kāi)通請(qǐng)聯(lián)系 [sms helper]
* SessionContext 用戶的 session 內(nèi)容: 可以攜帶用戶側(cè) ID 等上下文信息情萤,server 會(huì)原樣返回
* PhoneNumberSet 下發(fā)手機(jī)號(hào)碼,采用 e.164 標(biāo)準(zhǔn)摹恨,+[國(guó)家或地區(qū)碼][手機(jī)號(hào)] 最多不要超過(guò)200個(gè)手機(jī)號(hào)
* TemplateID 模板 ID: 必須填寫(xiě)已審核通過(guò)的模板 ID筋岛,可登錄 [短信控制臺(tái)] 查看模板 ID
* TemplateParamSet 模板參數(shù): 若無(wú)模板參數(shù),則設(shè)置為空
*/
const params = {
PhoneNumberSet: ["+86xxxxxxxxxx"],
TemplateParamSet: [VerificationCode, "5"],
TemplateID: "xxxxxx",
SmsSdkAppid: "14xxxxxxxxxxx",
Sign: "xxxxxxx",
};
// 通過(guò) client 對(duì)象調(diào)用想要訪問(wèn)的接口晒哄,需要傳入請(qǐng)求對(duì)象以及響應(yīng)回調(diào)函數(shù)
client.SendSms(params).then(
(data) => {
console.log(data);
},
(err) => {
console.error("error", err);
}
);
關(guān)于頻率限制
由于我們是免費(fèi)用戶所以無(wú)法進(jìn)行設(shè)置睁宰,只能使用默認(rèn)的配置(30秒發(fā)1條/1小時(shí)發(fā)5條/1天發(fā)10條)。