废话不多说,先上效果
一、用到的相关知识点
1.腾讯云中的消息接口
2.小程序云开发相关知识点
3.小程序相关知识点
技术点就这些,还是蛮简单的,有基础的小伙伴可以思考下原理,没基础的呢,ctrl+c复制一下,ctrl+v到代码里,再改改参数就能用了
二、登录腾讯云,开通消息接口
云产品-->云通讯-->短信
完成签名管理和正文模板管理
关于腾讯云的准备工作就到这里了,这里有个小细节要补充一下
这段话的意思呢,就是说{1}{2}是自己填入的变量,不用去改变,改变的是后面的文字
三、小程序云开发调用API,实现短信验证
我先把样式布局贴出来(没有专门设计,只为了演示下大致效果)
<view class=“box”> >
<text>请输入您的手机号码</text>>
<input class=“input” type=“number” bindblur=“getPhone”></input>>
<text>请输入验证码</text>>
<input class=“input” type=“text” bindblur=“getSms”></input>>
<text>状态:{{result}}</text>>
<button type=“primary” bindtap=“send”>点击发送</button>>
<button type=“primary” bindtap=“check”>点击验证</button>>
</view>>.box{ padding:20rpx;}>
button{ margin-top: 20rpx;}>
.input{ border:1px solid #eee;}
好了,下面开始讲云开发调用短信接口的部分(创建小程序,再创建云开发模式,删除自动生成的模板啥的,我省略了)
1.新建Node.js云函数
2.再package.json中的"dependencies"加入:“qcloudsms_js”: “^0.1.1”
//下面的除了标注的地方外,其余的不用更改
const cloud = require(‘wx-server-sdk’)
const QcloudSms = require(“qcloudsms_js”)
const appid = ****** // 替换成云短信的 SDK AppID
const appkey = “*********” // 替换成云短信的 App Key
const templateId = ****** // 替换成模板 ID
const smsSign = “******” // 替换成签名内容
cloud.init()
exports.main = async (event, context) => new Promise((resolve, reject) => {
/**
* 下面这段代码的作用是,生成随机的验证码,因为循环了6次,就是6位数的
*/
// 生成6位数验证码
var code = “”;
for (var i = 0; i < 6; i++) {
var radom = Math.floor(Math.random() * 10);
code += radom;
}
// 生成6位数验证码
var qcloudsms = QcloudSms(appid, appkey);
var ssender = qcloudsms.SmsSingleSender();
var params = [code,“2”];
var mobile = event.mobile
var nationcode = event.nationcode
ssender.sendWithParam(nationcode, mobile, templateId, params, smsSign, “”, “”, (err, res, resData) => {
if (err) {
reject({ err })
} else {
resolve({ res: res.req, resData})
}
}
);
})
里面有段代码标红了,因为比较重要
var params = [code,"2"]
上面的参数,就是之前短信模板里面的参数
比如说,你填的是
{1}为您的登录验证码,请于{2}分钟内填写。如非本人操作,请忽略本短信。
var params = [“1234”,“2”]
收到的短信就是:
__1234__为您的登录验证码,请于__2__分钟内填写。如非本人操作,请忽略本短信。
下面是小程序中js调用云函数的接口
Page({>
/**>
* 页面的初始数据>
*/>
data: {>
result: “未发送”>
},>
/**>
* 获取输入的手机号码>
*/>
getPhone: function(e) {>
let phone = e.detail.value;>
this.setData({>
phone>
})>
},>
/**>
*获取输入的验证码>
*/>
getSms: function(e) {>
let sms = e.detail.value;>
this.setData({>
u_sms: sms>
})>
},>
/**>
* 点击【点击验证】后,比较随机生成的二维码和用户输入的二维码是否一致>
*/>
check: function() {>
let s_sms = this.data.s_sms;>
let u_sms = this.data.u_sms;>
if (s_sms == u_sms) {>
wx.showToast({>
title: ‘验证成功’,>
icon: ‘success’,>
duration: 2000>
})>
} else {>
wx.showToast({>
title: ‘验证码输入错误’,>
icon: ‘none’,>
duration: 2000>
})>
}>
},>
/**>
* 点击发送,调用云函数>
*/>
send: function() {>
let _this = this;>
wx.cloud.callFunction({>
name: ‘sendsms’,>
data: {>
mobile: _this.data.phone,>
nationcode: ‘86’>
},>
success: res => {>
let sms = res.result.res.body.params[0];>
let result = res.errMsg;>
if (result == “cloud.callFunction:ok”) {>
_this.setData({>
result: “发送成功”,>
s_sms: sms>
})>
} else {>
_this.setData({>
result: “发送失败”>
})>
}>
},>
fail: err => {>
console.error(’[云函数] [sendsms] 调用失败’, err)>
}>
})>
}>
})>
好了,这样就完成了云开发实现短信验证的效果