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

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

这里面有几个问题:

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,但只能在支付宝的内置浏览器用。


/** *SDK调用说明 */ public function index() { //调用测试 import('AlipaySDK.Alipay'); $pay = new \Alipay(); /** * $trade_type 交易类型 app wap web */ $data = $pay->alipay('215360251411626', '0.01', '测试', '测试', 'web', 'http://www.test.com/callback'); //wap 结果string(880) "https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_WAP_PAY"}&charset=UTF-8&format=json&method=alipay.trade.wap.pay&notify_url=http://www.test.com/callback&sign=RKPyAKAPv28GKfhWIdsCCOualcg2DMCbhpny6yw/tTvJ3Och+yIfS1au7zbGBnm5sFoX2enfgfZekTqBCyzK0/Irw01zDSAOJM4mPYxs96OUkOglWS5Zuq64JwQBAzesFvzKBGgsH2ecL8EUCclDbBIIrAT/DWr6KenyvQvXOxVQNwn540NoS754oBU0w9vLdrGj0Jljvn8D6cbDgnHiE8qLOgpaXv1ROLwtol0yj2H7cM/G7A9RM5Y8jV1aVNYWND8M4XAK5Wr8zwoa9RocbqDpYfw66NXSvrsuFpHf7MpWtSybH5TnxOP5kwzr7pJRDi0XRAyD9u1geei9thUsqA==&sign_type=RSA2&timestamp=2018-09-04+11:50:49&version=1.0" //app 结果直接返客户端无需处理 alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"QUICK_MSECURITY_PAY"}&charset=UTF-8&format=json&method=alipay.trade.app.pay¬ify_url=http://www.test.com/callback&sign_type=RSA2×tamp=2018-09-04+11:54:53&version=1.0&sign=Ab6a0lDxaNcWLL7XcETM85DbBrJI8Sj6czPGKBNK17MZ85FBeStKL+nA/Z4tMORC7H39ooVCDz9ILpbRUfU0eaE7Oe2MOz+Jsj7oUEqwvbvt7eebyPgy2PmPlfAwcZypKla0nUJwHOF5F0cL+mvMGk/K7f2PYMtWL/dIfPOQGC1hBoKFiS+ZF7jIJ98R0AaITAjvQ1drAmJqXpMzUCa1XsTCuQXMXYKu8DNGb/hooJu0xUH/qUU+4fKD0TmBYANQHIrKIBNFl6J2Gw504Mlcfh929ce+YdzF8DXQjacsBSp7f08UJ/FfRvhVXqAfX8lAFETGjc7FXGgU6simNgv1UQ== //web 结果 https://openapi.alipay.com/gateway.do?alipay_sdk=alipay-sdk-php-20180705&app_id=2018072660781410&biz;_content={"body":"测试","subject":"测试","out_trade_no":"215360251411626","timeout_express":"90m","total_amount":"0.01","product_code":"FAST_INSTANT_TRADE_PAY"}&charset=UTF-8&format=json&method=alipay.trade.page.pay¬ify_url=http://www.test.com/callback&sign=l9+A5ZByhwLjQwzRes9+ymKkFVu7uMND4j6cIWmXIXHjrBnGaHkcr+hVkwocaU3d/hB2hdPnxDruhyYFgchnsIA/XWumosG9uEnKyD/T52+VZ8FxLh5wpwH0ucvKzbMjgIWk9dPVjUAU5Zz7QjqKsJ+AsItFpttd0tEVZD4je2PFp5mizeCWT0id0H+y44IGexN705rNe6TGpfJDG0RSDsbD/ZoCzd8FRzC9cv5uwf00J1E9Yc0bUH/l37WFDBTv/LZnqdfeWpaiu8ro7CJ3R+z/xGQTHToo2zLtEc4Cwop096X8WqwSdGbyI9FCemcFzigRB+6yzD9nS4PsWEG3Ug==&sign_type=RSA2×tamp=2018-09-04+11:56:06&version=1.0 echo $data; exit; } /** * 调地址 */ public function callback() { import('AlipaySDK.Alipay'); $pay = new \Alipay(); $data = $_POST; $verify_result = $pay->check($data); if ($verify_result) { // 验证成功 $out_trade_no = $data['out_trade_no']; // 支付宝交易号 $trade_no = $data['trade_no']; // 交易状态 $trade_status = $data['trade_status']; if ($trade_status == 'TRADE_FINISHED') { //成功之后的操作 } else if ($trade_status == 'TRADE_SUCCESS') { //成功之后的操作 } echo "success"; // 请不要修改或删除 } else { // 验证失败 echo "fail"; } } 声明:是文档根据Alipay文档二次整合,全开源。如果觉得还可以请点击收藏
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值