uniapp支付宝小程序对接支付的流程|问题|方法
1、支付宝小程序支付使用JSAPI支付进行接入。具体文档查看https://opensupport.alipay.com/support/FAQ/1234a0dd-9e76-4e8f-8755-50371f339286?ant_source=opendoc_recommend 2、进行JSAPI支付前,先在服务器创建一个支付订单,具体文档查看https://opendocs.alipay.com/mini/05x9kv3、创建支付订单,需要先获取访问小程序用
1、支付宝小程序支付使用JSAPI支付进行接入。具体文档查看
2、进行JSAPI支付前,先在服务器创建一个支付订单,具体文档查看
https://opendocs.alipay.com/mini/05x9kv
3、创建支付订单,需要先获取访问小程序用户的openid,而且需要静默的方式(也就是不弹窗)获取到用户的openid
4、要获取openid,先获取auth_code,用静默的方式获取,uniapp代码如下
template部分
<button open-type="getAuthorize" scope="userInfo" @getAuthorize="onGetAuthorize" class="dengbox">去登录</button>
js部分
onGetAuthorize() { let that = this; my.getAuthCode({ //scopes: 'auth_user', scopes: 'auth_base',//静默授权 success: (res) => { // 获取 到 authCode 对接后端接口,获取到用户的基本信息 console.log('auth_code',res.authCode) uni.request({ url:'https://xxx.xxx.com/get_openid.php?authCode=' + res.authCode, success: (res) => { console.log('openid',res.data); //this.text = 'request success'; } }) }, }); },
可以把button隐藏掉,在onload里面直接调用 onGetAuthorize方法
5、获取到auth_code之后,把auth_code传给get_openid.php文件来获取openid,再将openid返回给小程序,get_openid.php文件的相关代码查看https://opensupport.alipay.com/support/FAQ/16f7c7e1-e09e-44ad-8d9c-42a6e2072241
6、获取到openid之后,就可以在后台创建小程序支付的订单了,下面截图就是小程序支付订单创建成功后返回的信息,需要用到trade_no返回给小程序来拉起支付
7、通过trade_no来拉起支付的代码:
// #ifdef MP-ALIPAY uni.requestPayment({ provider: 'alipay', orderInfo: '2024062822001455151438685453', // 订单数据 success: function (res) { console.log(res) if (res.resultCode == 6001) { uni.showToast({ title: '支付宝支付取消', icon: 'none', duration: 1500 }); } else { uni.showToast({ title: '支付宝支付成功', icon: 'success', duration: 1500 }); } }, fail: function (err) { // 支付失败的回调中 用户未付款 uni.showToast({ title: '支付宝支付取消2', duration: 1500, icon: 'none' }); } }); // #endif
8、支付都已经拉起了,付款成功就没问题了,整个支付也就打通了,我为了解决这个问题,参考了大量的资料,才整理出来这个对接流程,下面是一些参考信息
php创建支付宝小程序支付订单参考文档:
https://blog.csdn.net/wei042/article/details/134116095
php版本的支付宝sdk,v2版本实现小程序的支付功能,里面有很多关键的文件,下载地址:
https://github.com/alipay/alipay-sdk-php-all
获取支付宝小程序auth_code和openid的参考文章
https://blog.csdn.net/AAAXiaoApple/article/details/131251444
如果需要完整代码,可有偿分享,感谢
注意问题:
实际开发过程中,还会遇到一些细节问题,解决起来比较费时间
1、获取openid和trade_no的时候,返回的数据都会有一个空行,导致获取的数据格式有错误,解决方法就是在php文件的开头和结尾分别加上
ob_start(); // 开启输出缓冲
ob_end_clean(); // 清除输出缓冲区内容并关闭它
2、返回trade_no给前端,因为trade_no是一串纯数字,会被前端转换成科学计数,比如(2.87987987e+27)之类的,所以返回的trade_no在前面加几个字母,比如(ddh345345345345453),就不会被前端转换成科学计数
3、提交支付宝小程序审核时,必须要对接一个订阅消息,这点确实挺烦人的。
总结流程:支付宝商家平台-运营中心-消息-选一个订阅消息的模版-小程序前台用户点击订阅按钮进行订阅成功-后台发送订阅消息给用户
【经验分享】支付宝小程序订阅消息功能实操(前端篇)
https://open.alipay.com/portal/forum/post/88601030
my.requestSubscribeMessage(唤起支付宝小程序客户端消息订阅界面)参考页面:https://opendocs.alipay.com/mini/api/requestSubscribeMessage
alipay.open.app.mini.templatemessage.send
(支付宝小程序服务端发送模板消息),参考页面:https://opendocs.alipay.com/mini/6430ce5a_alipay.open.app.mini.templatemessage.send?pathHash=18c2bf3e&ref=api&scene=common
4、uniapp中在支付宝开发者工具里面使用my.requestSubscribeMessage拉起订阅窗口时,报错:"error": 4,"errorCode": 4,报错的原因很简单,订阅消息不能在开发者工具里面调试,只能在真机里面调试