小程序云开发实现短信验证
发布于 4 年前 作者 qiangfu 1401 次浏览 来自 分享

废话不多说,先上效果



一、用到的相关知识点

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)>
            }>
        })>
    }>
})>

好了,这样就完成了云开发实现短信验证的效果

回到顶部