文前推荐一下👉前端必备工具推荐网站(图床、API和ChatAI、智能AI简历、AI思维导图神器等实用工具):
站点入口:http://luckycola.com.cn/
图床:https://luckycola.com.cn/public/dist/#/imghub
多种API:https://luckycola.com.cn/public/dist/#/
ChatAI:https://luckycola.com.cn/public/dist/#/chatAi
AI思维导图神器:https://luckycola.com.cn/public/dist/#/aiQStore/aiMindPage

腾讯云短信+三种实现发送短信的方法

前提准备:

  1. 腾讯云账号
  2. 新用户领取200条免费短信腾讯云短信SMS
  3. 登录账号进入短信的控制台进行创建 签名和正文模板,根据提示进行创建
  4. 不会理解签名和正文模板的签名正文模板

这是我的正文模板: 您的验证码为:{1},该验证码{2}分钟内有效,请勿泄漏于他人!
在这里插入图片描述

  1. 有了签名和正文模板后,需要准备这些参数(这是在有了前面两个东西之后)

以上为前提准备,没有准备好先去准备

第一种,使用api接口发送短信

  • 这一种是最基本的调用接口的方式,就不具体附代码了,下面放上访问接口的基本参数
  • 接口请求域名: sms.tencentcloudapi.com
  • 请求方式:post
  • 请求参数(以下我标注红色是一些必选项或可能要传递的参数):
参数名称必选类型描述
ActionString公共参数,本接口取值:SendSms。
VersionString公共参数,本接口取值:2019-07-11。
RegionString公共参数,本接口不需要传递此参数。
PhoneNumberSet.NArray of String下发手机号码,采用 e.164 标准,格式为+[国家或地区码][手机号],单次请求最多支持200个手机号且要求全为境内手机号或全为境外手机号。例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号。
TemplateIDString模板 ID,必须填写已审核通过的模板 ID。模板ID可登录 短信控制台 查看,若向境外手机号发送短信,仅支持使用国际/港澳台短信模板。
SmsSdkAppidString短信SdkAppid在 短信控制台 添加应用后生成的实际SdkAppid,示例如1400006666。
SignString短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 短信控制台 查看。注:国内短信为必填参数。
TemplateParamSet.NArray of String模板参数,若无模板参数,则设置为空。
ExtendCodeString短信码号扩展号,默认未开通,如需开通请联系 sms helper。
SessionContextString用户的 session 内容,可以携带用户侧 ID 等上下文信息,server 会原样返回。
SenderIdString国内短信无senderid,无需填写该项;若需开通国际/港澳台短信senderid,请联系smshelper。

请求示例

https://sms.tencentcloudapi.com/?Action=SendSms
&PhoneNumberSet.0=+8618511122233
&PhoneNumberSet.1=+8618511122266
&TemplateID=1234
&Sign=腾讯云
&TemplateParamSet.0=12345
&SmsSdkAppid=1400006666
&SessionContext=test
&<公共请求参数>
  • 响应(输出)参数:
参数名称类型描述
SendStatusSetArray of SendStatus短信发送状态。
RequestIdString唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。

成功响应示例

{
  "Response": {
    "SendStatusSet": [
      {
        "SerialNo": "5000:1045710669157053657849499619",
        "PhoneNumber": "+8618511122233",
        "Fee": 1,
        "SessionContext": "test",
        "Code": "Ok",
        "Message": "send success",
        "IsoCode": "CN"
      },
      {
        "SerialNo": "5000:104571066915705365784949619",
        "PhoneNumber": "+8618511122266",
        "Fee": 1,
        "SessionContext": "test",
        "Code": "Ok",
        "Message": "send success",
        "IsoCode": "CN"
      }
    ],
    "RequestId": "a0aabda6-cf91-4f3e-a81f-9198114a2279"
  }
}

第二种,使用Node SDK 2.0发送

下面是我总结的四步骤:

  1. 第一步下载模块 npm install qcloudsms_js
  2. 第二步 引入模块,给相应的参数{SDK的appid、appkey(实例化QcloudSms)、手机号、签名内容}
  3. 第三步生成六位验证码
  4. 第四步调用sendWithParam发送短信

这里有官方示例以及2.0文档:官方示例2.0文档

放上代码

/*
* @fileName: sendNote
* @author: LG
* @date: 2020/12/7 8:21
* @description:测试发送短信
* @update: 2020/12/7 8:21
*/

/**
 * 腾讯云短信 Node.js SDK 2.0
 * 最近更新时间2020-09-23 17:15:17
 * 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);  
 // 签名参数未提供或者为空时,会使用默认签名发送短信

最后执行node xxxx运行
如果调用成功会响应一个OK,失败的话会给你提示哪里有错
在这里插入图片描述

第二种Node SDK3.0发送短信

  1. Node SDK2.0和Node SDK3.0的区别:

    • Node SDK 3.0 通过tencentcloud-sdk-nodejs模块实现:新版 SDK 实现了统一化,具有各个语言版本的 SDK 使用方法相同,接口调用方式相同,错误码相同以及返回包格式相同等优点。
    • 本质上没什么区别,用哪个都行,SDK2.0也在维护中
  2. 已准备依赖环境:NODEJS 7.10.1 及以上版本。

  3. 我总结的发送短信的必要步骤:

  • 第一步 下载模块 tencentcloud-sdk-nodejs
  • 第二步 导入对应产品模块client models
  • 第三步 配置client配置(密钥id、密钥key、可选配置),实例化sms的client对象
  • 第四步生成六位验证码
  • 第五步 请求参数(手机号、模板参数、模板id、appid、签名内容)
  • 第六步 调用client.SendSms发送短信
  1. 官方文档github使用地址
  2. 下面是代码:
/*
 * @fileName: sendNote2
 * @author: LG
 * @date: 2020/12/7 13:41
 * @description:sendNote2
 * @update: 2020/12/7 13:41
 */
/**
 * SDK 3.0是云 API 3.0平台的配套工具,您可以通过 SDK 使用所有 短信 API。新版 SDK 实现了统一化,具有各个语言版本的 SDK 使用方法相同,接口调用方式相同,错误码相同以及返回包格式相同等优点。
 */
// 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);
  }
);

最后执行node xxxx运行
如果调用成功会响应一个OK,失败的话会给你提示哪里有错。

到这里结束了,基本发送短信的方法已经详解,下篇说封装短信工具,搭建web服务,写接口,时效性,调用接口发送

收藏、点赞呗

更多推荐:wantLG的《普歌-腾讯云短信+使用node发送短信(3种方法API、SDK)、封装工具、搭建web服务、写接口、调用接口发送短信、时效性判断(下)


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