通过手机短信发送验证码,是最普遍、最安全验证用户真实身份的方式。目前,短信验证码广泛应用于用户注册、密码找回、登录保护、身份认证、随机密码、交易确认等应用场景。n本文以使用 云函数 开发一个短信验证码登录注册服务为例,帮助您了解如何实现短信验证码功能。
准备工作
已 购买 短信套餐包。
准备短信签名归属方资质证明文件,详细的文件清单以及规范请参见 签名审核标准。n 本文以使用企业营业执照作为资质证明文件为例。
了解短信正文内容审核规范,详情请参见 正文模板审核标准。
已获取短信应用的 SDKAppID。
相关资料
其他产品文档
步骤1:配置短信内容
步骤1.1:创建签名
1. 登录 短信控制台。
2. 在左侧导航栏选择国内短信>签名管理,单击创建签名。
3. 结合实际情况和 短信签名审核标准 设置以下参数:
参数 | 取值样例 |
签名用途 | 自用(签名为本账号实名认证的公司、网站、产品名等) |
签名类型 | App |
签名内容 | 测试 Demo |
证明类型 | 小程序设置页面截图 |
证明上传 | ![]() |
4. 单击确定。n等待签名审核,当状态变为已通过时,短信签名才可用。
步骤1.2:创建正文模板
1. 登录 短信控制台。
2. 在左侧导航栏选择国内短信>正文模板管理,单击创建正文模板。
3. 结合实际情况和 短信正文模板审核标准 设置以下参数:
参数 | 取值样例 |
模板名称 | 验证码短信 |
短信类型 | 普通短信 |
短信内容 | 您的注册验证码:{1},请于{2}分钟内填写,如非本人操作,请忽略本短信。 |
4. 单击确定。n等待正文模板审核,当状态变为已通过时,正文模板才可用,请记录模板 ID。
步骤2:设置短信发送频率限制(可选)
注意
同一号码同一内容30秒内最多发送1条。
同一手机号一个自然日最多发送10条。
步骤3:配置私有网络和子网
默认情况下,云函数部署在公共网络中,只可以访问公网。如果开发者需要访问腾讯云的 TencentDB 等资源,需要建立私有网络来确保数据安全及连接安全。
1. 按需 规划网络。
2. 创建私有网络,具体操作请参见 创建 VPC。
注意
私有网络和子网的 CIDR 创建后不可修改。
参数 | 取值样例 |
所属地域 | t华南地区(广州) |
名称 | Demo VPC |
IPv4 CIDR | 10.0.0.0/16 |
子网名称 | Demo 子网 |
IPv4 CIDR | 10.0.0.0/16 |
可用区 | 广州三区 |
步骤4:配置 Redis 数据库
1. 购买云数据库 Redis 实例,具体操作请参见 购买方式。
参数 | 取值样例 |
计费模式 | 按量计费 |
地域 | 广州 |
数据库版本 | Redis 4.0t |
架构 | 标准架构 |
网络 | Demo VPC,Demo 子网 |
实例名 | 立即命名:Demo 数据库 |
购买数量 | 1 |
步骤5:新建云函数
云函数目前支持 Python、Node.js、PHP、Java 以及 Golang 语言开发,本文以 Node.js 为例。
参数 | 取值样例 |
函数名称 | Demo |
运行环境 | Nodejs 8.9 |
创建方式 | 模板函数:helloworld |
2. 部署函数并配置触发方式为API网关触发器,具体操作请参见 部署函数。
步骤6:启用公网访问配置(可选)
2020年4月29日前,部署在 VPC 中的云函数默认隔离外网。若需使云函数同时具备内网访问和外网访问能力,可通过启用公网配置方式实现。n 登录 云函数控制台,选择函数服务,在云函数列表中单击目标函数名进入函数配置页。单击编辑,勾选公网访问并单击保存保存配置。
2020年4月29日及以后,新部署的云函数默认已启用公网访问,无需额外操作。
步骤7:部署短信 Demo
1. 前往 云函数控制台 并选择 SMS Demo 进行部署。n![](https://qcloudimg.tencent-cloud.cn/image/document/a197fa8857f3d1974e7c569b782f6824.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/a197fa8857f3d1974e7c569b782f6824.png)
2. 在高级配置中设置 Demo 的环境变量。n![](https://qcloudimg.tencent-cloud.cn/image/document/907df94e0fbf97cb5af375d814980a33.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/907df94e0fbf97cb5af375d814980a33.png)
3. 在高级配置中设置与 Redis 数据库相同的 VPC 环境。n![](https://qcloudimg.tencent-cloud.cn/image/document/e933d19195ac2d018d142d5cd357773d.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/e933d19195ac2d018d142d5cd357773d.png)
4. 在高级配置中设置 SCF 运行角色权限。n![](https://qcloudimg.tencent-cloud.cn/image/document/497cb797838d9163739cfa657999801d.png)
n需要在 访问管理 控制台给 SCF_QcsRole 角色添加短信 QcloudSMSFullAccess 权限n![](https://qcloudimg.tencent-cloud.cn/image/document/284fb9074ba90bac3f755396f17ede3f.png)
n这样代码里就能获取到
![](https://qcloudimg.tencent-cloud.cn/image/document/497cb797838d9163739cfa657999801d.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/284fb9074ba90bac3f755396f17ede3f.png)
TENCENTCLOUD_SECRETID、TENCENTCLOUD_SECRETKEY、TENCENTCLOUD_SESSIONTOKEN
环境变量了,发送短信的 sdk 会用到这些环境变量。5. 点击完成,即可完成函数部署。
6. 创建函数 API网关触发器,请求该触发器地址,即可使用短信相关能力。n![](https://qcloudimg.tencent-cloud.cn/image/document/13d27e79979f7441c3cec799796e8446.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/13d27e79979f7441c3cec799796e8446.png)
步骤8:功能使用及说明
验证码的时效性要求较高,您可以把验证码存在内存中或存在云数据库 Redis 中。以手机号作为 key,存储发送时间、验证码、验证次数、是否已验证过等信息。
功能
发送短信验证码
请求参数:
字段 | 类型 | 说明 |
method | string | 请求方法,值为 getSms |
phone | string | 手机号,值为区号+手机号,例如86185662466** |
校验验证码(登录)
请求参数:
字段 | 类型 | 说明 |
method | string | 请求方法,值为 login |
phone | string | 手机号,值为区号+手机号,例如86185662466** |
code | string | 值为6位数字验证码 |
错误码
字段 | 说明 |
InValidParam | 缺少参数 |
MissingCode | 缺少验证码参数 |
CodeHasExpired | 验证码已过期 |
CodeHasValid | 验证码已失效 |
CodeIsError | 请检查手机号和验证码是否正确 |