uniapp实现发送获取验证码

说明

验证码服务可自行去申请,不过好像是要企业才能申请,这里
结合uview组件库+mockjs在本地实现发送并获取验证码

配置

验证码组件u-verification-code官网不再维护,但不影响使用可在uniapp直接配置。
在这里插入图片描述

链接:https://pan.baidu.com/s/1XpJ5zPKLveUH57Zeod4dNg?pwd=bsso
提取码:bsso

在项目pages.json文件中配置好路径

"easycom": {
		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
	},

mockjs使用

根目录创建mock文件夹,分别创建mock/index.js,mock/code.json
在这里插入图片描述
index.js

import Mock from 'mockjs'
import code from './code.json'
Mock.mock('/mock/code',{code:200,data:code,msg:"获取验证码成功"})

code.json

[
  "1234","4553","2346","9765","4567","4589","0087","4538","8796"
]

封装axios,创建请求api

根目录下创建utils

utils/mockRequest.js

import axios from '@/js_sdk/gangdiedao-uni-axios'
//根据自身情况引入axios

// 创建自定义接口服务实例
const http = axios.create({
	baseURL: '/mock',//根据个人后端情况,修改此处baseURL
	timeout: 6000, // 不可超过 manifest.json 中配置 networkTimeout的超时时间
	withCredentials: true,
	headers: {
		'Content-Type': 'application/json',
		//'X-Requested-With': 'XMLHttpRequest',
	},
})

// 拦截器 在请求之前拦截   添加token
http.interceptors.request.use(config => {
	//请求前有关处理逻辑
	return config
})
// 响应后的拦截
http.interceptors.response.use(response => {
    //响应拦截处理逻辑
	return response;
}, error => {
	
	return Promise.reject(error.message)
})

export default http


根目录创建api文件夹

api/index.js

import mockRequest from '@/utils/mockRequest.js'

//验证码
export const getCode = () => mockRequest.get('/code')

main.js注册全局api

import * as API from '@/api/index.js'
Vue.prototype.$API = API

前端调用

template

<u-input style="width: 300rpx" v-model="code" placeholder="请输入验证码" />
<view class="bd-primary xs orange br60 flex row-center" @click="sendSmsFun" hover-class="none">
  <!-- 获取验证码 -->
  <u-verification-code unique-key="register" ref="uCode" @change="codeChange">
  </u-verification-code>
  <view class="xs">{{codeTips}}</view>
</view>

script

async sendSmsFun() {
        // if (!this.$refs.uCode.canGetCode) return
        if (!this.registerForm.mobilePhoneNumber) {
          this.$common.errorToShow('请填写手机号信息~');
          return;
        }
        console.log("111");
        const {
          data: res
        } = await this.$API.getCode()
        console.log(res);
        if (res.code == 200) {
          this.$common.successToShow(res.msg)
          this.$refs.uCode.start();
          //获取随机验证码
          var random = Math.floor(Math.random() * 9)
          this.code = res.data[random]
        }
      },

codeChange(tip) {
        this.codeTips = tip
      },



效果

在这里插入图片描述

在这里插入图片描述

uniapp实现手机验证码,可以使用以下代码段作为参考:([3-9])[0-9]{9}$/); if (!checkPhone.test(this.loginForm.phoneNum)) { this.$refs.loginToast.show({ message: '请输入正确的手机号', type: 'warning', position:'top' }); return } if(this.oneMin<60 && this.oneMin>0){ uni.showToast({ title:`请${this.oneMin}s后重新获取`, icon:'none' }) return } let data = { password: '', phone: this.loginForm.phoneNum, userName: '' } let clock = setInterval(() => { this.oneMin-- this.codeTips = this.oneMin if(this.oneMin<1){ clearInterval(clock) this.oneMin = "获取验证码" } }, 1000) loginReq.sendSms(data).then(res => { console.log("获取到的验证码", res) }).catch(err => { this.oneMin = "重新发送" uni.showToast({ title: '发送验证码失败', icon: 'none' }) }) } ``` 在这段代码中,`getCode`函数用于获取手机验证码。首先,它会检查输入的手机号是否为空,如果为空,会显示一个警告提示。接下来,使用正则表达式来验证手机号的格式是否正确,如果不正确,同样会显示一个警告提示。然后,检查倒计时的时间,如果倒计时还未结束,会显示一个提示,要求用户在倒计时结束后再重新获取验证码。接着,创建一个包含手机号的数据对象,并使用定时器来控制倒计时的时间。在定时器的回调函数中,倒计时时间递减,并更新倒计时提示。当倒计时时间为0时,清除定时器,并将倒计时提示重置为"获取验证码"。最后,调用一个发送验证码的请求,并根据请求的结果进行相应的处理。 请注意,以上代码只是一个示例,具体实现可能会根据项目的需求和架构有所不同。<span class="em">1</span> #### 引用[.reference_title] - *1* [uni-app实现验证码登录-云之讯](https://blog.csdn.net/Stitch_xiao/article/details/125780267)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值