网站首页 > 资源文章 正文
在微信小程序中实现验证码功能通常需要前后端协作,以下是关键步骤和示例代码:
一、前端实现(小程序端)
javascript
// WXML
<button bindtap="getCode" disabled="{{isCounting}}">
{{countdownText}}
</button>
// JS
Page({
data: {
isCounting: false,
countdownText: '获取验证码'
},
getCode() {
const phone = this.data.phone; // 需先获取用户输入的手机号
if (!/^1[3-9]\d{9}$/.test(phone)) {
wx.showToast({ title: '手机号格式错误', icon: 'none' });
return;
}
this.setData({ isCounting: true });
let seconds = 60;
// 发送请求
wx.request({
url: 'https://yourdomain.com/api/send-code',
method: 'POST',
data: { phone },
success: (res) => {
if (res.data.code === 200) {
wx.showToast({ title: '验证码已发送' });
}
}
});
// 倒计时
const timer = setInterval(() => {
seconds--;
this.setData({
countdownText: `${seconds}秒后重发`
});
if (seconds <= 0) {
clearInterval(timer);
this.setData({
isCounting: false,
countdownText: '重新获取'
});
}
}, 1000);
}
})
二、后端实现(示例Node.js)
javascript
const express = require('express');
const Redis = require('ioredis');
const redis = new Redis();
const router = express.Router();
// 发送验证码接口
router.post('/send-code', async (req, res) => {
const { phone } = req.body;
// 频率限制(1分钟间隔)
const lastSent = await redis.get(`sms_cooldown:${phone}`);
if (lastSent && Date.now() - lastSent < 60000) {
return res.json({ code: 400, msg: '操作过于频繁' });
}
// 生成6位随机码
const code = Math.floor(100000 + Math.random() * 900000);
// 存储验证码(5分钟有效)
await redis.setex(`sms_code:${phone}`, 300, code);
await redis.setex(`sms_cooldown:${phone}`, 60, Date.now());
// 调用短信服务(示例用伪代码)
try {
await sendSMS(phone, `您的验证码是:${code},5分钟内有效`);
res.json({ code: 200, msg: '发送成功' });
} catch (err) {
console.error('短信发送失败', err);
res.json({ code: 500, msg: '发送失败' });
}
});
// 验证码校验接口
router.post('/verify-code', async (req, res) => {
const { phone, code } = req.body;
const storedCode = await redis.get(`sms_code:${phone}`);
if (!storedCode || storedCode !== code.toString()) {
return res.json({ code: 400, msg: '验证码错误或已过期' });
}
// 验证通过后删除缓存
await redis.del(`sms_code:${phone}`);
res.json({ code: 200, msg: '验证成功' });
});
三、关键注意事项
- 安全防护:
O 添加图形验证码/滑动验证(通过<button open-type="getPhoneNumber">获取微信官方手机号)
O IP限流(防止恶意调用)
O 敏感操作日志记录
- 短信服务选择:
O 腾讯云短信(推荐,与微信生态集成好)
O 阿里云、云片等第三方服务
O 需提前申请短信模板和签名
- 用户体验优化:
O 本地缓存倒计时状态(防止页面切换后状态丢失)
O 错误重试机制
O 国际化手机号处理(+86前缀等)
- 微信规范要求:
O 手机号获取需用户主动触发
O 敏感信息需加密传输
O 遵守《微信小程序运营规范》
建议优先考虑使用微信官方提供的手机号快速验证组件,通过<button open-type="getPhoneNumber">获取加密数据后到后端解密,可免去手动输入手机号的步骤,同时更符合平台规范。
猜你喜欢
- 2025-05-14 身份证查询服务API:准确识别身份证信息
- 2025-05-14 阿里云国际站:怎样调用API实现智能语音合成?
- 2025-05-14 Sa-Token v1.42.0 发布,新增 API Key、TOTP 验证码等能力
- 2025-05-14 亲测好用!解决国内短信受限的办法分享
- 2025-05-14 个人开发者如何发送短信?这个方案太香了!
- 2025-05-14 Spring Boot中对接Twilio以实现发送验证码和验证短信码
- 2025-05-14 SMS短信验证服务或存风险,小心账号隐私“失守”
你 发表评论:
欢迎- 05-1430个在线地图瓦片URL分享
- 05-1425个在线地图瓦片URL分享
- 05-14PixelStyle for Mac(mac照片编辑器)
- 05-14一篇文章带你了解CSS3 3D 转换知识
- 05-14我们的世界是假的?马斯克:我们生活在高文明模拟的矩阵游戏中
- 05-14【视觉AI的基石】斯坦福大学笔记!带你吃透卷积神经网络 (CNN)
- 05-14潮流 | 通过AAPE的新价目,无虑入荷未来主义服饰
- 05-14身份证查询服务API:准确识别身份证信息
- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)