微信小程序的注册页面包含倒计时验证码、获取用户信息


Posted in Javascript onMay 22, 2019

1、页面展示

微信小程序的注册页面包含倒计时验证码、获取用户信息

2、wxml代码

<!--pages/register/register.wxml-->
<scroll-view>
 <image src='/images/register.png' mode='widthFix' class="topImage"></image>
 <view class='input-top'>
  <input id="telphone" maxlength='11' type="text" placeholder="请输入手机号" bindinput="inputPhoneNum"/>
  <text wx:if="{{!send}}" bindtap='sendMsg' class="sendMsg">获取验证码</text>
  <text wx:if="{{send}}" class="sendMsg" bindtap="sendMsg">{{second+"s"}}</text>
 </view>
 <view class="input-buttom">
  <input id="captcha" type="number" maxlength="4" placeholder="请输入4位验证码" bindinput="inputCode"/>
 </view>
 <button class="btn" open-type="getUserInfo" bindgetuserinfo="onGotUserInfo" lang="zh_CN">立即用伞</button>
 <view class='protocol'>
 <text class="protocol-left">点击立即用伞即表示同意</text>
 <text class="protocol-right">《共享雨伞租赁服务协议》</text>
 </view>
</scroll-view>

3、wxss代码

page{
 background: #f0eff4;
}
.topImage {
 width: 100%;
 height: auto;
}
.input-top, .input-buttom {
 font-size: 30rpx;
 padding-left: 30rpx;
 margin: 0rpx 20rpx;
 background-color: white;
 height: 70rpx;
}
.input-top {
 flex-direction: row;
 display: flex;
 justify-content: space-between;
 margin-bottom: 1px;
 margin-top: 20rpx;
}
#telphone, #captcha {
 height: 70rpx;
}
.sendMsg {
 line-height: 70rpx;
 margin-right: 30rpx;
 color: #f9b400;
}
.btn {
 margin: 0rpx 20rpx;
 background-color: #f9b400;
 color: white;
 margin-top: 20rpx;
 font-size: 30rpx;
 opacity:0.8
}
/* 下方协议开始 */
.protocol{
 text-align: center;
}
.protocol-left {
 color: #333;
 font-size: 25rpx;
}
.protocol-right {
 font-size: 23rpx;
 color: #f9b400;
}
/* 下方协议结束 */

4、js代码

Page({
 //页面的初始数据
 data: {
 send: false, //是否已经发送验证码
 second: 120, //验证码有效时间
 phoneNum: '', //用户输入的电话号码
 code: '', //用户输入的验证码
 },
 //当输入手机号码后,把数据存到data中
 inputPhoneNum: function(e) {
 let phoneNum = e.detail.value;
 this.setData({
  phoneNum: phoneNum,
 })
 },
 //前台校验手机号
 checkPhoneNum: function(phoneNum) {
 let str = /^(1[3|5|8]{1}\d{9})$/;
 if (str.test(phoneNum)) {
  return true;
 } else {
  //提示手机号码格式不正确
  wx.showToast({
  title: '手机号格式不正确',
  image: '/images/warn.png',
  })
  return false;
 }
 },
 //调用发送验证码接口
 sendMsg: function() {
 var phoneNum = this.data.phoneNum;
 if (this.checkPhoneNum(phoneNum)) {
  wx.request({
  url: '写自己的后台请求发送验证码访问URL',
  method: 'POST',
  data: {
   telphone: phoneNum,
  },
  header: {
   "Content-Type": "application/x-www-form-urlencoded"
  },
  success: (res) => {
   if (获取验证码成功) {
   //开始倒计时
   this.setData({
    send: true,
   })
   this.timer();
   } else {
   //提示获取验证码失败
   wx.showToast({
    title: '获取验证码失败',
    image: '/images/warn.png',
   })
   }
  },
  })
 }
 },
 //一个计时器
 timer: function() {
 let promise = new Promise((resolve, reject) => {
  let setTimer = setInterval(
  () => {
   this.setData({
   second: this.data.second - 1
   })
   if (this.data.second <= 0) {
   this.setData({
    second: 60,
    send: false,
   })
   resolve(setTimer)
   }
  }, 1000)
 })
 promise.then((setTimer) => {
  clearInterval(setTimer)
 })
 },
 //当输完验证码,把数据存到data中
 inputCode: function(e) {
 this.setData({
  code: e.detail.value
 })
 },
 //点击立即用伞按钮后,获取微信用户信息存到后台
 //(问题缺陷:用户更改个人信息后,后台拿到的还是旧数据,不过用户信息最重要的还是openid和用户填写的手机号,其他都不重要)
 onGotUserInfo: function(e) {
 // TODO 对数据包进行签名校验
 //前台校验数据
 if (this.data.phoneNum === '' || this.data.code===''){
  wx.showToast({
  title: "请填写手机号码和验证码",
  image: '/images/warn.png',
  })
 }
 //获取用户数据,(备注:我在用户一进入小程序就已经自动把openId获取到,然后放到缓存里)
 var userInfo = {
  nickName: e.detail.userInfo.nickName,
  avatarUrl: e.detail.userInfo.avatarUrl,
  gender: e.detail.userInfo.gender,
  phoneNum: this.data.phoneNum,
  openId: wx.getStorageSync('openid') 
 }
 //获取验证码
 var code = this.data.code;
 //用户信息存到后台
 wx.request({
  url: '写自己的后台请求注册URL',
  method: 'POST',
  data: {
  telphone: userInfo.phoneNum,
  code: code,
  nickName: userInfo.nickName,
  gender: userInfo.gender,
  openId: userInfo.openId, 
  },
  header: {
  "Content-Type": "application/x-www-form-urlencoded"
  },
  success: (res) => {
  if (如果用户注册成功) {
   console.log("【用户注册成功】");
   wx.setStorage({
   key: "registered",
   data: true
   });
   wx.redirectTo({
   url: '../user/user?orderState=0'
   });
  } else {
   console.error("【用户注册失败】:" + res.data.resultMsg);
   wx.showToast({
   title: res.data.resultMsg,
   image: '/images/warn.png',
   })
  }
  }
 })
 },
})

