uniapp 解决安卓App使用uni.requestPayment实现沙箱环境支付宝支付报错

背景 :uniapp与Java实现的安卓端app支付宝支付,本想先在沙箱测试环境测支付,但一直提示"商家订单参数异常,请重新发起付款。",接着报错信息就是:{

"errMsg": "requestPayment:fail [payment支付宝:62009]未知错误",

"errCode": -100,

"code": -100

}

本以为是uni.requestPayment传参问题,但只有两个参数,下面是官网示例代码:

uni.requestPayment(OBJECT) | uni-app官网

javascript 复制代码
uni.requestPayment({
    provider: 'alipay',
    orderInfo: 'orderInfo', //微信、支付宝订单数据 【注意微信的订单信息,键值应该全部是小写,不能采用驼峰命名】
    success: function (res) {
        console.log('success:' + JSON.stringify(res));
    },
    fail: function (err) {
        console.log('fail:' + JSON.stringify(err));
    }
});

其中,orderInfo是后端返回的字符串,本来一直以为是后端传来的参数不对,便使用客户端调试工具测试。

后端返回的值(支付宝客户端处理加密过后的字符串):

调试方法:(使用安卓手机)

1. 下载支付宝沙箱版

这个可以在支付宝开发者中心沙箱环境里面扫二维码进行下载

2. 下载客户端调试工具

客户端调试工具下载

具体客户端使用请参照: 蚂蚁技术支持客户端调试工具使用教程

通过上面的方法测试后,使用那段长参数值是可以正常支付的。

可问题是,使用uni.requestPayment调用就是不行,继续翻支付宝官网文档,发现一重要注意事项。小程序文档 - 支付宝文档中心

**解决:**沙箱测试时需要添加一段代码:EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);

知道问题在哪了,但这段代码怎么在uniapp中使用呢?

下面附上我的部分代码,作为参考:

javascript 复制代码
// #ifdef APP-PLUS
// 获取后端返回的支付宝客户端处理加密过后的字符串
await API_Trade.initiatePay(paymentMethod, paymentClient, params).then(
	(signXml) => {
		//如果支付异常
		if (!signXml.data.success) {
			uni.showToast({
				title: signXml.data.message,
				duration: 2000
			});
			return;
		}
		let payForm = signXml.data.result;

		// 由于测试阶段采用沙箱支付,下面两行代码需要配置
		var EnvUtils = plus.android.importClass('com.alipay.sdk.app.EnvUtils');
		EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
		
		uni.requestPayment({
			provider: 'alipay',
			orderInfo: payForm || '',
			success: (e) => {
				console.log('成功的返回值', e);
				uni.showToast({
					icon: "none",
					title: "支付成功!",
				});
				this.callback(paymentMethod)
			},
			fail: (e) => {
				console.log('失败的返回值', e);
				this.exception = e;
				uni.showModal({
					content: "支付失败,如果您已支付,请勿反复支付",
					showCancel: false,
				});
			},
		});
	}
);
// #endif

ok,沙箱环境下支付宝支付莫得问题了。

注意的是:关于EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);的代码段在使用生产环境支付时就需要注释了。

参考地址:学习记录:关于Uniapp与Java实现支付宝沙箱APP内支付_uniapp支付宝沙箱-CSDN博客

相关推荐
糕冷小美n22 分钟前
elementuivue2表格不覆盖整个表格添加固定属性
前端·javascript·elementui
小哥不太逍遥37 分钟前
Technical Report 2024
java·服务器·前端
程序员陆业聪41 分钟前
2025 年客户端技术盘点与 2026 年技术展望
android
沐墨染41 分钟前
黑词分析与可疑对话挖掘组件的设计与实现
前端·elementui·数据挖掘·数据分析·vue·visual studio code
anOnion1 小时前
构建无障碍组件之Disclosure Pattern
前端·html·交互设计
threerocks1 小时前
前端将死,Agent 永生
前端·人工智能·ai编程
问道飞鱼2 小时前
【前端知识】Vite用法从入门到实战
前端·vite·项目构建
爱上妖精的尾巴2 小时前
8-10 WPS JSA 正则表达式:贪婪匹配
服务器·前端·javascript·正则表达式·wps·jsa
xhBruce2 小时前
Android USB 存储 冷启动(开机自动插着 U 盘)场景
android·usb·vold
Zhencode2 小时前
Vue3响应式原理之ref篇
vue.js