腾讯云短信+Node.js

由于项目在注册、登录、找回密码时需要发送短信验证的功能,可以使用腾讯云短信做,新人注册有100条免费短信可用。

前期工作

1、注册腾讯云
2、短信实名认证和领取免费100条短信福利
3、新建API秘钥
4、在短信控制台创建签名(要认证和通过审核)
5、在短信控制台创建正文模板(要通过审核)
6、在短信控制台应用列表创建应用

完成上面工作可以拿到下面代码需要各种id和秘钥


secretId和secretKey.png
Sign:蓝色的精灵小程序.png
TemplateID.png
SDK AppID和App Key.png
第1种:使用NODE SDK 2.0发送
  1. 第一步下载模块 npm install qcloudsms_js
  2. 第二步 引入模块,给相应的参数{SDK的appid、appkey(实例化QcloudSms)、手机号、签名内容}
  3. 第三步生成六位验证码
  4. 第四步调用sendWithParam发送短信

官方示例以及2.0文档:官方示例2.0文档

/*
 * 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条)。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容