腾讯云短信 nodejs 接入, 通过验证码修改手机示例
腾讯云短信 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 接入, 通过验证码修改手机示例的更多相关文章
- ThinkPHP5——接入腾讯云短信API
接入腾讯云短信API相当简单,最重要的是第一次使用腾讯云短信的话有100条免费短信可以测试,对于开发人员是足够了,下面我就教大家接入腾讯云短信. 第一步:准备工作 首先要在腾讯云短信申请短信签名与短信 ...
- 云-腾讯云-短信:短信(SMS)
ylbtech-云-腾讯云-短信:短信(SMS) 快速稳定.简单易用.触达全球的短信服务,支持国内短信.语音短信与国际短信 1.返回顶部 1. 腾讯云短信 SMS 简介 腾讯云短信(Short Mes ...
- php腾讯云短信验证码
腾讯云短信控制台:https://console.cloud.tencent.com/sms 腾讯云短信 PHP SDK:https://github.com/qcloudsms/qcloudsms_ ...
- 反射实现Model修改前后的内容对比 【API调用】腾讯云短信 Windows操作系统下Redis服务安装图文详解 Redis入门学习
反射实现Model修改前后的内容对比 在开发过程中,我们会遇到这样一个问题,编辑了一个对象之后,我们想要把这个对象修改了哪些内容保存下来,以便将来查看和追责. 首先我们要创建一个User类 1 p ...
- 基于tp3.2的腾讯云短信验证码的实现
新手小白在公司要完成短信验证码注册功能,最初由于没有经验,网上的教程又不是很全,便参考着官方API文档,进行开发 直接进入正题:使用composer下载腾讯云短信接口(记得添加依赖).在项目目录下新建 ...
- java实现发短信功能---腾讯云短信
目录 java实现发短信功能 前言 开发环境 腾讯云 ---短信 代码 效果 结束语 java实现发短信功能 前言 如今发短信功能已经成为互联网公司的标配,本篇文章将一步步实现java发送短信 考察了 ...
- Python 腾讯云短信,发送手机验证码
1.安装包 pip install qcloudsms_py 2.准备好相关参数 腾讯云短信每个月赠送100条短信,申请一个应用,获取appid,然后创建短信签名,然后创建正文模版 3.发送短信 我们 ...
- python调用腾讯云短信接口
目录 python调用腾讯云短信接口 账号注册 python中封装腾讯云短信接口 python调用腾讯云短信接口 账号注册 去腾讯云官网注册一个腾讯云账号,通过实名认证 然后开通短信服务,创建短信应用 ...
- 使用springboot集成腾讯云短信服务,解决配置文件读取乱码问题
springboot集成腾讯云短信服务: (1)导入依赖 <dependency> <groupId>org.springframework.boot</groupId& ...
随机推荐
- Linux命令——lsblk
参考:Linux lsblk Command Tutorial for Beginners (8 Examples) 简介 lsblk可以看成是“List block device”的缩写,即列为出所 ...
- Cloudera Manager 5.15.1忘记密码怎么破?
Cloudera Manager 5.15.1忘记密码怎么破? 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.登陆CM修改默认密码 1>.使用默认密码登陆CM界面 2&g ...
- windows下面,PHP如何启动一些扩展功能
我今天在试这个时,发现php有些默认设置,是需要人为介入修改的. 比如,当我们在安装一个软件,而这个软件需要启用php一些扩展功能. 那么,按一般套路,将php.ini文件里的相关行的注释去掉即可. ...
- java调用c++库
c++ 写的库 jni封装一层 才可以给 java调用
- Python获取当前脚本文件夹(Script)的绝对路径
Python获取当前脚本绝对路径 Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配 ...
- 优化mybatis框架中的查询用户记录数的案例
通过对mybatis框架的中核心接口和类的分析,发现之前写的那个小demo是有问题的.现在对其进行部分优化. 如果存在多个功能的时候,势必会有很多重复的代码,如,创建sqlsession对象,关闭sq ...
- Linux 字符集的查看及修改
一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...
- WinDbg常用命令系列---显示段选择器dg、链接列表dl和字符串ds/dS
dg (Display Selector) dg命令显示指定选择器的段描述符. dg FirstSelector [LastSelector] 参数: FirstSelector指定要显示的第一个选择 ...
- redash oracle 数据源docker 镜像
redash 官方的docker 镜像是没有包含oracle的,需要我们自己添加,参考了一个docker 镜像进行了简单的修改 Dockerfile FROM redash/redash:7.0.0. ...
- 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问
有时在我们的实际开发中我们希望直接访问k8s service 暴露的服务,以及pod的ip 解决方法,实际上很多 nodeport ingress port-forword 实际上我们还有一种方法:正 ...