在UniApp中调用支付宝支付出现 alipay-easysdk-php-2.0.0 报错 {"errmsg":"requestpayment"},通常是由于客户端与服务器端参数传递或配置问题导致的。以下是排查步骤和解决方案:
1. 检查服务器端参数是否正确
- 确保使用支付宝官方SDK生成支付参数(如
orderString)。
- 验证参数完整性:
app_id、method、charset、sign_type、sign、timestamp、version、biz_content(包含订单信息)等。
- 示例PHP代码(生成支付参数):
use Alipay\EasySDK\Kernel\Factory;
use Alipay\EasySDK\Payment\App\Models\AlipayTradeAppPayResponse;
Factory::setOptions($config); // 配置支付宝参数
$result = Factory::payment()->app()->pay('订单标题', '唯一订单号', '金额', '回调URL');
if ($result->code == '10000') {
echo $result->body; // 返回orderString给客户端
} else {
echo "生成支付参数失败:" . $result->msg;
}
2. 确认UniApp客户端调用方式
- 使用
uni.requestPayment() 方法,并正确传递 orderString。
- 示例UniApp代码:
uni.requestPayment({
provider: 'alipay',
orderInfo: '从服务器获取的orderString', // 确保是完整的字符串
success: (res) => console.log('支付成功', res),
fail: (err) => console.error('支付失败', err)
});
3. 常见错误原因
- orderString格式错误:必须是支付宝SDK生成的完整字符串,不能缺失或格式错误。
- 签名验证失败:检查支付宝密钥(RSA2)、应用ID(APPID)配置是否正确。
- 网络或权限问题:确保服务器能正常访问支付宝网关,应用已审核通过并具备支付权限。
4. 调试建议
- 在服务器端打印生成的
orderString,在支付宝验签工具中验证其有效性。
- 检查UniApp项目manifest.json中是否正确配置了支付宝AppID。
通过逐步检查参数、签名及客户端调用,通常能解决此问题。如果仍报错,查看支付宝开放平台日志或联系支付宝技术支持。