微信小程序接入腾讯云短信验证码流程

以下是针对 AA公司微信小程序接入腾讯云短信验证码全流程操作指南,包含资质申请、签名/模板配置、代码对接的完整解决方案:


一、资质申请(必须通过审核才能发短信)

1️⃣ 进入资质管理页
  • 路径:腾讯云控制台 → 短信 → 实名资质管理 → 添加资质
2️⃣ 填写资质信息
字段填写要求示例 (AA公司)
资质名称自定义标识名称AA公司短信主资质
资质属性选「自用」(AA公司小程序主体与腾讯云账号实名主体一致)
❗ 若不一致需选「他用」并上传授权书
○ 自用
企业证件类型营业执照或统一社会信用代码证营业执照
资质证件上传盖公章的营业执照
→ 支持PNG/JPG ≤5MB
→ 水印文字:仅用于办理腾讯云短信增值服务
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
法定代表人上传法人身份证正反面(需在有效期内)张三的身份证正反面扫描件
3️⃣ 提交审核
  • 审核时效:2小时内(工作时间优先审核)
  • ⚠️ 注意事项
    • 公章必须清晰可见,且与营业执照名称一致
    • 避免非工作时间提交(周末/节假日延审)

二、创建短信签名(标识短信发送方)

1️⃣ 路径:短信 → 签名管理 → 创建签名
2️⃣ 关键配置项
字段填写规范AA公司示例
签名类型APP应用 → 选**「微信小程序」**
签名内容小程序全称(需与微信开放平台一致)AA生活服务
证明文件上传两者之一
① 《软件著作权证书》
② 微信小程序后台设置页截图
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
申请说明写明用途:用于AA公司微信小程序用户注册验证码发送

三、申请短信模板(验证码内容规范)

1️⃣ 路径:短信 → 正文模板管理 → 创建模板
2️⃣ 模板配置
模板名称:用户注册验证码
模板类型:验证码
短信内容:您的验证码为:{1},请于{2}分钟内填写。如非本人操作,请忽略本短信。 #腾讯云会过滤【】符号
申请说明:用户手机号注册验证场景
3️⃣ 参数说明
占位符类型示例值作用
{1}数字384592随机6位验证码
{2}数字5验证码有效期(分钟)

四、微信小程序代码对接(Node.js示例)

