腾讯云短信 nodejs 接入, 通过验证码修改手机示例

参考:
腾讯云短信文档
国内短信快速入门
qcloudsms Node.js SDK
文档中心>短信>错误码

nodejs sdk 使用示例

const QcloudSms = require('qcloudsms_js');

const cfg = {
appid: 1400123123, // SDK AppID 以1400开头
appkey: '...', // 短信应用 SDK AppKey
templateId: 402790, // 短信模板 ID,需要在短信控制台中申请
smsSign: '我的过去公众号', // NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台申请
} // 简单封装一下, 向指定手机下发验证码
// sendCode('18212341234', 1234) // 发送短信
function sendCode (phone, code, time = 10) {
phone = typeof(phone) === 'object' ? phone : [phone]
const qcloudsms = QcloudSms(cfg.appid, cfg.appkey) // 实例化 QcloudSms
const msender = qcloudsms.SmsMultiSender()
msender.sendWithParam(86,
phone, // 一个数组
cfg.templateId, // 模版 id
[code, time], // 正文中的参数值
cfg.smsSign, // 签名 未提供或者为空时,会使用默认签名发送短信
'', '',
(err, res, resData) => { // 回调函数
err && console.log('err: ', err)
console.log('request data: ', res.req)
console.log('response data: ', resData)
})
}

请求及回调

这里的请求及回调与 sdk 中的是一样的。

参考:
文档中心>短信>API 文档>短信API>指定模板群发短信

URL 示例
POST https://yun.tim.qq.com/v5/tlssmssvr/sendmultisms2?sdkappid=xxxxx&random=xxxx

请求

{
"ext": "",
"extend": "",
"params": [
"验证码",
"1234",
"4"
],
"sig": "...",
"sign": "腾讯云",
"tel": [
{
"mobile": "13788888888",
"nationcode": "86"
},
{
"mobile": "13788888889",
"nationcode": "86"
}
],
"time": 1457336869,
"tpl_id": 19
}

回调

{
"result": 0,
"errmsg": "OK",
"ext": "",
"detail": [
{
"errmsg": "OK",
"fee": 1,
"mobile": "13788888888",
"nationcode": "86",
"result": 0,
"sid": "xxxxxxx"
},
{
"errmsg": "OK",
"fee": 1,
"mobile": "13788888889",
"nationcode": "86",
"result": 0,
"sid": "xxxxxxx"
}
]
}

使用验证码修改手机

API 发送验证码

返回验证码及有效时间的加密为字符串.

query: {phone}
response: {token}
phoneCode({
body: {},
query: {
phone: '18212341234',
}
})
async function phoneCode (ctx) {
let {phone} = ctx.query
let code = '1234' // 生成验证码用于测试
if(process.env.PRO_ENV === 'pro') { // 如果是正式环境, 修改验证码为随机
code = String(Math.random()).slice(-4)
sms.sendCode(phone, code) // 发送验证码
}
let token = jwt.sign(
{ // 加密的 json 信息
phone,
code,
iat: Date.now() + 1000 * 60 * 10, // 过期时间设置为 10 分钟后
},
config.jwt.secret, // secret 为密匙
)
ctx.body = {token: token} // 返回加密后的内容
}

API 修改手机号

解密加密字符串, 判断是否与用户填写的对应.

body: {
token,
phone,
code,
}
response: {...}
phoneChange({
body: {
token: '...',
phone: '18212341234',
code: '1111',
},
query: {},
})
async function phoneChange(ctx) {
const userModel = models.user // 数据库中的 user 表
const { token, phone, code } = ctx.body
let decoded = jwt.decode(token, config.secret) // 使用 secret 密匙解密 token
let { creator_id } = ctx.state || {}
if(!creator_id) {return console.log('非法请求')}
const apiUser = await userModel.findOne({ where: { id: creator_id }}) // 查询当前发起请求的用户
if (apiUser && decoded) {
if(decoded.iat < Date.now()) {return console.log('验证码已过期')}
if(decoded.phone !== phone) {return console.log('接收验证码的手机号与要修改的手机号不匹配')}
if(decoded.code !== code) {return console.log('验证码错误')}
const bindUser = await userModel.findOne({where: {bind_phone: phone}, raw: true}) // 查询是否存在已绑定
if(bindUser) {return console.log('该手机号已有绑定用户')} apiUser.bind_phone = phone // 修改为新手机并保存
return ctx.body = await apiUser.save({ new: true })
} else {
return console.log('该用户不存在')
}
}

