当前位置:首页>>问题

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、创建支付订单,需要先获取访问小程序用

admin

1、支付宝小程序支付使用JSAPI支付进行接入。具体文档查看

https://opensupport.alipay.com/support/FAQ/1234a0dd-9e76-4e8f-8755-50371f339286?ant_source=opendoc_recommend

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返回给小程序来拉起支付

image.png

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

https://zhuanlan.zhihu.com/p/671083354?utm_campaign=shareopn&utm_medium=social&utm_psn=1790154575363317760&utm_source=wechat_session

如果需要完整代码,可有偿分享,感谢

注意问题:

实际开发过程中,还会遇到一些细节问题,解决起来比较费时间

1、获取openid和trade_no的时候,返回的数据都会有一个空行,导致获取的数据格式有错误,解决方法就是在php文件的开头和结尾分别加上 

ob_start(); // 开启输出缓冲

ob_end_clean(); // 清除输出缓冲区内容并关闭它

2、返回trade_no给前端,因为trade_no是一串纯数字,会被前端转换成科学计数,比如(2.87987987e+27)之类的,所以返回的trade_no在前面加几个字母,比如(ddh345345345345453),就不会被前端转换成科学计数

3、提交支付宝小程序审核时,必须要对接一个订阅消息,这点确实挺烦人的。

1719980961109456.jpg

222.jpg

总结流程:支付宝商家平台-运营中心-消息-选一个订阅消息的模版-小程序前台用户点击订阅按钮进行订阅成功-后台发送订阅消息给用户

【经验分享】支付宝小程序订阅消息功能实操(前端篇)

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,报错的原因很简单,订阅消息不能在开发者工具里面调试,只能在真机里面调试









返回顶部