APP支付宝授权获取code uniapp

1.点击使用plus.runtime跳转打开支付宝


//打开支付宝授权,在支付宝APP中授权后会在支付宝中跳转到你填写的h5地址

//urls是授权地址可以后端拼接也可以前端写死
//以下是一个拼接示例,需修改app_id的值和redirect_uri的值即可
//app_id是商户的APPID,redirect_uri是你在支付宝中授权后的回调地址,在回调页面中你可以在路由中获取auth_code

let urls='https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=******&scope=auth_userinfo&redirect_uri=https://****.com/html';
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'
  );
}

2.给APP设置一个UrlScheme,用作从支付宝返回APP使用

HBuilder/HBuilderX自带真机运行基座的UrlSchemes为"hbuilder://",设置后从新打包才会生效

PS:ios端ios9以下需要把设置的UrlSchemes添加到白名单才可使用,否则会报错(plus.runtime.openURL 报错code:-3,msg:此功能不支持),具体添加如下:

5+App项目
在manifest.json文件的"plus"->"distribute"->"apple"下添加urlschemewhitelist节点数据如下:

"plus": {    
"distribute": {    
"apple": {    
    "urlschemewhitelist": [    
            "BaiduSSO",  
            "qqmusic"  
    ],    
    //...    
},    
//...    
},    
//...    
}
uni-app项目 
把上面的urlschemewhitelist节点数据放到manifest.json的"app-plus"->"distribute"->"ios"节点下 注意:保存后提交App云端打包后才能生效 或者自定义基座运行也可,列表最多可添加50个

3.编写h5回调页面,编写完成后放置到服务器上




<!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>汽震音乐</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: 4.6rem;
            height: 4.6rem;
            margin-bottom: 1rem;
        }
        .title{
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 1.2rem;
            color: #000000;
            font-style: normal;
            margin-bottom: 0.4rem;
        }

        #box {
            width: 16rem;
            height: 2.4rem;
            text-align: center;
            line-height: 2.4rem;
            border-radius: 1.2rem;
            background: linear-gradient( 225deg, #F1EA3D 0%, #8FEE6B 54%, #72D5E4 100%);
            border-radius: 0.7rem;
            font-family: PingFangSC, PingFang SC;
            font-weight: 600;
            font-size: 1.06rem;
            color: #000000;
            text-align: center;
            font-style: normal;
            position: fixed;
            bottom: 12.2rem;
            left: calc(50% - 8rem);
        }

        .desc {
            font-family: PingFangSC, PingFang SC;
            font-weight: 400;
            font-size: 0.8rem;
            color: #9C9C9C;
            font-style: normal;
        }
    </style>
</head>

<body>
    <content>
        <img src="./logo.png" class="logo_img">
        <div class="title">您已授权</div>
        <div class="desc">请点击返回汽震音乐</div>
        <div id="box" onclick="func()">返回汽震音乐</div>
    </content>
</body>

<script>
    
// 获取auth_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);  
}
async function copyURL(){
    try {
        await navigator.clipboard.writeText(window.location.href);
        alert("已复制链接请到浏览器打开");
        // 这里可以添加用户通知或其他UI反馈
    } catch (err) {
        alert("请点击右上角复制链接,到浏览器打开");
    }
}
function func() {
    let code = getQueryVariable("auth_code");
    // 判断是那种设备
    let u = navigator.userAgent;
    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 = "***music://auth_code=" + code; // 注意*** 这里需要修改为刚刚设置的urlscheme,auth_code需要后端拼接。auth_code只有后端才能拿到
		window.setTimeout(function () {
		    copyURL();
		}, 2000);
        window.setTimeout(function () {
            window.location.href = "https://rehuocm.com/download/";   // 3s后如果不能跳转到 App,则跳转到 App 的下载地址,一般是应用宝的对应的下载地址
        }, 4000);
        return;
    }
    
    // ios设备:原理:判断是否认识这个协议,认识则直接跳转,不认识就在这里下载appios();
    if (isiOS) {
        window.location.href = "***music://auth_code=" + code;
        
        window.setTimeout(function () {
            copyURL();
        }, 2000);
        window.setTimeout(function () {
            window.location.href = "https://apps.apple.com/cn/app/%E6%B1%BD%E9%9C%87%E9%9F%B3%E4%B9%90/id6575360289";   // 3s后如果不能跳转到 App,则跳转到 AppStore 的下载地址
        }, 4000);
        return;
    };
}