1️⃣ 安装 SDK
npm install tencentcloud-sdk-nodejs-sms --save
2️⃣ 封装短信服务 (/service/sms.js)
const tencentcloud = require("tencentcloud-sdk-nodejs-sms");
const SmsClient = tencentcloud.sms.v20210111.Client;const client = new SmsClient({credential: {secretId: process.env.TENCENT_SECRET_ID,   // 从环境变量读取secretKey: process.env.TENCENT_SECRET_KEY,},region: "ap-guangzhou", // 按资质所属地域填写
});// 发送验证码函数
exports.sendVerificationCode = async (phone, code) => {const req = {PhoneNumberSet: [phone],SmsSdkAppId: "1400006789",          // 短信应用ID(控制台获取)SignName: "AA生活服务",             // 第2步创建的签名TemplateId: "1717171",              // 第3步模板IDTemplateParamSet: [code.toString(), "5"], // 验证码+有效期};try {const res = await client.SendSms(req);return { success: res.SendStatusSet[0].Code === "Ok" };} catch (err) {console.error("短信发送失败:", err);throw new Error("SMS_SERVICE_ERROR");}
};
3️⃣ 注册接口调用(/controllers/user.js
const { sendVerificationCode } = require("../service/sms");
const crypto = require("crypto");// 生成6位数字验证码
const generateCode = () => Math.floor(100000 + Math.random() * 900000);// 用户注册入口
exports.register = async (req, res) => {const { phone } = req.body;// 1. 生成验证码并缓存(Redis推荐)const code = generateCode();await cache.set(`REG:${phone}`, code, "EX", 300); // 5分钟有效期// 2. 发送短信try {await sendVerificationCode(phone, code);res.json({ code: 0, message: "验证码已发送" });} catch (err) {res.status(500).json({ code: 1001, message: "短信服务异常" });}
};

五、全流程避坑指南

环节高频错误解决方案
资质审核公章模糊/证件过期使用高清扫描件+有效期验证
签名驳回小程序名称与签名不一致检查微信开放平台名称
模板审核未声明「验证码」用途在模板中显式包含「验证码」关键词
代码发送失败SecretId/Key 泄露用环境变量存储密钥 → 严禁硬编码
用户收不到触发频率限制(默认1条/分钟,30条/天)控制台调整频控策略 → 设置链接

💡 终极调试方案

  1. 在腾讯云控制台使用「短信调试」工具直接测试API
  2. 查看错误码:腾讯云短信错误码列表

完成以上步骤后,AA公司微信小程序即可实现 「手机号→获取验证码→注册」 的安全闭环。建议上线前用测试手机号全链路验证(测试模板需单独申请)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89041.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云OSS文件上传完整实现方案

一、前言 阿里云对象存储服务(OSS)是一种海量、安全、低成本、高可靠的云存储服务。本文将详细介绍如何在Spring Boot项目中集成阿里云OSS实现文件上传功能。 二、准备工作 1. 获取OSS配置信息 在开始前,您需要准备以下OSS配置信息: endpoint: OSS服…

【软考--软件设计师】10.2 关系型数据库

10 模式分解 分解 模式分解:将一个关系模式分解为多个子模式 模式分解就是模式规范化的工具,模式分解使用无损连接和保持函数依赖来衡量模式分解后是否导致原有模式中部分信息丢失。 无损连接 保持函数依赖 11、事务管理 事务的ACID性质: (1)原子性(Atomicit…

python训练day44 预训练模型

预训练模型发展史 预训练模型的训练策略 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pyplot as plt# 设置中文字体支持 plt.rcParams["…

[论文阅读]MISSRce

论文title: MISSRec: Pre-training and Transferring Multi-modal Interest-aware Sequence Representation for Recommendation

Redis学习笔记——黑马点评 附近商铺到UV统计 完结

前言: 今天完结了Redis的所有实战篇。 学习收获: GEO数据结构: GEO就是Geolocation的简写形式,代表地理坐标。Redis在3.2版本中加入对Geo的支持,存储、管理和操作地理空间数据的特殊数据结构,它能高效处…

【客户端排查】mac电脑怎么查看客户端的实时运行日志

先退出客户端;打开访达里的应用程序; 打开【显示包内容】; 找到MacOS 双击里面的终端程序; 双击后,客户端会自动启动,且可以在终端中查看客户端的实时日志啦~

HarmonyOS NEXT仓颉开发语言实战案例:健身App

各位好,今日分享一个健身app的首页: 这个页面看起比之前的案例要稍微复杂一些,主要在于顶部部分,有重叠的背景,还有偏移的部分。重叠布局可以使用Stack容器实现,超出容器范围的偏移可以使用负数间距来实现&…

TreeMap源码分析 红黑树

今天尝试刨一下TreeMap的祖坟。 底层结构对比 先来看一下与HashMap、LinkedHashMap和TreeMap的对比,同时就当是复习一下: HashMap使用数组存储数据,并使用单向链表结构存储hash冲突数据,同一个冲突桶中数据量大的时候&#xff…

华为云Flexus+DeepSeek征文|基于Dify构建拍照识题智能学习助手

华为云FlexusDeepSeek征文|基于Dify构建拍照识题智能学习助手 一、构建拍照识题智能学习助手前言二、构建拍照识题智能学习助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建拍照识题智能学习助手实战3.1 配置Dify环境3.2 配置Dify工具…

题解:CF2120E Lanes of Cars

根据贪心,不难想到每次会把最长队伍末尾的那辆车移动到最短队伍的末尾。但由于 k k k 的存在,会导致一些冗余移动的存在。设需要挪动 C C C 辆车,则怒气值可以表示为 f ( C ) k C f(C) kC f(C)kC,其中 f ( C ) f(C) f(C) 是…

Excel基础:选择和移动

本文演示Excel中基础的选择和移动操作,并在最后提供了一张思维导图,方便记忆。 文章目录 一、选择1.1 基础选择1.1.1 选择单个单元格1.1.2 选择连续范围 1.2 行列选择1.2.1 选择整行整列1.2.2 选择多行多列 1.3 全选1.3.1 全选所有单元格1.3.2 智能选择…

Java面试宝典:基础四

80. int vs Integer 维度intInteger类型基本数据类型(8种之一)包装类默认值0null应用场景性能敏感场景(计算密集)Web表单、ORM框架(区分null和0)特殊能力无提供工具方法(如parseInt())和常量(如MAX_VALUE)示例:

RabbitMQ + JMeter 深度集成指南:中间件性能优化全流程解析!

在 2025 年的数字化浪潮中,中间件性能直接决定系统的稳定性和用户体验,而 RabbitMQ 作为消息队列的“老大哥”,在分布式系统中扮演着关键角色。然而,高并发场景下,消息堆积、延迟激增等问题可能让系统不堪重负&#xf…

uniapp image引用本地图片不显示问题

1. uniapp image引用本地图片不显示问题 在uniapp 开发过程中采用image引入本地资源图片。 1.1. 相对路径和绝对路径问题 在UniApp中开发微信小程序时,引入图片时,相对路径和绝对路径可能会有一些差异。这差异主要涉及到小程序和UniApp框架的文件结构、…

论文阅读:arxiv 2025 ThinkSwitcher: When to Think Hard, When to Think Fast

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 ThinkSwitcher: When to Think Hard, When to Think Fast https://arxiv.org/pdf/2505.14183#page2.08 https://www.doubao.com/chat/10031179784579842 文章目录 速览一、…

智能体记忆原理-prompt设计

智能体记忆的管理与设计开发分为以下几步: 1.记忆的抽取; 2.记忆的存储; 3.记忆的搜索; 一、记忆抽取一: FACT_RETRIEVAL_PROMPT f"""你是一位个人信息整理助手,专门负责准确存储事实、用…

026 在线文档管理系统技术架构解析:基于 Spring Boot 的企业级文档管理平台

在线文档管理系统技术架构解析:基于Spring Boot的企业级文档管理平台 在企业数字化转型的进程中,高效的文档管理系统已成为提升协作效率的核心基础设施。本文将深入解析基于Spring Boot框架构建的在线文档管理系统,该系统整合公告信息管理、…

AWTK-MVVM的一些使用技巧总结(1)

在项目中用了一段时间的AWTK-MVVM框架,由于AWTK-MVVM本身的文档十分欠缺,自己经过一段时间的研究折腾出了几个技巧,在此记录总结。 用fscript启用传统UI代码 AWTK-MVVM里面重新设计了navigator机制,重定位了navigator_to的调用方…

openwrt使用quilt工具制作补丁

前言:简单聊一下为什么需要制作补丁,因为openwrt的编译是去下载很多组件放到dl目录下面,这些组件都是压缩包。如果我们要修改这些组件里面的源码,就需要对这些组件打pacth,也就是把我们的差异点在编译的时候合入到对应…

强化学习 (1)基本概念

grid-world example 一个由多个格子组成的二维网格 三种格子:accessible可通行的; forbidden禁止通行的; target目标 state状态 state是智能体相对于环境的状态(情况) 在grid-world example里,state指的…