Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯云短信 nodejs 接入, 通过验证码修改手机示例

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

原创
作者头像
用户1659066
修改于 2019-08-23 10:11:19
修改于 2019-08-23 10:11:19
12.8K2
举报
文章被收录于专栏:点滴点滴

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

参考:

腾讯云短信文档

国内短信快速入门

qcloudsms Node.js SDK

文档中心>短信>错误码

nodejs sdk 使用示例

代码语言:txt
AI代码解释
复制
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

请求

代码语言:txt
AI代码解释
复制
{
  "ext": "",
  "extend": "",
  "params": [
    "验证码",
    "1234",
    "4"
  ],
  "sig": "...",
  "sign": "腾讯云",
  "tel": [
    {
      "mobile": "13788888888",
      "nationcode": "86"
    },
    {
      "mobile": "13788888889",
      "nationcode": "86"
    }
  ],
  "time": 1457336869,
  "tpl_id": 19
}

回调

代码语言:txt
AI代码解释
复制
{
  "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 发送验证码

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

代码语言:txt
AI代码解释
复制
query: {phone}
response: {token}
代码语言:txt
AI代码解释
复制
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 修改手机号

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

代码语言:txt
AI代码解释
复制
body: {
  token,
  phone,
  code,
}
response: {...}
代码语言:txt
AI代码解释
复制
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('该用户不存在')
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
看着全网最详细的,但仍看不懂,自学小白太难了
看着全网最详细的,但仍看不懂,自学小白太难了
11点赞举报
我也是在学习中,来一起学习哇
我也是在学习中,来一起学习哇
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
本文原创首发CSDN,链接 https://mp.csdn.net/console/editor/html/106041472 ,作者博客https://blog.csdn.net/qq_41464123 ,转载请带上本段内容,尤其是脚本之家、码神岛等平台,谢谢配合。 ----
Designer 小郑
2023/08/01
1.7K0
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
Java 调用腾讯云 API 发送短信验证码工具类
目前短信验证码应用场景就太多了,比如 : 用户注册、登录验证、找回密码、支付认证等,我们基本上都是通过第三方的短信服务完成对用户的验证,当然国内比较出名的就是阿里云 and 腾讯云,阿里云短信通讯是原名叫‘大于’,腾讯云没怎么了解过,阿里云的SDK和API官网都有,所以这里演示腾讯云,因为个人认证每个月有100条免费哦呢!!
Lcry
2022/11/29
6.4K0
Java 调用腾讯云 API 发送短信验证码工具类
短信验证码登录
3.进入leancloud官网https://leancloud.cn/ a.点击右上角控制台
PHP开发工程师
2021/04/19
14.3K0
短信验证码登录
【serverless实战】利用腾讯云·云开发实现短信验证码
最近支持了云开发的自定义短信验证码登录功能。第一次体会到利用云开发自身能力,开箱即用的快感。所有的精力集中在业务逻辑和数据库设计上,不用花费过多的精力浪费在运维上。
心谭博客
2020/05/06
3.5K0
Django使用腾讯云发送短信并存入redis
models.py class UserInfo(models.Model): username = models.CharField(verbose_name='用户名', max_length=32) email = models.CharField(verbose_name='邮箱', max_length=32) mobile_phone = models.CharField(verbose_name='手机号', max_length=32) password =
lyudev
2022/08/04
2.1K0
借助云开发实现小程序短信验证码的发送
是不是感觉实现起来特别简单,怎么说呢,我们代码调用其实就这么几行,就可以实现短信的发送,但是腾讯云短信模板的审核比较繁琐,还有我们先去申请短信模板,短信模板审核通过后才可以使用。
编程小石头
2020/01/03
4.5K0
借助云开发实现小程序短信验证码的发送
简单几步,用云开发搞定短信验证码登录
短信验证码登录支持在客户端使用短信验证码进行登录,封装了短信验证码的生成、发送、校验和定时清理逻辑,帮助开发者进行鉴权。登录成功后,用户身份将转化为正式用户。
腾讯云开发TCB
2020/09/08
2.1K0
使用云函数构建短信验证码服务的案例
通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。
haimingli
2020/12/29
4K0
云开发系列(一):实现验证码登录
终端作为所有用户的真正使用设备,终端开发者也是离用户最近的开发人员,它肩负着将后方提供的一个又一个独立服务整合为体验良好的产品的使命。面对不同的场景,所挑选的后方服务不同,实现方法也不同。
楚歌
2020/11/22
3.7K1
SpringBoot整合腾讯短信服务发送验证码
我这里的参数为code 和 3 code对应我随机生成的二维码 3是二维码的有效期 参数顺序与个数与你自己创建的模板内容有关 例如我的模板为这样所以这么传递参数
暴躁的程序猿
2022/03/23
2.8K0
SpringBoot整合腾讯短信服务发送验证码
腾讯云短信发送功能API-PHP接入
最近测试了一下短信发送功能,接入了腾讯云的API. 登录腾讯云https://cloud.tencent.com/ 国内短信新购三重礼 直达地址:https://cloud.tencent.com/
用户5907943
2019/07/26
9K0
【玩转腾讯云】Python 操作腾讯云短信(sms)详细教程
腾讯云短信 1. 注册腾讯云 <font color="red">已有腾讯云账号可直接跳到第二步</font> 官网 注册, 微信扫码关注腾讯云助手即可快速注册 [biu6v2it00.png] 选择 注册新账号,注册完成后,实名认证一下。选择 个人认证,填写一下信息就ok了。 [x1ldepiqx3.png][xqyn1acnua.png][kp5t4xp99f.png] <span id="sms"></span> 2. 开通腾讯云短信 通过上一步我们已经注册好了腾讯云账号,接下来去开通 腾讯云短信 功
ruochen
2021/04/11
14.4K0
【玩转腾讯云】Python 操作腾讯云短信(sms)详细教程
防短信验证码轰炸怎么防_接口幂等性解决方案
新昕科技在交易反欺诈核心上, 通过AI快速学习机制,结合国际领先的设备指纹技术,首次推出无需图形验证码机制的企业短信防火墙,三步完成下载对接。
全栈程序员站长
2022/11/07
3.4K0
发送手机验证码实现
但是刚才试了,第一次用官方提供的demo发送成功,然后整合到自己项目中,调试时由于参数配置错误导致发送了几次失败后,5次就用完了。按理说成功才能算一次,果断放弃。
我的小碗汤
2018/08/22
13.8K0
发送手机验证码实现
serverless+腾讯云短信实现短信验证码登录
传统开发协作流程(多角色参与): 1.后台开发:短信接口发送短信API、校验短信验证码是否有效API、存储用户验证状态 2.运维开发:接口部署,容灾 3.前端(客户端)开发:前端逻辑开发(调用接口,查询状态等)
腾讯即时通信IM
2020/05/18
17.6K1
serverless+腾讯云短信实现短信验证码登录
用小程序·云开发轻松构建二手书商城小程序丨实战
使用组件开发效率会高很多,避免重复工作,同时可以参考部分组件的写法,还是有很多值得学习的地方的。
腾讯云开发TCB
2019/09/29
1.9K0
一次短信验证码整改实验
这个短信验证码在并发量非常大的情况下有可能会失效,后续会进行整改升级,保证线程安全
阿东
2021/08/16
1.1K0
03 . Django之腾讯云短信
简介 由于项目在注册、登录、找回密码 时需要发送短信验证的功能,我们使用腾讯云短信做。 为什么要用腾讯云短信呢? 因为注册就送 100条免费短信 的额度。 实现 注册腾讯云 注册一个腾讯云账
iginkgo18
2020/09/27
13.6K0
03 .  Django之腾讯云短信
springboot整合redis发送手机验证码注册登录
短信验证码是通过发送验证码到手机的一种有效的验证码系统。主要用于验证用户手机的合法性及敏感操作的身份验证。常见的使用场景有:登录注册、信息修改、异常登录、找回密码等操作。 用户注册发送验证码,然后核实对比用户注册成功采用redis方式将手机号码+key放入redis缓存中设置验证码超时时间,比对用户名和验证码采用数据库存储方式,注册时拿取redis中验证码进行判读验证码是否过期是否匹配。
崔笑颜
2020/06/08
7.6K0
【玩转腾讯云】django 开发Bug追踪平台之用户注册篇(基于腾讯云短信 & redis)
项目预览 👉 Bug追踪平台【云短信买不起了,可通过 手机号:18203503747 密码:ruochen666 登入体验】 项目gitee地址 👉 saas 本篇教程对应代码为 【注册验证码处理】提交,可通过对应分支查看 用户注册篇 首先,总体的<font color="red">思维导图</font>如下: [watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5MzM5NDY3,siz
ruochen
2021/04/11
27.6K0
【玩转腾讯云】django 开发Bug追踪平台之用户注册篇(基于腾讯云短信 & redis)
推荐阅读
相关推荐
微信小程序 获取 手机验证码 短信验证码 后端功能实现解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档