浏览器调用支付宝授权用户信息

当想获取用户的支付宝数据时,一定要授权支付获取数据,但支付宝授权用户默认只针对支付宝内链接,所以我的思路是:调起支付宝后,支付宝自动打开内连接授权地址,授权成功后自动返回上一页。

这里面有几个问题:

1、微信内置浏览器不能打开支付宝提供的任何链接,所以已经被pass掉了,我做的是判断一下是否是微信浏览器,如果是微信浏览器的话,就提示用户并让用户把打开支付宝并自动内联授权地址的地址复制到手机浏览器打开。

2、部分浏览器因为权限的问题,也打不开调用支付宝的地址,我们把这种默认为非权限浏览器

3、浏览器无法判断用户是否安装支付,如果不安装支付宝也得提示用户安装支付宝,所以我们除了微信浏览器点授权支付宝的时候默认都是弹出未安装支付宝的提示,如果安装了支付宝的话就会自动跳转到支付宝并跳转到授权页面。

4、用户授权成功支付宝后无法自动跳回浏览器,这个我们没有解决,只是在授权成功的页面时提示了一下用户,让用户自行返回浏览器操作。

5、用户自行返回浏览器后提示未安装支付的提示还会存在,我用的H5的方法,检测到用户从其他页面返回的时候关闭提示框

document.addEventListener("visibilitychange", function() {
       //关闭提示框
});

6、浏览器打开支付宝APP并跳转到指定页面的方法:

let locationHref = `alipays://platformapi/startapp?appId=20000067&url=
https%3a%2f%2fopenauth.alipay.com%2foauth2%2fpublicAppAuthorize.htm%3f
app_id%3d201611%26scope%3dauth_user%26redirect_uri%3d${redirectUrl}`

解释一下这几块地方:

alipays://platformapi/startapp//打开支付宝
appId=20000067 //这个我也不确定是什么,因为支付宝的文档上没写,但测得如果改成其他的就打不开支付宝浏览器,所以我认为这个应该是执行的操作

url= //这个地方就是打开授权的页面,支付宝有个指定的授权API,里面有个redirect_uri是支付宝校验成功之后的回调地址,这个地址是我们的,
在这个地址后面会带一个code,code是用户的唯一标识,传给后台,让后台调用支付宝API就可以了。
至于url授权页面的开头https://openauth.alipay.com/oauth2/publicAppAuthorize.htm是支付宝提供的
这里还有一个注意的地方,url=后面的地址必须decode,而redirect_uri必须decode两遍,为什么是两遍,
是因为作为回调地址decode一遍,作为url里面的参数还要 decode一遍


7、注意,如果提示redirect_url没有认证还是没有权限的话,需要在支付宝开放平台的里面加上安全域名,不然支付宝不认

8、支付宝开放文档:https://docs.open.alipay.com/289/105656

9、如果在授权页面里面需要调用支付宝的一些方法,可以使用http://myjsapi.alipay.com/jsapi/,这个是H5JSAPI,但只能在支付宝的内置浏览器用。


### 支付宝沙箱环境调获取用户信息失败的解决方案 当在支付宝沙箱环境中遇到调获取用户信息失败的情况时,可以从以下几个方面进行排查和解决: #### 1. **确认沙箱环境配置** 确保开发者账号已正确设置并启用沙箱模式。检查应用授权范围是否包含所需的权限(如`auth_user`),以及是否已在开放平台中绑定测试账户[^1]。 #### 2. **验证调URL的有效性** 通过浏览器或其他HTTP客户端访问调接口地址,确保其能够正常响应。如果存在防火墙或IP白名单限制,需将支付宝服务器的IP加入允许列表[^2]。 #### 3. **检查日志记录** 分析支付过程中的日志文件,重点观察是否有向支付宝发送请求的成功记录,以及接收端是否存在异常中断情况。对于返码为`http 0`的情形,可利用自助诊断工具进一步查明原因[^1]。 ```bash curl -X GET 'https://your-callback-url' ``` 此命令用于模拟外部服务对您调API的调用行为,便于检测网络连通性和服务器处理能力。 #### 4. **审查签名机制** 由于安全考量,每次交互都需要校验数据包的真实性。务必按照官方文档说明实现正确的RSA加密解密逻辑,并保持公私钥配对一致。 #### 5. **运用官方调试资源** 借助支付宝提供的在线支持页面链接里的专项指导材料来辅助解决问题。比如,“异步通知零状态”专题就列举了几种常见失误及其修正办法[^1]。 --- ### 示例代码片段:验证签名示例 以下是基于PHP语言的一个简单例子展示如何检验来自支付宝的消息真实性: ```php <?php function verifyAlipaySign($params, $alipayPublicKey){ // 移除sign本身参数 unset($params['sign']); ksort($params); $stringToBeSigned = ""; foreach ($params as $k => $v){ if (false === empty($v)){ $stringToBeSigned .= "$k=$v&"; } } $stringToBeSigned = rtrim($stringToBeSigned,'&'); openssl_public_decrypt(base64_decode($_POST["sign"]), $decrypted, file_get_contents($alipayPublicKey)); return hash_equals(hash_hmac('sha256', $stringToBeSigned, $decrypted), $_POST["sign"]); } ?> ``` 以上脚本实现了基本的功能需求,实际部署前还需考虑更多边界条件以增强健壮性。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值