由于项目在注册、登录、找回密码时需要发送短信验证的功能,可以使用腾讯云短信做,新人注册有100条免费短信可用。
前期工作
1、注册腾讯云
2、短信实名认证和领取免费100条短信福利
3、新建API秘钥
4、在短信控制台创建签名(要认证和通过审核)
5、在短信控制台创建正文模板(要通过审核)
6、在短信控制台应用列表创建应用
完成上面工作可以拿到下面代码需要各种id和秘钥
第1种:使用NODE SDK 2.0发送
- 第一步下载模块 npm install qcloudsms_js
- 第二步 引入模块,给相应的参数{SDK的appid、appkey(实例化QcloudSms)、手机号、签名内容}
- 第三步生成六位验证码
- 第四步调用sendWithParam发送短信
/*
* 1. qcloudsms_js采用npm进行安装,要使用qcloudsms功能,只需要执行:
* npm install qcloudsms_js
*/
//引入qcloudsms_js模块
const QcloudSms = require('qcloudsms_js');
//短信应用SDK appid (number类型)
var appid = 14xxxxxxx;
//短信应用SDK appkey (字符串类型)
var appkey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
//实例化QcloudSms
var qcloudsms = QcloudSms(appid, appkey);
//需要发送短信的手机号
var phoneNumbers = ['',''];
//短信模板的id (number类型)
var templateId = xxxxxx;
//签名 (字符串)
var smsSign = 'xxx';
// 设置请求回调处理, 这里只是演示,用户需要自定义相应处理回调
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();
//短信模板的参数
var params = [VerificationCode, "2"];
/**
* 参数详情
* 第一个nationCode(字符串):国家拨号代码,例如中国为86,美国为1
* 第二个phoneNumber(字符串):电话号码
* 第三个tempId(数字型):模板编号ID
* 第四个params(数组):模板中的参数的数组
* 第五个sign(字符串):签名内容
* 第六个extend(字符串):扩展字段,默认为空
* 第七个ext(字符串):内容将按原样由服务器返回
* 第八个callback(函数):回调函数,发送成功/失败后触发的函数
*/
ssender.sendWithParam("86", phoneNumbers[0], templateId, params, smsSign, "", "", callback);
// 签名参数未提供或者为空时,会使用默认签名发送短信
第2种:NODE SDK3.0发送短信
1、下载模块 tencentcloud-sdk-nodejs
2、导入对应产品模块client models
3、配置client配置(id、key、可选配置),实例化sms的client对象
4、生成六位验证码
5、请求参数(手机号、模板参数、模板id、appid、签名内容)
6、调用client.SendSms发送短信
官方示例:官方文档和github使用地址
// Depends on tencentcloud-sdk-nodejs version 4.0.3 or higher
const tencentcloud = require("tencentcloud-sdk-nodejs");
//导入对应产品模块的client models
const SmsClient = tencentcloud.sms.v20190711.Client;
/* SDK 会自动指定域名,通常无需指定域名,但访问金融区的服务时必须手动指定域名
* 例如 SMS 的上海金融区域名为 sms.ap-shanghai-fsi.tencentcloudapi.com *
* 第二个参数是地域信息,可以直接填写字符串 ap-guangzhou,或者引用预设的常量 */
const clientConfig = {
//腾讯云认证信息
credential: {
secretId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
},
//产品地域
region: "",
//可选配置实例
profile: {
httpProfile: {
endpoint: "sms.tencentcloudapi.com",
},
},
};
//实例化要请求产品的client对象
//实例化 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);
/**
* 参数说明
* !! SmsSdkAppid 短信应用 ID:在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666
* !! Sign 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息
* ExtendCode 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper]
* SenderId 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper]
* SessionContext 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回
* PhoneNumberSet 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号] 最多不要超过200个手机号
* TemplateID 模板 ID: 必须填写已审核通过的模板 ID,可登录 [短信控制台] 查看模板 ID
* TemplateParamSet 模板参数: 若无模板参数,则设置为空
*/
const params = {
PhoneNumberSet: ["+86xxxxxxxxxx"],
TemplateParamSet: [VerificationCode, "5"],
TemplateID: "xxxxxx",
SmsSdkAppid: "14xxxxxxxxxxx",
Sign: "xxxxxxx",
};
// 通过 client 对象调用想要访问的接口,需要传入请求对象以及响应回调函数
client.SendSms(params).then(
(data) => {
console.log(data);
},
(err) => {
console.error("error", err);
}
);
关于频率限制
由于我们是免费用户所以无法进行设置,只能使用默认的配置(30秒发1条/1小时发5条/1天发10条)。