腾讯云短信 nodejs 接入, 通过验证码修改手机示例的更多相关文章

  1. ThinkPHP5——接入腾讯云短信API

    接入腾讯云短信API相当简单,最重要的是第一次使用腾讯云短信的话有100条免费短信可以测试,对于开发人员是足够了,下面我就教大家接入腾讯云短信. 第一步:准备工作 首先要在腾讯云短信申请短信签名与短信 ...

  2. 云-腾讯云-短信:短信(SMS)

    ylbtech-云-腾讯云-短信:短信(SMS) 快速稳定.简单易用.触达全球的短信服务,支持国内短信.语音短信与国际短信 1.返回顶部 1. 腾讯云短信 SMS 简介 腾讯云短信(Short Mes ...

  3. php腾讯云短信验证码

    腾讯云短信控制台:https://console.cloud.tencent.com/sms 腾讯云短信 PHP SDK:https://github.com/qcloudsms/qcloudsms_ ...

  4. 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习

    反射实现Model修改前后的内容对比   在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...

  5. 基于tp3.2的腾讯云短信验证码的实现

    新手小白在公司要完成短信验证码注册功能,最初由于没有经验,网上的教程又不是很全,便参考着官方API文档,进行开发 直接进入正题:使用composer下载腾讯云短信接口(记得添加依赖).在项目目录下新建 ...

  6. java实现发短信功能---腾讯云短信

    目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...

  7. Python 腾讯云短信,发送手机验证码

    1.安装包 pip install qcloudsms_py 2.准备好相关参数 腾讯云短信每个月赠送100条短信,申请一个应用,获取appid,然后创建短信签名,然后创建正文模版 3.发送短信 我们 ...

  8. python调用腾讯云短信接口

    目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...

  9. 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题

    springboot集成腾讯云短信服务: (1)导入依赖 <dependency> <groupId>org.springframework.boot</groupId& ...

随机推荐

  1. 新建本地用户连接vsftp出现530 Login incorrect

    新建的用户的方式 [root@centos2 /var/ftp]# useradd -s /sbin/nologin user1 出错原因: /etc/pam.d/vsftp文件作了限制 [root@ ...

  2. git及github使用

    1.git安装 widows: 可以去git官网下载安装 ubantu : 使用命令 sudo apt-get install git 进行安装 2.git启动 widows: 首先去到需要建立git ...

  3. js面向对象--由浅入深

    基本概念 ECMA关于对象的定义是:”无序属性的集合,其属性可以包含基本值.对象或者函数.“对象的每个属性或方法都有一个名字,而每个名字都映射到一个值. 类 在现实生活中,相似的对象之间往往都有一些共 ...

  4. java代码转python代码

    (1)安装工具(windows 环境下面) 先下载antlr: http://www.antlr3.org/download/antlr-3.1.3.tar.gz 链接:http://pan.baid ...

  5. Python通过xpath查找元素通过selenium读取元素信息

    #coding:utf-8 from selenium import webdriver import time url ='http://www.baidu.com' driver = webdri ...

  6. Sql语句中Like嵌套用法

    一般的Like用法: SELECT U_NAME FROM T_USER WHERE U_NAME LIKE '%A%' 但是,我此次like关键字后面的对应值是一个变量,需要用select语句来实现 ...

  7. React-Redux常见API

    React-Redux是在Redux的基础上,将其大量重复的代码进行了封装. 1. Provider 利用context对象给所有子组件提供store.不再需要在每个组件都引用store. impor ...

  8. (尚018-第二章2.1)Vue使用vue-cli创建模板项目

    2.1.1 1)vue-cli是官方提供的脚手架工具(注意:脚手架本身是个库) 2)github:https://github.com/vuejs/vue-cli 3)作用:从https://gith ...

  9. circus 架构

    转自官方文档:https://circus.readthedocs.io/en/latest/design/architecture/ Overall architecture Circus is c ...

  10. 羊村的OI题解

    目录 喜羊羊与灰太狼--仓库管理 喜羊羊与灰太狼--破译密码 喜羊羊与灰太狼--烦恼的礼物 喜羊羊与灰太狼--仓库管理 传送门 水的一批,还让开o2了 就不写了 #include<iostrea ...