uniapp 微信小程序 获取openid,手机号进行登录,配合后端

在这里插入图片描述

流程:登录注册功能,通过uni.getUserProfile获取wxcode,通过wxcode传给后端获取openid,sessionkey,unionid。
通过<u-button type="success" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">一键登录</u-button>,
传到后端这些参数:
'session_key': $this.openidData.sessionKey,
'encryptedData': e.detail.encryptedData,
'iv': e.detail.iv
获取手机号,
再将手机号,unionid,openid传到后端进行登录
<template><view class="page"><!-- 自定义头部 navbar --><u-navbar back-icon-name="arrow-left" title=" " :custom-back="navbarBack":background="{ backgroundColor: 'rgba(0,0,0,0)' }" :border-bottom="false":is-back="pageStatus != 'home'"></u-navbar><!-- logo --><view class="logo-wrap" v-if="pageStatus == 'home' || pageStatus == 'getWxRole'"><image class="logo"src="xxxxxxxxxxxxxx/static/login/login_logo.png"></image><view class="app-name">欢迎登录</view><view class="app-title">弘云艺术中心</view></view><!-- 默认登录页面显示 --><view style="width: 100%;" v-if="pageStatus == 'home'"><view class="text-area" @click="loginByWx">手机号快捷登录</view></view><!-- 微信授权登录,获取用户信息 --><view style="width: 100%;" v-if="pageStatus == 'getWxRole'"><view class="info">为提供优质服务,需要获取你的以下信息 :</view><view class="public"><view class="public-dot"></view><view class="public-text">你的公开信息(头像、昵称等)</view></view><view class="text-enter" @click="getWxLoginRole">授权进入</view></view><!-- 微信登录小程序,再授权获取用户信息之后 --><view class="loginWx" v-if="pageStatus == 'loginByWx'"><view class="title">欢迎使用 弘云艺术中心</view><view class="desc">立即登录享受优质服务</view><view class="avatar"><image mode="aspectFill" :src="wxLoginUserInfo.userInfo.avatarUrl"></image></view><u-button type="success" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">一键登录</u-button></view><!-- 协议勾选 --><view class="agree" v-if="pageStatus == 'home' || pageStatus == 'getWxRole' "><view class="agree_img" @click="changeAgreeFlag" v-show="!agree_flag"><image src="xxxxxxxxxxx/static/mine/check.png"></image></view><view class="agree_img" @click="changeAgreeFlag" v-show="agree_flag"><image src="xxxxxxxxxxxxxxxxx/static/operate/checked.png"></image></view><view class="agree_text">登录代表您已同意<span>《用户服务协议》《隐私权政策》</span></view></view></view>
</template><script>import FunUniappTheme from '@/theme.scss';export default {data() {return {// 页面状态,默认为 home// getWxRole:获取微信权限页,loginByWx:微信授权登录页// loginByCode:手机号+验证码登录页,loginByPwd:手机号+密码登录// forgetPwd:找回密码页面,resetPwd,重置密码页面pageStatus: 'home',// 协议是否勾选agree_flag: false,// 微信授权的用户信息wxLoginUserInfo: {},// openidopenId: '',// 系统内用户信息userInfo: {},//openidopenidData: {}};},onShow() {},onLoad(ops) {if (ops && ops.interceptcard && ops.interceptcard === "true") {uni.showToast({title: '购买商品,请先登录注册。',icon: 'none',duration: 4000,});}if (ops && ops.goods_id_detail) {console.log(ops.goods_id_detail, '二维码商品详情')uni.setStorageSync('goods_id_detail', ops.goods_id_detail)}console.log(FunUniappTheme);},onReady() {},methods: {// 勾选/取消用于协议changeAgreeFlag() {this.agree_flag = !this.agree_flag;},// 微信登录loginByWx() {if (!this.agree_flag) {uni.showToast({icon: 'none',title: '请先阅读并勾选协议'});return;}this.getUserInfoByWx(() => {this.getWxCode(code => {let $this = this;console.log('执行了吗', code)uni.request({url: "xxxxxxxxxxxxxx/mobile/index.php?m=user&c=indexapi&a=oauth2",method: 'POST',header: {'Content-Type': 'application/x-www-form-urlencoded'},data: {'wxcode': code,'parent_unionid': uni.getStorageSync('unionid')},success(res) {$this.openidData = res.data.data;console.log(res.data.data, 9999, $this.openidData);uni.setStorageSync('OPEN_ID', res.data.data.openid)}});});});},// 自定义navbar的返回方法navbarBack() {if (this.pageStatus == 'getWxRole' || this.pageStatus == 'loginByWx' ) {this.pageStatus = 'home';} else if (this.pageStatus == 'forgetPwd' || this.pageStatus == 'resetPwd') {this.pageStatus = 'loginByPwd';} else if (this.pageStatus == 'loginByPwd') {this.pageStatus = 'loginByCode';}},// 微信授权getWxLoginRole() {if (!this.agree_flag) {uni.showToast({icon: 'none',title: '请先阅读并勾选协议'});return;}this.getUserInfoByWx(() => {this.getWxCode(code => {let $this = this;console.log('执行了吗', code)uni.request({url: "xxxxxxxxxxxxxxx/mobile/index.php?m=user&c=indexapi&a=oauth2",method: 'POST',header: {'Content-Type': 'application/x-www-form-urlencoded'},data: {'wxcode': code,'parent_unionid': uni.getStorageSync('unionid')},success(res) {$this.openidData = res.data.data;console.log(res.data.data, 9999, $this.openidData);uni.setStorageSync('OPEN_ID', res.data.data.openid)}});});});},//个人中心userinfo() {uni.request({url: "xxxxxxxxxxxxxindex.php?m=user&c=indexapi&a=userinfo",method: 'POST',header: {'Content-Type': 'application/x-www-form-urlencoded'},data: {'open_id': uni.getStorageSync('OPEN_ID')},success(res) {console.log(res.data.data, '个人中心222');uni.setStorageSync('USER_ID', res.data.data.info.user_id)uni.setStorageSync('user_rank', res.data.data.info.user_rank)if (uni.getStorageSync('goods_id_detail')) {uni.reLaunch({url: '/pages-mall/pages/goods/detail?goods_id_detail=' + uni.getStorageSync('goods_id_detail')});} else {uni.reLaunch({url: '/pages/home/index'});}}});},// 基于uni的获取code方法getWxCode(callBack) {uni.login({provider: 'weixin',onlyAuthorize: true,success: loginRes => {console.log(loginRes, '获取信息')callBack(loginRes.code);},fail(e) {}});},// 获取openIdgetOpenId(code, callBack) {this.$u.api.getOpenId(code).then(res => {// uni.setStorageSync('OPEN_ID', res.openid);callBack(res);});},// 获取个人信息getUserInfoByWx(callBack) {let $this = this;uni.getUserProfile({desc: '获取你的昵称、头像',success: function(data) {console.log(data, '用户信息')uni.setStorageSync({key: 'APP_WX_USERINFO',data: data});$this.wxLoginUserInfo = data;$this.pageStatus = 'loginByWx';callBack();},fail: function(error) {}});},// 获取手机号回调decryptPhoneNumber(e) {let $this = this;console.log(e.detail, 9898)uni.request({url: "xxxxxxxxxxxxxxx/index.php?m=user&c=indexapi&a=decryptwechatdata",method: 'POST',header: {'Content-Type': 'application/x-www-form-urlencoded'},data: {'session_key': $this.openidData.sessionKey,'encryptedData': e.detail.encryptedData,'iv': e.detail.iv},success(res) {console.log(res.data, '手机号');uni.request({url: "xxxxxxxxxxxxxxxxxxxxxx/index.php?m=oauth&c=indexapi&a=bind_register",method: 'POST',header: {'Content-Type': 'application/x-www-form-urlencoded'},data: {'mobile': res.data.data.phoneNumber,'unionid': $this.openidData.unionid,'openid': $this.openidData.openid},success(res) {console.log(res.data, '登录成功');if (res.data.code === 0) {$this.userinfo()uni.setStorageSync('IS_LOGIN', true);uni.setStorageSync('fh_type',0)console.log(uni.getStorageSync('IS_LOGIN'), '成功了?', uni.getStorageSync('USER_ID'))}}});}});},// 微信小程序手机号登录loginByOpenId() {const openid = uni.getStorageSync('OPEN_ID');this.$u.api.loginByOpenId(openid).then(res => {this.userInfo = res;});},}};
</script><style lang="scss" scoped>.page {padding: 0 40rpx;background-color: $app-theme-bg-color;}.logo-wrap {display: flex;// justify-content: center;padding-top: 100rpx;padding-bottom: 52rpx;flex-wrap: wrap;.logo {height: 168rpx;width: 166rpx;margin-left: 76rpx;margin-top: 50rpx;}.app-name {width: 100%;padding-top: 80rpx;margin-left: 78rpx;font-size: 38rpx;font-weight: 600;color: #333333;line-height: 52rpx;}.app-title {width: 100%;padding-top: 16rpx;margin-left: 78rpx;font-size: 38rpx;font-weight: 600;color: #333333;line-height: 52rpx;}}.text-area {width: 100%;height: 96rpx;background: #19be6b;font-weight: 400;border-radius: 56rpx;color: $app-theme-text-white-color;line-height: 16px;font-size: 32rpx;text-align: center;line-height: 96rpx;/* background: url(../../static/img/logo_newhope.png); */}.info {font-size: 28rpx;font-weight: 400;color: $app-theme-text-black-color;line-height: 28rpx;margin-top: 180rpx;}.public {display: flex;align-items: center;margin-top: 30rpx;.public-dot {width: 6rpx;height: 6rpx;background: #999999;margin-right: 10rpx;}.public-text {font-size: 24rpx;font-weight: 400;color: #8f92a1;line-height: 24rpx;}}.text-enter {width: 100%;margin-top: 50rpx;height: 96rpx;background: $app-theme-color;font-weight: 400;border-radius: 56rpx;color: #ffffff;line-height: 16px;font-size: 32rpx;text-align: center;line-height: 96rpx;}.head {margin-top: 70rpx;width: 100%;display: flex;justify-content: space-between;}.back {width: 40rpx;height: 40rpx;}.agree {position: fixed;left: 50%;transform: translate(-50%, 0);bottom: 66rpx;width: 100vw;display: flex;align-items: center;justify-content: center;}.agree_img image {width: 32rpx;height: 32rpx;display: flex;align-items: center;}.agree_text {margin-left: 8rpx;font-size: 24rpx;font-weight: 400;color: #8f92a1;line-height: 24rpx;display: flex;align-items: center;span {color: $app-theme-color;}}.loginWx {width: 100%;padding-top: 64rpx;.title {text-align: left;font-size: 22px;font-family: PingFang-SC-Regular, PingFang-SC;font-weight: 400;color: #171717;line-height: 30px;margin-bottom: 12rpx;}.desc {text-align: left;font-size: 14px;font-family: PingFang-SC-Regular, PingFang-SC;font-weight: 400;color: #8f92a1;line-height: 14px;}.avatar {width: 160rpx;height: 160rpx;overflow: hidden;border-radius: 50%;display: flex;align-items: center;justify-content: center;margin: 128rpx auto 160rpx auto;image {width: 100%;height: 100%;}}}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/3837.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML批量文件上传方案——图像预览方式

作者:私语茶馆 1.HTML多文件上传的关键方案 多文件上传包括:文件有效性校验,文件预览、存储和进度展示多个方面,本章节介绍的是文件预览的实现方案。 2.文件上传前预览 2.1.效果 选择文件前: 选择文件后: 2.2.CSS文件代码 StorageCenter.css代码 html {font-family:…

uniapp app权限说明弹框2024.4.23更新

华为上架被拒绝 用uni-app开发的app&#xff0c;上架华为被拒&#xff0c;问题如下&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;电话、相机、存储&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。…

HWOD:输出单向链表中倒数第k个节点

一、知识点 不确定输入的数据有多少组时&#xff0c;可以用 if(scanf()>0) 作为判断条件 如果要处理多组数据&#xff0c;不一定要为每组数据申请空间。可以存储一组&#xff0c;处理一组&#xff0c;存储数据的空间清零之后继续存储下一组数据。额外申请空间&#xff0…

MySQL函数之单行函数

1.前言 我们在使用 SQL 语言的时候&#xff0c;不是直接和这门语言打交道&#xff0c;而是通过它使用不同的数据库软件&#xff0c;即DBMS。DBMS 之间的差异性很大&#xff0c;远大于同一个语言不同版本之间的差异。实际上&#xff0c;只有很少的函数是被 DBMS 同时支持的。比…

微信小程序:12.页面导航

什么是页面导航 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现的页面导航的方式有两种&#xff1a; 连接location.href 小程序中实现页面导航的两种方式 声明式导航 在页面上声明一个导航组件 通过点击组件实现页面跳转 导航TabBar页面 是指配置TabB…

Unity自动化之自动构建图集与压缩

文章目录 前言一、UI图集的压缩unity2020之前的版本使用图集unity2020之后的版本使用图集 二、非UI图集压缩总结 前言 为降低DrawCall&#xff0c;我们需要将多个图片构建在图集上。同时还有个好处&#xff0c;可以自动补齐图片补齐2的幂次方或正方形图&#xff0c;这样便可以…

前端实现将当前页面内容下载成图片(图片可做到高清画质)

插件背景&#xff1a; html2canvas可以把你想要转变的元素变为图片&#xff0c;使用file-saver下载图片。 1、安装html2canvas、file-saver npm install html2canvasnpm install file-saver --save 2、在Vue组件中引入并使用html2canvas、file-saver import html2canvas fro…

C#基础|对象初始化器与构造方法对比总结

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 01 对象初始化器的作用 为了更加灵活的初始化对象的“属性”&#xff0c;是对构造化方法的补充。 02 构造方法总结 2.1、存在的必要性&#xff1a;一个类中&#xff0c;至少要有一个构造方法&#xff08;有无参数均…

合合信息引领AI场景化革新,供应链金融智能化审核全面升级!

官.网地址&#xff1a;合合TextIn - 合合信息旗下OCR云服务产品 随着供给侧结构性改革的深入推进和产业结构的不断升级&#xff0c;金融机构在监管部门的指导下&#xff0c;积极拓展供应链金融业务&#xff0c;取得了显著成效。这一举措有效缓解了上下游中小企业的融资困难&a…

国产麒麟v10系统下打包electron+vue程序,报错unknown output format set

报错如下&#xff1a; 报错第一时间想到可能是代码配置原因报错&#xff0c;查看代码似乎感觉没啥问题 又查看具体报错原因可能是因为icon的原因报错&#xff0c;后面查阅发现ico在各系统平台会不兼容&#xff0c;也就是ico是给win下使用的&#xff0c;此处改下图标格式就ok&am…

Unreal Engine动态添加Button实例

在控件蓝图中添加容器&#xff0c;注意命名不要有中文 C代码中找到容器实例 1 2 3 4 5 6 7 8 UVerticalBox* verticalBox Cast<UVerticalBox>(CurrentWidget->GetWidgetFromName(TEXT("VerticalBox_0"))); if (verticalBox ! nullptr) { UScrollBox* …

AJAX——黑马头条-数据管理平台项目

1.项目介绍 功能&#xff1a; 登录和权限判断查看文章内容列表&#xff08;筛选&#xff0c;分页&#xff09;编辑文章&#xff08;数据回显&#xff09;删除文章发布文章&#xff08;图片上传&#xff0c;富文本编辑器&#xff09; 2.项目准备 技术&#xff1a; 基于Bootst…

ShardingSphere 5.x 系列【26】 数据分片原理之 SQL 路由

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址:https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 携带分片键2.1 直接路由2.2 标准路由2.3 笛卡尔路由3. 不携带分片…

【内网横向】SSH协议隧道搭建详解

什么是SSH隧道 SSH隧道是通过Secure Shell&#xff08;SSH&#xff09;协议在两个网络节点之间创建的加密通道。它可以用于安全地传输数据&#xff0c;绕过网络限制或保护数据免受窃听。通过SSH隧道&#xff0c;可以在两个网络之间建立安全的连接&#xff0c;例如在本地计算机和…

济宁市中考报名照片要求及手机拍照采集证件照方法

随着中考报名季的到来&#xff0c;并且进入了中考报名演练阶段&#xff0c;济宁市的广大考生和家长都开始忙碌起来。报名过程中&#xff0c;上传一张符合要求的证件照是必不可少的环节。本文将详细介绍济宁市中考报名照片的具体要求&#xff0c;并提供一些实用的手机拍照采集证…

BUUCTF--web(2)

1、[HCTF 2018]admin1 打开题目后发现有注册和登录两个页面&#xff0c;因为题目提示admin&#xff0c;尝试用admin进行爆破 爆破得到密码为123 登录得到flag 2、[护网杯 2018]easy_tornado1 打开题目后有三个文件&#xff0c;分别打开查看 在url地址栏中发现包含两个参数&a…

鸿蒙OpenHarmony【轻量系统 编写“Hello World”程序】 (基于Hi3861开发板)

编写“Hello World”程序 下方将通过修改源码的方式展示如何编写简单程序&#xff0c;输出“Hello world”。请在下载的源码目录中进行下述操作。 确定目录结构。 开发者编写业务时&#xff0c;务必先在./applications/sample/wifi-iot/app路径下新建一个目录&#xff08;或一…

计算机视觉——OpenCV 使用分水岭算法进行图像分割

分水岭算法 分水岭算法&#xff1a;模拟地理形态的图像分割 分水岭算法通过模拟自然地形来实现图像中物体的分类。在这一过程中&#xff0c;每个像素的灰度值被视作其高度&#xff0c;灰度值较高的像素形成山脊&#xff0c;即分水岭&#xff0c;而二值化阈值则相当于水平面&am…

上门服务系统|上门服务小程序搭建流程

随着科技的不断进步和人们生活水平的提高&#xff0c;越来越多的服务开始向线上转型。传统的上门服务业也不例外&#xff0c;随着上门服务小程序的兴起&#xff0c;人们的生活变得更加便捷和高效。本文将为大家介绍上门服务小程序的搭建流程以及应用范围。 一、上门服务小程序搭…

华为OD机试 - 跳格子3 - 动态规划(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…