zoukankan      html  css  js  c++  java
  • 微信小程序发送短信验证码

    微信小程序注册完整实例,发送短信验证码,带60秒倒计时功能,无需服务器端。效果图:

     

    代码:

    index.wxml


    <!--index.wxml-->
    <view class="container">
    <view class='row'>
    <input placeholder='请输入姓名' bindinput='bindNameInput'/>
    </view>

    <view class='row'>
    <input placeholder='请输入手机号' bindinput='bindPhoneInput'/>
    </view>
    <view class='row'>
    <input placeholder='请输验证码' bindinput='bindCodeInput' style='70%;'/>
    <button class='codeBtn' bindtap='getCode' hidden='{{hidden}}' disabled='{{btnDisabled}}'>{{btnValue}}</button>
    </view>
    <view>
    <button class='save' bindtap='save' >保存</button>
    </view>

    </view>

    index.js

    //index.js
    var zhenzisms = require('../../utils/zhenzisms.js');
    //获取应用实例
    const app = getApp();

    Page({
    data: {
    hidden: true,
    btnValue:'',
    btnDisabled:false,
    name: '',
    phone: '',
    code: '',
    second: 60
    },
    onLoad: function () {

    },
    //姓名输入
    bindNameInput(e) {
    this.setData({
    name: e.detail.value
    })
    },
    //手机号输入
    bindPhoneInput(e) {
    console.log(e.detail.value);
    var val = e.detail.value;
    this.setData({
    phone: val
    })
    if(val != ''){
    this.setData({
    hidden: false,
    btnValue: '获取验证码'
    })
    }else{
    this.setData({
    hidden: true
    })
    }
    },
    //验证码输入
    bindCodeInput(e) {
    this.setData({
    code: e.detail.value
    })
    },
    //获取短信验证码
    getCode(e) {
    console.log('获取验证码');
    var that = this;
    zhenzisms.client.init('https://sms_developer.zhenzikj.com', 'appId', 'appSecret');
    zhenzisms.client.send(function (res) {
    if(res.data.code == 0){
    that.timer();
    return ;
    }
    wx.showToast({
    title: res.data.data,
    icon: 'none',
    duration: 2000
    })
    }, '15811111111', '验证码为:3322');

    },
    timer: function () {
    let promise = new Promise((resolve, reject) => {
    let setTimer = setInterval(
    () => {
    var second = this.data.second - 1;
    this.setData({
    second: second,
    btnValue: second+'秒',
    btnDisabled: true
    })
    if (this.data.second <= 0) {
    this.setData({
    second: 60,
    btnValue: '获取验证码',
    btnDisabled: false
    })
    resolve(setTimer)
    }
    }
    , 1000)
    })
    promise.then((setTimer) => {
    clearInterval(setTimer)
    })
    },
    //保存
    save(e) {
    console.log('姓名: ' + this.data.name);
    console.log('手机号: ' + this.data.phone);
    console.log('验证码: ' + this.data.code);

    //省略提交过程
    }
    })
     

    index.wxss

    /**index.wxss**/
    page{
    height: 100%;
    100%;
    background: linear-gradient(#5681d7, #486ec3);
    display: flex;
    flex-direction: column;
    }
    .container{
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    90%;
    margin: 50rpx auto;
    }

    .row{
    position: relative;
    height: 80rpx;
    100%;
    border-radius: 10rpx;
    background: #fff;
    margin-bottom: 20rpx;
    padding-left: 20rpx;
    box-sizing: border-box;
    }
    .row input{
    100%;
    height:100%;
    }
    .codeBtn{
    position: absolute;
    right: 0;
    top: 0;
    color: #bbb;
    30%;
    font-size: 26rpx;
    height: 80rpx;
    line-height: 80rpx;
    }
    .subBtn{
    200rpx;
    height: 80rpx;
    background: #fff;
    color: #000;
    border-radius: 50rpx;
    line-height: 80rpx;
    }

  • 相关阅读:
    多线程
    带缓存的字符输入输出流
    输入输出流(I/O)
    课本235页2-3题
    包装&工具类
    集合类SetMap
    tp框架之增删改查
    tp框架之数据添加
    tp框架之查询
    tp框架之Model类与命名空间
  • 原文地址:https://www.cnblogs.com/xiaobai-y/p/10772498.html
Copyright © 2011-2022 走看看