</script>

</html>


PS:支付宝里在回调页面中点击返回自己的app中非常的不灵敏,我现在还没有好的解决方法,有好的解决方法欢迎评论告诉我

4.再APP中接收支付宝中回调页面返回的code

onShow((e) => {
        setTimeout(function(){  
            var args:any = plus.runtime.arguments; //这里可以看到从后端拿过来的urlscheme 或 通用链接
            plus.runtime.arguments = ''; //进入之后就把urlscheme清空要不然下一次oushow时还会执行
            args = args.split('auth_code');
            console.log(args)
            args = args[1].slice(1);
            console.log(args)
            if(args){
                // 处理args参数,如直达到某新页面等
                console.log(args,'code');
            }
        },0);
    })

PS:可能会出现跳转回APP成功了,但是拿不到带回来的参数,这时我们就要在pages.json文件下找到condition这个节点删除就可以了,它回影响ios的启动

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于uniapp支付宝授权app,可以按照以下步骤进行操作: 1. 首先,创建一个无后缀名的文件,命名为apple-app-site-association。你可以使用vs code或其他编程工具打开该文件,并按照如下格式输入代码: ``` { "applinks": { "apps": [], "details": [ { "appID": "你的AppID", "paths": [ "指定授权路径" ] } ] } } ``` 在代码中,你需要将"你的AppID"替换为你的App的唯一标识符,将"指定授权路径"替换为你希望授权的路径。 2. 接下来,你需要将apple-app-site-association文件部署到你的服务器上。确保文件可以通过GET请求访问到。 3. 在你的uniapp项目中,引入支付宝授权相关的插件或依赖库。你可以使用支付宝开放平台提供的SDK或者uni-app社区提供的插件。 4. 根据插件或依赖库的文档,配置相关参数。通常,你需要提供你的应用的AppID和授权路径。 5. 在你的uniapp项目中,设置一个按钮或链接,用于触发支付宝授权登录的操作。 6. 当用户点击该按钮或链接时,你的应用将调用支付宝授权的接口,并传递必要的参数。 7. 用户将在支付宝客户端中进行授权登录操作。 8. 支付宝客户端将验证授权请求,并将授权结果返回给你的应用。 9. 在你的应用中,根据支付宝返回的结果,进行相应的处理操作。你可以获取用户的授权信息,例如用户的支付宝账号、头像等。 需要注意的是,上述步骤中的具体实现方式可能会因为你所选择的插件或依赖库而有所不同。请根据实际情况,参考相关文档进行配置和开发。 参考资料: uniapp-App支付宝授权:https://blog.csdn.net/z1783883121/article/details/116268402 前言:我们在上一次介绍了安卓的uniapp支付宝授权,里面也提了一下ios 授权后用urlscheme跳回app,但有很多的ios版本都不会跳回app(ps:这是因为自ios9以后就不再推荐使用scheme的方式来打开app了而是推荐使用Universal Links的方式来打开app) 工作原理 App第一次启动时,或App更新后第一次启动时,会通过Associated Domains里取的域名,通过GET请求访问apple-app-site-association的文件(这里不需要我们去请求,ios会自动去请求)访问到apple-app-site-association文件,统一注册到系统(ios会自动注册)任意Webview(包括第三方应用内的Webview)发起跳转(必须要跨域跳转),系统会通过apple-app-site-association注册的通用链接,会找到AppID如果下载安装过该App则会打开App 触发 Universal Link Delegate事件,如果没安装,则继续跳转url 实现步骤: 一、所需文件配置 创建apple-app-site-association文件: 创建一个无后缀名的文件,名称为apple-app-site-association如下图 用vs code或者其它编程工具打开该文件按以下格式模板输入代码: { "applinks": { "apps": [], "details": [ { "appID": "9JA89QQLNQ.com.apple.wwdc", "paths": [ "/videos/wwdc/2015/*" ] } ] } } 支付宝授权登陆demo支付宝授权登陆demo支付宝授权登陆demo支付宝授权登陆demo支付宝授权登陆demo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值