公司开发的项目用uni-app开发,功能要求使用支付宝授权登录,由于uni-ap官网并没有实现支付宝的第三方登陆(集成了QQ,微博,微信的授权登录)。没办法,只能满网搜教程。

首先,由于想要实现支付宝登陆必须要在支付宝内打开我们拼接的连接类似这样:

https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=ENCODED_URL&state=init

实现步骤:

1.在点击事件上使用plus.runtime模块调用支付宝打开授权地址(授权地址是后端拼接也可以前端写死,个人感觉后端获取相对比较好)


//相关示例代码:(该代码会打开支付宝授权,授权之后会在支付宝中打开你所设置的【回调地址】网页)//***********************
//***url授权地址由后端拼接也可以前端写死***
//***以下是一个拼接示例,仅需修改app_id的值和redirect_uri的值***
//***app_id是商户的APPID,redirect_uri是页面跳回地址(授权成功之后会在支付宝中打开这个地址)***
//***********************
let urls='https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=2021001183611007&scope=auth_userinfo&redirect_uri=https://shandianlaoshi.com/api/user/zfb_url';
urls=encodeURIComponent(urls);//将地址编码成浏览器访问的格式
// 判断平台
if (plus.os.name == 'Android') {plus.runtime.openURL('alipays://platformapi/startapp?appId=20000067&url=' + urls,res => {//这里写打开URL地址失败后的处理console.log(res);uni.showModal({content: '本机未检测到对应客户端,是否打开浏览器访问页面?',success: function (res) {if (res.confirm) {//plus.runtime.openURL();}}});},'com.eg.android.AlipayGphone');
} else if (plus.os.name == 'iOS') {plus.runtime.openURL('alipay://platformapi/startapp?appId=20000067&url=' + urls,res => {console.log(res);uni.showModal({content: '本机未检测到对应客户端,是否打开浏览器访问页面?',success: function (res) {if (res.confirm) {//plus.runtime.openURL(url);}}});},'com.eg.android.AlipayGphone');
}

注意:其中20000067这个appId是固定值,不需要修改成你的APPID。

如此调用即可正常使用支付宝登陆了。

2.给你的APP设置一个urlscheme

这是Android平台设置UrlSchemes,为了方便实现被第三方应用调用
HBuilder/HBuilderX自带真机运行基座的UrlSchemes为"hbuilder://",方便开发者调测。

设置方法连接:https://uniapp.dcloud.io/tutorial/app-android-schemes.html

3.提交打包(urlscheme)设置之后需重新打包(可以重新打基座也可以直接云App打包,建议打基座【因为还需要写从支付宝回来之后的事件】)

4.编写(redirect_uri)页面,编写完成后拿给后端放在服务器上就基本成功了

如果出现没有跳转到你的APP说明你的urlscheme没填写对或者是你的APP没有打包

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>XXXX登录</title><style>body {display: flex;justify-content: center;align-items: center;text-align: center;height: 90vh;font-size: .9375rem;}content{display: flex;flex-direction: column;justify-content: center ;align-items: center;}.logo_img {width: 6.875rem;height: 6.875rem;margin-bottom: .625rem;}#box {width: 80%;height: 2rem;text-align: center;line-height: 2rem;border-radius: 20px;background-color: rgb(23, 120, 194);color: white;margin: .9375rem auto;}.desc {font-size: .3125rem;color: gray;}</style></head><body><content><img src="./logo.png" class="logo_img"><div id="box" onclick="func()">返回XXXX</div><div class="desc">您已授权登录,请点击返回XXXX</div></content>
<script>
var code ;
function getQueryVariable(variable) {  var query = window.location.search.substring(1);  var vars = query.split("&");  for (var i = 0; i < vars.length; i++) {  var pair = vars[i].split("=");  if (pair[0] == variable) {  return pair[1];  }  }  return (false);
}  function func(){code = getQueryVariable("auth_code");
// 判断是那种设备let u = navigator.userAgent;console.log(u);var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Linux') > -1;   // Android系统或者uc浏览器var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);   // iOS系统// 如果为Android系统if (isAndroid) {window.location.href = "hbuilder://?auth_code="+code; // 注意*** 这里需要修改为刚刚设置的urlscheme,auth_code需要后端拼接。auth_code只有后端才能拿到window.setTimeout(function () {window.location.href = "http://www.baidu.com";   // 3s后如果不能跳转到 App,则跳转到 App 的下载地址,一般是应用宝的对应的下载地址}, 2000);return;}// ios设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载appios();if (isiOS) {let startIndex = u.indexOf('iPhone OS') + 9;let endIndex = u.indexOf('like Mac OS') - 1;let num = +u.slice(startIndex, endIndex).split('_')[0];  // 计算版本号的前面数值if (num < 9) {window.location.href = "hbuilder://?auth_code="+code;   //  注意*** 这里需要修改为刚刚设置的urlscheme,auth_code需要后端拼接。auth_code只有后端才能拿到} else {window.location.href = " ";   // universal link 链接}window.setTimeout(function () {window.location.href = " ";   // 3s后如果不能跳转到 App,则跳转到 AppStore 的下载地址}, 3000);return;};
}</script></body></html>

千万注意:alipayUrl中的回调地址(redirect_uri)必须是可以从公网直接访问的,格式是http://或者https:// 开头的,请不要填写内网地址(如:http://localhost:8080/)和相对地址(/pages/aliPay)等等,否则跳转会提示404或无法访问。

5.在页面中监听支付宝App传过来的auth_code,再通过auth_code获取到userId就完成了支付宝的授权啦(可以在redirect_uri页面中直接获取userId再跳转回APP也可以返回App后通过auth_code请求后端获取userId【PS:后者方案更灵活】)

onShow: function() {let args = plus.runtime.arguments;//console.log(args); //这里可以看到从后端拿过来的urlschemeif (args) {plus.runtime.arguments=null;//进入之后就把urlscheme清空要不然下一次oushow时还会执行// 处理args参数,如直达到某新页面等//通过code请求获取user_idvar authCode = args.split("=")[1];if(authCode!=undefined&&authCode!=""&&authCode!=null){this.$busapi.restAuth.queryAlipayInfo("authCode="+authCode).then(res => {if (res.code == '0000') {if(res.data.userId){this.whetherBinding(res.data.userId,"alipay");}}else{this.$message({ message: res.msg, type: 'error' });}}).catch(res => {this.$message({ message: res.errmsg, type: 'error' });});}}},

由此,该功能就差不多完成了,最后一定要感谢两位大佬的文章指点,链接如下:
https://blog.csdn.net/z1783883121/article/details/116268402
https://ask.dcloud.net.cn/article/36971

【uniappAPP实现支付宝授权登录】相关推荐

  1. 第三方接入支付宝授权登录(支付宝新建应用没有公钥和私钥)问题

    由于最近有个需求,需要做第三方的接入支付宝授权登录功能,特此记录下.          百度上很多的接入代码,在此的代码其实和他们差不多,差别在于支付宝官方吧原来的秘钥方式换了,有些同学可能找不到或者 ...

  2. uniapp-App ios支付宝授权小记

    uniapp-App ios支付宝授权小记 前言:我们在上一次介绍了安卓的uniapp支付宝授权,里面也提了一下ios 授权后用urlscheme跳回app,但有很多的ios版本都不会跳回app(ps ...

  3. H5网页使用支付宝授权登录获取用户信息详解

    用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...

  4. 支付宝授权登录免费源码奉献

    废话不多说,直接上代码 首先,在授权登录前要获取 待签名授权信息,所需参数 除了app_id,pid,支付宝公钥和私钥,其他的都是定值,直接照搬: #支付宝网关(固定)   url: https:// ...

  5. 支付宝Html授权,网页版的支付宝授权登录(vue+java)

    api接口文档:https://docs.open.alipay.com/289/105656 后台管理系统原本是用账号密码登录的,不过需求要改成支付宝授权, 前端仅仅需要改登录页,以及添加一个授权返 ...

  6. Android Studio 开发app 实现支付宝授权登录,获取支付宝账号头像昵称等信息

    效果展示: 点击支付宝授权Demo                 接下来我们开始动手写项目 首先需要在支付宝开放平台,注册账号,创建应用,配置应用,需要审核时间大约为1-2天. 网页/移动应用文档指 ...

  7. java支付宝网页授权登录界面_网页版的支付宝授权登录(vue+java)

    api接口文档:https://docs.open.alipay.com/289/105656 后台管理系统原本是用账号密码登录的,不过需求要改成支付宝授权, 前端仅仅需要改登录页,以及添加一个授权返 ...

  8. 支付宝H5授权登录PHP版本

    第一步需要将支付宝SDK下载放在vendor,并且重命名为"Alipay" 下一步直接上代码: /*** 获取协议* @return type*/public function g ...

  9. 支付宝app登录授权的infoStr授权登录流程

    官网: 服务端sdk:https://docs.open.alipay.com/54/103419/ 客户端如何使用登录:https://docs.open.alipay.com/218/105329 ...

  10. 小程序登录 之 支付宝授权

    众所周知啊,微信小程序是可以通过微信本身授权后再登录,平台可以拿到微信用的的账号相关信息,然后保存到数据库中,那么同理在支付宝小程序开发过程中,登录功能的设计也可以如此 上图是官方提供的时序图,具体看 ...

最新文章

  1. SAP RETAIL WA03 基于分配表创建PO报错 - No work list could be selected –
  2. 紧急通知!最新版CleanMyMac X月底倒计时清仓冲量!
  3. 为什么jsp的form表单不能跳转_UI设计干货分享:设计语言 - 表单(登录/注册)...
  4. 倍周期分岔 matlab,由倍周期分岔走向混沌-Read.DOC
  5. 图像坐标球面投影_比较常用的坐标几种投影
  6. 交互设计中Web UI与手机UI的区别
  7. MyEclipse和Eclipse中修改编码
  8. Js参数RSA加密传输,jsencrypt.js的使用
  9. 竖着的seekbar_自定义竖着的SeekBar | 学步园
  10. 如何用计算机算回归方程,简单线性回归方程与在线计算器_三贝计算网_23bei.com...
  11. mysql 1436,Mysql Error Code : 1436 Thread stack overrun
  12. 公有云时代企业需要什么样的云平台
  13. r语言是高级编程语言_什么是R编程?
  14. 危险在线旅游,为何依然有人冒死买卖?
  15. uniapp发布为H5并部署运行
  16. unityplayerpre存档_c# unity PlayerPrefs 游戏存档,直白点就是讲游戏数据本地保存下来...
  17. Deep Learning for 3D Point Clouds: A Survey - 3D点云的深度学习:一项调查 (IEEE TPAMI 2020)
  18. 自动白平衡技术(WhiteBalance)(转自Harri的blog)
  19. 在html 中 缩进怎么写,html怎么缩进
  20. axios进行二次封装

热门文章

  1. 第二工业大学计算机应用大专录取分,上海第二工业大学2017年分省分专业录取分数线...
  2. 爬取大麦网演出信息保存为CSV文件并制作词云
  3. vue使用甘特图(实现树形结构/一条数据显示双时间轴)
  4. Vue整合甘特图(横道图、Gantt)实例
  5. mysql大于等于、小于等于的写法
  6. 游戏策划学习:笔试整理
  7. 服务器的部署与Web项目的发布
  8. 经过spring cloud gateway 网关访问nacos上的服务
  9. Socket聊天室(基于C语言)
  10. android进入recovery模式,Android关机重启至recovery安卓进入Recovery模式模式