首页 > 其他分享 >实践|如何使用云函数去实现短信验证码功能

实践|如何使用云函数去实现短信验证码功能

时间:2023-05-08 18:33:10浏览次数:43  
标签:短信 函数 Demo 验证码 签名 模板

目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。本文以使用云函数开发一个短信验证码登录注册服务为例,帮助您了解如何实现短信验证码功能。

准备工作

  • 已 注册腾讯云 账号,并完成 企业实名认证
  • 已购买短信套餐包。
  • 准备短信签名归属方资质证明文件;
  • 了解短信正文内容审核规范;
  • 已获取短信应用的 SDKAppID。

步骤1:配置短信内容

短信签名、短信正文模板提交后,我们会在2个小时左右完成审核,您可以 配置告警联系人 并设置接收模板和签名审核通知,便于及时接收审核通知。

1:创建签名

  • 登录 短信控制台
  • 在左侧导航栏选择国内短信>签名管理,单击创建签名。
  • 结合实际情况和 短信签名审核标准 设置以下参数:
    参数取值样例
    签名用途 自用(签名为本账号实名认证的公司、网站、产品名等)
    签名类型 App
    签名内容 测试 Demo
    证明类型 小程序设置页面截图
    证明上传
  • 单击确定。
    等待签名审核,当状态变为已通过时,短信签名才可用。

2:创建正文模板

  • 登录 短信控制台
  • 在左侧导航栏选择国内短信>正文模板管理,单击创建正文模板。
  • 结合实际情况和 短信正文模板审核标准 设置以下参数:
    参数取值样例
    模板名称 验证码短信
    短信类型 普通短信
    短信内容 您的注册验证码:{1},请于{2}分钟内填写,如非本人操作,请忽略本短信。
  • 单击确定。
    等待正文模板审核,当状态变为已通过时,正文模板才可用,请记录模板 ID。

步骤2:配置私有网络和子网

默认情况下,云函数部署在公共网络中,只可以访问公网。如果开发者需要访问腾讯云的 TencentDB 等资源,需要建立私有网络来确保数据安全及连接安全。

  1. 按需 规划网络

  2. 创建私有网络,具体操作请参见 创建 VPC

    参数取值样例
    所属地域 华南地区(广州)
    名称 Demo VPC
    IPv4 CIDR 10.0.0.0/16
    子网名称 Demo 子网
    IPv4 CIDR 10.0.0.0/16
    可用区 广州三区

步骤3:配置 Redis 数据库

云数据库 Redis 实例需与 步骤2 配置私有网络的地域和子网的可用区保持一致。

       1.购买云数据库 Redis 实例,具体操作请参见 购买方式

参数取值样例
计费模式 按量计费
地域 广州
数据库版本 Redis 4.0
架构 标准架构
网络 Demo VPC,Demo 子网
实例名 立即命名:Demo 数据库
购买数量 1

步骤4:新建云函数

云函数目前支持 Python、Node.js、PHP、Java 以及 Golang 语言开发,本文以 Node.js 为例。

  1. 在 步骤2 创建的 VPC 所属地域中新建函数,具体操作请参见 编写函数
    参数取值样例
    函数名称 Demo
    运行环境 Nodejs 8.9
    创建方式 模板函数:helloworld
  2. 部署函数并配置触发方式为API网关触发器,具体操作请参见 部署函数

步骤5:部署短信 Demo

  1. 前往 云函数控制台 并选择 SMS Demo 进行部署。

  2. 在高级配置中设置 Demo 的环境变量。

字段说明
REDIS_HOST Redis 数据库地址
REDIS_PASSWORD Redis 数据库密码
SMS_TEMPLATE_ID 模板 ID,必须填写已审核通过的模板 ID。模板 ID 可登录 短信控制台 查看。
SMS_SIGN 短信签名内容,使用 UTF-8 编码,必须填写已审核通过的签名,签名信息可登录 短信控制台 查看。注:国内短信为必填参数。
SMS_SDKAPPID 短信 SdkAppid 在 短信控制台 添加应用后生成的实际 SdkAppid,示例如1400006666。
  1. 在高级配置中设置与 Redis 数据库相同的 VPC 环境。
  1. 在高级配置中设置 SCF 运行角色权限。

    需要在 访问管理 控制台给 SCF_QcsRole 角色添加短信 QcloudSMSFullAccess 权限

    这样代码里就能获取到TENCENTCLOUD_SECRETID、TENCENTCLOUD_SECRETKEY、TENCENTCLOUD_SESSIONTOKEN环境变量了,发送短信的 sdk 会用到这些环境变量。

  2. 点击完成,即可完成函数部署。

  3. 创建函数 API网关触发器,请求该触发器地址,即可使用短信相关能力。

