评论

微信小程序,使用云函数实现发布短信

微信小程序之云函数发送短信验证码篇

使用云函数发送短信验证码

前端代码:

wxml:  
     <!-- 手机号 -->
        <view class="kaidian-ziliao-content flex">
            <view class="ziliao-content-name xing">手机号码</view>
            <input type="text" placeholder="请输入手机号码" placeholder-style="font-size:26rpx;" value="{{mobile}}" style="font-size: 26rpx;" bindinput="mobile" />
        </view>
        <!-- 验证码 -->
        <view class="kaidian-ziliao-content flex">
            <view class="ziliao-content-name xing">验 证 码</view>
            <view class="ziliao-content-right flex">
                <input type="text" placeholder="请输入验证码" value="{{codeInput}}" placeholder-style="font-size:26rpx;" bindinput="codeInput" value="{{codeInput}}" style="font-size: 26rpx; width: 240rpx;" />
                <view class="fasongCode" bindtap="{{!maxTimeOnly ? 'mobileCode' : ''}}" style="font-size: {{maxTimeOnly ? '22rpx' : '24rpx'}};">{{maxTimeMsg}}</view>
            </view>
        </view>

js:点击验证码按钮

  // 手机号码验证
var code = 'aaa' //生成验证码,用来发送短信验证,这个code一定要放到全局,否则发送到手机上就是undefined
page({
    data:{
         codeInput:'',//手机验证码
        maxTime:60,//60秒倒计时
        maxTimeOnly:false//控制倒计时
        maxTimeMsg:'发送验证码',
    }    
    mobileCode(){
        var that = this
        let mobileNum = /^1[34578]\d{9}$/  //验证电话号码
        // let mobileNum = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/
        var {mobile} = that.data     //获取到input输入的手机号码
        if(mobileNum.test(mobile)){       //手机号码格式验证
            wx.showToast({
                icon:'none',
                title'验证码已发送,请注意查收!',
            })
               // 60秒后重新获取验证码
            var inter = setInterval(function() {  //开启1秒执行一次定时器:注意需要为定时器命名否则无法关闭定时器
                that.setData({
                    maxTime: that.data.maxTime - 1, //一秒执行一次的秒数-1
                    maxTimeMsg:that.data.maxTime+'s后重新发送', //点击按钮后需要动态改变为此内容
                    maxTimeOnly:true//这里是为页面做了个三元运算符,为真的话按钮就无法绑定这个函数,为假则可以绑定此函数
               });
                if (that.data.maxTime < 0) { //在这里做判断如果倒计时为0
                clearInterval(inter)   //则关闭定时器
                that.setData({    //将数据重新刷新
                    maxTimeMsg:'发送验证码',
                    maxTime60,    
                    maxTimeOnly:false
                });
                }
            }, 1000);      //1000为1秒钟执行一次
            code = that.generateMixed(6)  //调用方法执行6位随机数,想向用户发几位验证码就写几,这个方法我会放在下面
            console.log('发送短信验证码:',code) //执行完上面的代码后就拿到了我们随机出来的验证码
            wx.cloud.callFunction({ //连接云函数
                name:'mobile', //云函数名称
                data:{   //传数据
                    mobile,  //手机号码
                    code,     //我们随机出来的验证码,传递给云函数,让云函数给用户发短信
                }
            }).then(res=>{
                console.log(res)
            })
        }else{
            wx.showToast({
                icon:'error',
                title'手机号码有误',
            })
        }     
    },
})

js:获取随机验证码

     //获取随机验证码,n代表几位
    generateMixed(n) {
    let chars = ['0''1''2''3''4''5''6''7''8''9'];
    let res = "";
    for (var i = 0; i < n; i++) {
      var id = Math.ceil(Math.random() * 10); //10为chars数组个数,数组里也可以写字母,只要这边个数写对就没问题
      res += chars[id];
    }
    return res;
    },

云函数代码

const cloud = require('wx-server-sdk')
cloud.init({
  env: 'flower-7gagi8mzf6917ccb' //替换自己的云环境id
})
exports.main = async (event, context) => {
  var {mobile,code} = event
  try {
    const result = await cloud.openapi.cloudbase.sendSms({
      env: 'flower-7gagi8mzf6917ccb', //替换自己的云环境id
      content: '验证码为'+code,
      phoneNumberList: [
        "+86"+mobile
      ]
    })
    return result
  } catch (err) {
    return err
  }
}

tips:值得一提的是如果只是操作了上面的流程,云函数还是会报错,此时我们需要,打开我们的云开发》点击静态网站,把这个打开后什么也不用操作

关于腾讯的短信费用,这边腾讯为我们赠送了100条的短信提供开发者测试使用

当然如果100条免费的用完之后我们可以点击设置》往下滑滑倒底部,可以选择购买


最后一次编辑于  2022-04-02  
点赞 2
收藏
评论

3 个评论

  • 折木
    折木
    10-18

    个人开发能使用短信验证码服务吗?


    10-18
    赞同
    回复
  • 鑫
    2023-07-20

    为什么我的资源使用中没有短信资源包?非个人开发

    2023-07-20
    赞同
    回复
  • _Me
    _Me
    2022-04-02

    js代码中的全局code中写一点毫不相干的数据,如果不写的话,用户在使用的时候即使不输入验证码也可以验证通过,因为输入验证码的input框中是空字符串,全局code也是空字符串所以会通过验证,这是属于一点小BUG

    2022-04-02
    赞同
    回复
登录 后发表内容