如何使用PayPal JS SDK测试失败交易及捕获错误?
在PayPal JS SDK v5.1.0沙箱环境触发失败交易的可行方案
针对你遇到的沙箱负面测试模式对支付按钮无效的问题,以下是几种可靠的测试失败场景的方法:
1. 手动模拟错误流程
在代码中添加条件判断,主动触发错误来测试前端的错误处理逻辑:
- 模拟创建订单失败:在
createOrder回调中,添加测试开关(比如URL参数或全局变量),满足条件时直接抛出错误或返回拒绝的Promise:
createOrder: (coData, actions) => { // 测试用:URL含test_error参数则触发失败 if (window.location.search.includes('test_error=create_order')) { return Promise.reject(new Error('模拟创建订单失败')); } // 原有逻辑... }
- 模拟捕获订单失败:在
onApprove回调中,跳过真实的API调用,直接返回拒绝的Promise:
onApprove: (oaData, actions) => { if (window.location.search.includes('test_error=capture')) { return Promise.reject(new Error('模拟捕获订单失败')); } // 原有捕获逻辑... }
2. 使用沙箱测试卡号触发支付失败
PayPal沙箱提供了专门的测试卡号,用于触发不同的失败场景:
- 触发
DECLINED状态的卡号:4000000000000002(匹配Visa,CVV任意,过期日期设为未来月份/年份) - 触发
INSUFFICIENT_FUNDS状态的卡号:4000000000009995
在支付流程中使用这些卡号完成授权,就能得到真实的失败响应。
3. 构造非法订单参数触发API错误
修改订单参数,让PayPal API直接返回错误:
- 设置金额为负数或超过限制的值:
value: "-10.00" - 使用不符合要求的金额格式:
value: "10"(不带小数位,部分币种要求两位小数) - 填写无效的商家信息:比如
description为空或包含特殊字符
4. 补充按钮的错误处理回调
你的现有代码缺少onError回调,添加后可以捕获所有SDK层面的错误,方便测试和调试:
await paypal.Buttons({ // 原有createOrder、onApprove逻辑... onError: (err) => { console.error('PayPal按钮错误:', err); // 这里添加错误提示页面跳转或用户通知逻辑 } }).render(buttonWrapper[0]);
另外,你提到的GitHub Issue我们已经关注,后续如果官方修复负面测试模式对按钮的支持,可以优先使用官方方案。
内容的提问来源于stack exchange,提问作者Andreas
相关产品推荐
相关产品推荐

