App、网站中常有手机验证码等需求,例如手机号注册,手机号登录,密码找回等。

 

手机注册短信验证码流程大致如下

1. 用户填写手机号,点击获取验证码,发送手机号给服务端

2. 服务端生成随机验证码,调用腾讯云短信接口向用户手机发送短信。

3. 腾讯云短信向用户发送短信,短信包含验证码。

4. 用户收到带有验证码的短信,在注册界面输入验证码并提交注册。

5. 服务端收到用户提交的验证码,核对无误,则允许注册。

 

 

现在尝试用腾讯云短信做下测试。

 

一 注册登录

先进行账号注册,腾讯提供了免费100条短信,足够用于测试了。

腾讯云:https://console.cloud.tencent.com/smsv2

 

如果大量短信需求,则需要购买。价格如下:

 

 

二 创建签名

注册完成后,点击快速入门,这里会一步步引导你完成整个流程。首先创建短信签名。

 

因为我没有个人的app和小程序,只有网站,所以选择签名类型"网站",并填写对应的其它信息。

 

 

 三 创建正文模板

腾讯提供了标准模板可供选择,也可以自定义模块。我这里选择了一个标准模板 "您正在申请手机注册..."

 

四 等待审核

等待审核,一般很快,几分钟我就过了。如果等了很久没过,可以点击列表右边的"催审"。

签名审核通过:

 

正文审核通过:

 

五 创建NodeJS服务器

需要下载腾讯云短信的nodejs版本SDK才能发送短信。具体参看:https://cloud.tencent.com/document/product/382/43197

 

我在本地搭建nodejs服务端,入口文件index.js,复制腾讯的发送短信代码到本地服务端index.js中,代码可以在 https://cloud.tencent.com/document/product/382/43197 找到。

index.js:

const tencentcloud = require("tencentcloud-sdk-nodejs")

// 导入对应产品模块的client models。
const smsClient = tencentcloud.sms.v20210111.Client

/* 实例化要请求产品(以sms为例)的client对象 */
const client = new smsClient({
  credential: {
  /* 必填:腾讯云账户密钥对secretId,secretKey。
   * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
   * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
   * 以免泄露密钥对危及你的财产安全。
   * CAM密匙查询: https://console.cloud.tencent.com/cam/capi */
    secretId: process.env.secretId,
    secretKey: process.env.secretKey,
  },
  /* 必填:地域信息,可以直接填写字符串ap-guangzhou,或者引用预设的常量 */
  region: "ap-guangzhou",
  /* 非必填:
   * 客户端配置对象,可以指定超时时间等配置 */
  profile: {
    /* SDK默认用TC3-HMAC-SHA256进行签名,非必要请不要修改这个字段 */
    signMethod: "HmacSHA256",
    httpProfile: {
      /* SDK默认使用POST方法。
       * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
      reqMethod: "POST",
      /* SDK有默认的超时时间,非必要请不要进行调整
       * 如有需要请在代码中查阅以获取最新的默认值 */
      reqTimeout: 30,
      /**
       * SDK会自动指定域名。通常是不需要特地指定域名的,但是如果你访问的是金融区的服务
       * 则必须手动指定域名,例如sms的上海金融区域名: sms.ap-shanghai-fsi.tencentcloudapi.com
       */
      endpoint: "sms.tencentcloudapi.com"
    },
  },
})

/* 请求参数,根据调用的接口和实际情况,可以进一步设置请求参数
 * 属性可能是基本类型,也可能引用了另一个数据结构
 * 推荐使用IDE进行开发,可以方便的跳转查阅各个接口和数据结构的文档说明 */
const params = {
  /* 短信应用ID: 短信SmsSdkAppId在 [短信控制台] 添加应用后生成的实际SmsSdkAppId,示例如1400006666 */
  SmsSdkAppId: "1400787878",
  /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 [短信控制台] 查看 */
  SignName: "xxx",
  /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
  ExtendCode: "",
  /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
  SenderId: "",
  /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
  SessionContext: "",
  /* 下发手机号码,采用 e.164 标准,+[国家或地区码][手机号]
   * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
  PhoneNumberSet: ["+8613711112222"],
  /* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
  TemplateId: "449739",
  /* 模板参数: 若无模板参数,则设置为空*/
  TemplateParamSet: ["666"],
}
// 通过client对象调用想要访问的接口,需要传入请求对象以及响应回调函数
client.SendSms(params, function (err, response) {
  // 请求异常返回,打印异常信息
  if (err) {
    console.log(err)
    return
  }
  // 请求正常返回,打印response对象
  console.log(response)
})

 

上面所需添加的信息均可以在管理台找到

1  secretId和secretKey

API密钥在 https://console.cloud.tencent.com/cam/capi ,需要新建一个。

 

2  SmsSdkAppId

应用ID在应用列表中

 

3  短信签名和模板

可在签名管理和正文模板管理中找到短信签名和模板的ID等。

 

4 模板参数

我选择模板有两个变量{1}和{2}

 

填写模板变量如下,短信内容将会显示 "验证码为:123455分钟内有效"

TemplateParamSet: ["12345","5"],

  

六 运行发送短信

在控制台运行index.js文件,输入 "node index.js"。

可以看到打印的response显示OK

 

手机上收到了腾讯发送的短信,到此测试成功。

 

posted on 2022-01-04 18:12  gamedaybyday  阅读(2371)  评论(0编辑  收藏  举报