步骤6:功能使用及说明

验证码的时效性要求较高,您可以把验证码存在内存中或存在云数据库 Redis 中。以手机号作为 key,存储发送时间、验证码、验证次数、是否已验证过等信息。

功能

发送短信验证码

请求参数:

字段类型说明
method string 请求方法,值为 getSms
phone string 手机号,值为区号+手机号,例如86185662466**

校验验证码(登录)

请求参数:

字段类型说明
method string 请求方法,值为 login
phone string 手机号,值为区号+手机号,例如86185662466**
code string 值为6位数字验证码

错误码

字段说明
InValidParam 缺少参数
MissingCode 缺少验证码参数
CodeHasExpired 验证码已过期
CodeHasValid 验证码已失效
CodeIsError 请检查手机号和验证码是否正确

标签:短信,函数,Demo,验证码,签名,模板
From: https://www.cnblogs.com/txycsig/p/17382788.html

相关文章

  • Vue "引用式"调用组件内函数
    场景希望在点击页面上的某个button时,刷新某个组件的内容.组件内容刷新函数getStatistic()在组件<Table/>内,当点击"统计"按钮时,页面Block切换至统计页面,同时调用对应组件中的getStatistic()函数,更新数据.解决方案//创建一个ref对象,接受<Table/>组件......
  • 【验证码逆向专栏】某验全家桶细节避坑总结
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 【验证码逆向专栏】数美验证码全家桶逆向分析以及 AST 获取动态参数
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • 全阶滑模无位置传感器控制仿真模型,有基本的反正切的,有锁相环的,有基本的开关函数,有饱和
    全阶滑模无位置传感器控制仿真模型,有基本的反正切的,有锁相环的,有基本的开关函数,有饱和函数,sigmod函数,以及幂函数多种滑模。还有全阶滑模观测器仿真,相比传统滑模观测器消除了额外的低通滤波器,误差更小,效果堪称完美。不仅误差小,脉动也少。(单独)还有基于扩张状态观测器的锁相环esopll......
  • MFC-GetProcAddress获取动态链接库中函数的地址
     HMODULEhmodule=::GetModuleHandle(_T("kernel32.dll"));//获取动态链接库的模块句柄typedefDWORD(*p)(void);//声明函数指针数据类型charch[]="GetCurrentThreadId";//【特别注意:这个函数名必须是ANSI的char类型】pf=(p):......
  • 企业短信遭疯狂盗用,可能是没配置验证码
    手机短信作为一种快捷的通讯方式被广泛应用。不仅在个人日常生活中,企业也习惯使用手机短信来进行验证和提醒,以保证业务的正常进行。随着数字化的发展,手机短信也成为了不法分子滥用的目标之一,给个人和企业带来不同经济损失。个人遭短信轰炸企业短信遭恶意滥用2023年2月,四川遂......
  • 常用js方法函数
    获取字符串长度(英文1个,中文2个)//把双字节的字符替换成两个单字节的字符,并获取它的字符数letstr='你好115s'constlen=str.replace(/[^\x00-\xff]/g,"00").length;console.log(len)......
  • Delphi取整函数
     UsesMathfloor和ceil是mathunit里的函数,使用前要先UsesMath。trunc和round是systemunit里的函数,缺省就可以用。floor直接往小的取,比如floor(-123.55)=-124,floor(123.55)=123trunc直接切下整数,比如trunc(-123.55)=-123,floor(123.55)=123ceil直接往大的取......
  • MySQL----日期时间函数运用
    1.1获得当前日期+时间(date+time)函数:now()除了 now()函数能获得当前的日期时间外,MySQL中还有下面的函数:current_timestamp()   current_timestamplocaltime()   localtimelocaltimestamp()   localtimestamp    这些日期时间函数,都等同于now()。鉴于......
  • mysql的时间函数 1
    对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6日期和时间类型。这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:mysql>SELECTsomethingFROMtableWHERETO_DAYS(NOW())-TO_DAYS(date_col)<=......