项目背景:采用uniapp框架开发微信和支付宝两端小程序,前端授权基础信息和code传给后端获取openid(微信)和user_id(支付宝)建立用户体系。

项目描述:之前分开用原生框架开发的时候,都分别做过,现在既然统一用同一套框架了,所以尽量都用统一套写法去实现。

想起来简单,但做起来还是略有不同,因为这块毕竟是授权相关,不像那些纯展示的内容,属于各平台特有的东西的,下面是踩坑过后的总结,记录如下:

一、uni.getProvider 获取服务供应商

获取服务供应商 - uni-app官网 (dcloud.io)

// 获取服务供应商
uni.getProvider({service: 'oauth',success: function (res) {console.log(res.provider)}
});

二、uni.login 获取用户登录凭证code

登录 - uni-app官网 (dcloud.io)

// 获取用户登录凭证code
uni.login({provider: res.provider,success: function (loginRes) {console.log('uniapp登录凭证',loginRes);}
});

三、uni.getUserInfo 获取用户基础信息

登录 - uni-app官网 (dcloud.io)

// 获取用户基础信息 无需授权 不含code
uni.getUserInfo({provider: res.provider,success(res) {// 测试只有在微信端能拿到 支付宝端拿不到console.info('uniapp用户基础信息',res)}
});

以上三步,在微信端看没有任何问题,无需授权弹框,可以正常获取用户基础信息及code,code进行验证后也可以正常拿到openid。但是在支付宝端稍微有点问题,会发现code是正常返回的,但是用户基础信息拿不到,提示无效的授权关系。

所以这块我们想到的方案是针对支付宝单独写一个授权,采用my.getAuthCode获取authCode,注意这里的scopes分为两种auth_base和auth_user,前者拿到code只能获取user_id无需弹框授权,后者拿到的code可以同时获取user_id和其他用户基础信息,需要弹框授权。

// #ifdef MP-ALIPAY
my.getAuthCode({scopes: 'auth_user',success: (auth) => {console.log('支付宝授权凭证',auth)},
});
// #endif

全部代码如下:

// 统一登录
changeLogin(){// 获取服务供应商let self = this;uni.getProvider({service: 'oauth',success: function (res) {console.log(res.provider)self.provider = res.provider[0];// 获取用户登录凭证codeuni.login({provider: self.provider,success: function (loginRes) {console.log('uniapp统一登录凭证',loginRes)// 获取用户基础信息 无需授权 不含codeuni.getUserInfo({provider: self.provider,success(infoRes) {// 测试只有在微信端能拿到 支付宝端拿不到console.info('uniapp用户基础信息',infoRes)// #ifdef MP-ALIPAYmy.getAuthCode({scopes: 'auth_user',success: (auth) => {console.log('支付宝授权凭证',auth)},});// #endif}});}});}});
}

20211229更新

关于授权基础信息 发现微信环境 静默获取的用户信息 昵称全都是‘微信用户’

使用button结合getUserProfile调用再次查看 发现基础信息里 还是拿不到省市区和基础信息

支付宝环境 使用my.getAuthCode传参auth_user静默获取用户基础信息发现也不行了,需要使用按钮触发用户授权才能拿到。

<button open-type="getAuthorize" scope='userInfo' @getAuthorize="scopeUserInfo" onError="onAuthError"></button>
scopeUserInfo() {my.getUserInfo({success: (infoRes) => {console.log('支付宝用户基础信息',infoRes);this.sendUserInfo(infoRes.userInfo.avatarUrl,infoRes.userInfo.nickName);},});
},

uniapp授权登录微信支付宝小程序获取code和基础信息相关推荐

  1. uniapp - [最新] 超详细实现支付宝小程序获取手机号、个人信息,支付宝弹框授权拿到用户手机号与昵称头像等信息完整流程(详细示例源码与注释,一键复制快速应用到项目中)

    效果图 网上的文章乱七八糟的都不行,新手小白很难看懂,本篇文章通俗易懂. 本博客实现了在uniapp 支付宝小程序项目中,从 0-1 描述了如何授权获取用户的手机号和头像昵称信息,一看就能懂 你可以跟 ...

  2. uniapp微信支付宝小程序获取用户信息

    我们也知道微信小程序前段时间更新了获取用户信息方法(区别),今天介绍一下,最新版uniapp获取用户信息(支付宝和微信小程序) 直接上代码: <view class='bottom flex'& ...

  3. 支付宝小程序获取用户授权并进行认证登录流程(前端)

    1.支付宝小程序获取用户授权并进行认证登录流程 1.1申请获取用户信息能力     登录功能做之前要先沟通好客户的需求,支付宝小程序获取用户授权调用相应的接口之前要先获得对应的能力.如果需要获取身份证 ...

  4. 基于uniapp在微信支付宝小程序中使用发券插件

    基于uniapp在微信支付宝小程序中使用发券插件 1.在小程序配置manifest.json 文件中加入如下配置: "mp-weixin" : {"plugins&quo ...

  5. 支付宝小程序获取用户信息及手机号

    支付宝小程序获取用户信息及手机号 众所周知,微信小程序是可以通过微信本身授权后再登录,平台可以拿到微信用的的账号相关信息,然后保存到数据库中,那么同理在支付宝小程序开发过程中,登录功能的设计也可以如此 ...

  6. 微信/支付宝小程序测试大全

    知识永远学不完,但多懂一点知识就会让生活更轻松一点! 又是元气满满的一天呐 微信/支付宝小程序测试大全 小程序测试环境 小程序一般会准备三个环境: 开发版访问测试环境: 体验版访问预发环境,连的是生产 ...

  7. 支付宝小程序获取 user_id(openid) ThinkPHP版

    支付宝小程序获取 user_id(openid) ThinkPHP版 近期支付宝小程序个人公测了,就想着玩一下,没想到就获取用户唯一标识都这么麻烦,微信的openid的话Get请求一下就完事了,支付宝 ...

  8. 微信支付宝小程序二维码聚合

    注:本文并没有列出所有的跳转小程序的方式,仅根据当前的业务需要,列出了可能适用于二维码聚合的几种跳转小程序的方式,需要从其他渠道跳转的请自行去小程序开发文档查看. 一.微信/支付宝小程序扫码打开方式 ...

  9. 微信(支付宝)小程序蓝牙4.0线上项目

    需求 : 微信(支付宝)小程序链接BLE4.0 ,发送指令到蓝牙硬件 过程 : 小程序分为安卓和ios两套系统,支持连接BLE 蓝牙 ,其中会遇到机型问题(其中安卓,华为荣耀机型,小米,问题很多,稍微 ...

最新文章

  1. CSP认证201403-3 命令行选项[C++题解]:模拟题、字符串处理、stringstream处理getline
  2. 调试 SAP Spartacus 服务器端渲染 SEO HTML Tag 生成逻辑的注意事项
  3. android关闭应用及获取运营商ISP,判断sim卡属于哪个运营商
  4. 临床医师看过来:5个理由告诉你,为什么JMP软件更适合你?
  5. java网络编程Socket客户端给服务器端通信
  6. Linux时间同步(Fri Nov 16 12:12:13 Local time zone must be set--see zic manual page 2018)解决办法
  7. nodejs php 模板,玩转nodejs
  8. GNSS/INS组合导航(八):INS/GPS组合导航
  9. NGFW module恢复密码操作方法
  10. android kodi 启动器,kodi安卓
  11. 如何把windows锁屏画面提取成JPG图像,并作为桌面壁纸
  12. 玩转Redis-HyperLogLog统计微博日活月活
  13. RJS Reference
  14. GOIP网关所有型号以及分辨方法 对接场景
  15. 图片损坏打不开如何修复?
  16. wmi 计算机应用程序,WMI 提供程序宿主程序 (Wmiprvse.exe) 已安装 NLB 功能的基于 Windows Server 2008 的计算机上可能会崩溃...
  17. “On Writing Well” 读书总结
  18. 电脑无法打开计算机的策略对象,Win10系统打开组策略提示无法打开此计算机上的组策略对象如何解决...
  19. tizi服务器系统,供应TiZi霆智硬件-ERP*服务器
  20. VMware16安装Win10系统

热门文章

  1. 触摸!天空龙 - 锻炼极速反应力
  2. 自动驾驶汽车如何识别红绿灯?三个角度告诉你答案丨曼孚科技
  3. IP核的使用之ROM(Vivado)
  4. Zabbix监控系统详解
  5. Wireshark抓包实例诊断TCP连接问题
  6. latex排版——博雅编辑室
  7. 简转繁等中文转换(Golang)
  8. 猿圈 题库_猿圈帮企业“测评”程序员
  9. java实现生成二维码
  10. matlab能否算高中数学题,Matlab软件在高中数学学习中的应用