腾讯云短信 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. Spring boot项目分环境Maven打包,动态配置文件,动态配置项目

    Spring boot Maven 项目打包 使用Maven 实现多环境 test dev prod 打包 项目的结构 在下图中可用看出,我们打包时各个环境需要分开,采用 application-环境 ...

  2. ELK-Elasticsearch 基础使用

    一.基本概念 1 Node 与 Cluster Elastic 本质上是一个分布式数据库,允许多台服务器协同工作,每台服务器可以运行多个 Elastic 实例.单个 Elastic 实例称为一个节点( ...

  3. Hbase的表结构中rowkey的设计---避免热点问题

    热点问题 hbase 中的行是以 rowkey 的字典序排序的,这种设计优化了scan 操作,可以将相关的 行 以及会被一起读取的行 存取在临近位置,便于 scan . 然而,糟糕的 rowkey 设 ...

  4. jetbreains的crack方法

    https://zhile.io/2018/08/20/jetbrains-license-server-crack.html

  5. 【Miscalculation UVALive - 6833 】【模拟】

    题目分析 题目讲的是给你一个串,里面是加法.乘法混合运算(个人赛中误看成是加减乘除混合运算),有两种算法,一种是乘法优先运算,另一种是依次从左向右运算(不管它是否乘在前还是加在前). 个人赛中试着模拟 ...

  6. Echo团队Alpha冲刺随笔 - 第九天

    项目冲刺情况 进展 已经进入测试阶段,正在消除系统的bug 问题 通过测试,找出了系统中存在的较多bug...... 体会 测试太重要了,很多原本以为没什么bug,一测就能找到好几个,而且改个bug真 ...

  7. Zookeeper基础入门介绍

    什么Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization).命 ...

  8. django-全文解锁和搜索引擎

    安装和配置 全文检索安装 pip install django-haystack==2.5.1 # 2.7.0只支持django1.11以上版本 搜索引擎安装 pip install whoosh 安 ...

  9. LeetCode 1046. Last Stone Weight

    原题链接在这里:https://leetcode.com/problems/last-stone-weight/ 题目: We have a collection of rocks, each roc ...

  10. LeetCode 439. Ternary Expression Parser

    原题链接在这里:https://leetcode.com/problems/ternary-expression-parser/description/ 题目: Given a string repr ...