总结

以上所述是小编给大家介绍的微信小程序的注册页面包含倒计时验证码、获取用户信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
js Flash插入函数免激活代码
Mar 31 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
May 06 Javascript
javascript学习笔记(十二) RegExp类型介绍
Jun 20 Javascript
原生js实现shift/ctrl/alt按键的获取
Apr 08 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
JQuery创建DOM节点的方法
Jun 11 Javascript
js中不同的height, top的区别对比
Sep 24 Javascript
js小数计算小数点后显示多位小数的实现方法
May 30 Javascript
HTML5 实现的一个俄罗斯方块实例代码
Sep 19 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
Jun 13 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
Dec 05 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
Nov 07 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
May 22 #Javascript
jQuery Migrate 插件用法实例详解
May 22 #jQuery
自定义Vue组件打包、发布到npm及使用教程
May 22 #Javascript
Vue中的组件及路由使用实例代码详解
May 22 #Javascript
Vue侦测相关api的实现方法
May 22 #Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 #Javascript
微信小程序系列之自定义顶部导航功能
May 21 #Javascript
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP人民币金额转大写实例代码
2015/10/02 PHP
javascript Excel操作知识点
2009/04/24 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
BootStrap智能表单实战系列(十一)级联下拉的支持
2016/06/13 Javascript
jQuery文件上传控件 Uploadify 详解
2016/06/20 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
JS实现简单tab选项卡切换
2019/10/25 Javascript
JavaScript eval()函数定义及使用方法详解
2020/07/07 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
关于uniApp editor微信滑动问题
2021/01/15 Javascript
Python基类函数的重载与调用实例分析
2015/01/12 Python
python直接访问私有属性的简单方法
2016/07/25 Python
Python实现的读写json文件功能示例
2018/06/05 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python实现UDP协议下的文件传输
2020/03/20 Python
TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法
2020/04/19 Python
CSS3属性background-size使用指南
2014/12/09 HTML / CSS
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
丝芙兰香港官网:Sephora香港
2018/03/13 全球购物
TIME时代杂志台湾总代理:台时亚洲
2018/10/22 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
技术总监的工作职责
2013/11/13 职场文书
师范大学生求职信
2014/06/13 职场文书
机器人瓦力观后感
2015/06/12 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
Java用自带的Image IO给图片添加水印
2021/06/15 Java/Android
django 认证类配置实现
2021/11/11 Python