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博客

相关推荐
Mintopia几秒前
🤖 AI 决策 + 意图OS:未来软件形态的灵魂共舞
前端·人工智能·react native
攀登的牵牛花1 分钟前
前端向架构突围系列 - 框架设计(四):依赖倒置原则(DIP)
前端·架构
程序员爱钓鱼9 分钟前
Node.js 编程实战:测试与调试 —— 日志与监控方案
前端·后端·node.js
计算机学姐14 分钟前
基于SpringBoot的汉服租赁系统【颜色尺码套装+个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
+VX:Fegn089515 分钟前
计算机毕业设计|基于springboot + vue建筑材料管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
Mapmost17 分钟前
数字孪生项目效率翻倍!AI技术实测与场景验证实录
前端
小酒星小杜21 分钟前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统-Input篇
前端·程序员·架构
雪碧聊技术23 分钟前
ElementPlus徽章组件:展示日期面板每天未完成的待办数量
vue.js·日期选择器·elementplus·el-badge徽章组件
Cache技术分享29 分钟前
290. Java Stream API - 从文本文件的行创建 Stream
前端·后端
陈_杨31 分钟前
前端成功转鸿蒙开发者真实案例,教大家如何开发鸿蒙APP--ArkTS 卡片开发完全指南
前端·harmonyos