App、网站中常有手机验证码等需求,例如手机号注册,手机号登录,密码找回等。
image.png
手机注册短信验证码流程大致如下
-
用户填写手机号,点击获取验证码,发送手机号给服务端
-
服务端生成随机验证码,调用腾讯云短信接口向用户手机发送短信。
-
腾讯云短信向用户发送短信,短信包含验证码。
-
用户收到带有验证码的短信,在注册界面输入验证码并提交注册。
-
服务端收到用户提交的验证码,核对无误,则允许注册。
一 注册登录
先进行账号注册,腾讯提供了免费100条短信,足够用于测试了。
腾讯云:https://console.cloud.tencent.com/smsv2
如果大量短信需求,则需要购买。价格如下:
image二 创建签名
注册完成后,点击快速入门,这里会一步步引导你完成整个流程。首先创建短信签名。
image因为我没有个人的app和小程序,只有网站,所以选择签名类型"网站",并填写对应的其它信息。
image三 创建正文模板
腾讯提供了标准模板可供选择,也可以自定义模块。我这里选择了一个标准模板 "您正在申请手机注册..."
image四 等待审核
等待审核,一般很快,几分钟我就过了。如果等了很久没过,可以点击列表右边的"催审"。
签名审核通过:
image正文审核通过:
image五 创建NodeJS服务器
需要下载腾讯云短信的nodejs版本SDK才能发送短信。具体参看:https://cloud.tencent.com/document/product/382/43197
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 ,需要新建一个。
image2 SmsSdkAppId
应用ID在应用列表中
image3 短信签名和模板
可在签名管理和正文模板管理中找到短信签名和模板的ID等。
image4 模板参数
我选择模板有两个变量{1}和{2}
image填写模板变量如下,短信内容将会显示 "验证码为:12345,5分钟内有效"
TemplateParamSet: ["12345","5"],//进行修改上面的配置
六 运行发送短信
手机上收到了腾讯发送的短信,到此测试成功。
网友评论