Node.js中PayPal-Mock-Response失效,沙箱负面测试遇403错误
PayPal沙箱负面测试403问题排查与替代方案
问题背景
开发支付负面场景(如卡片被拒)时,使用PayPal-Mock-Response请求头进行Orders接口负面测试,每次添加该头返回403错误且响应为空。正常请求可正常执行,授权令牌有效,使用Node.js的node-fetch包。
请求示例
POST https://api-m.sandbox.paypal.com/v2/checkout/orders { "method": "post", "headers": { "Content-Type": "application/json", "Authorization": "Bearer A21[reducted]", "PayPal-Mock-Response": "{\"mock_application_codes\":\"DUPLICATE_INVOICE_ID\"}" }, "body": "{\"intent\":\"CAPTURE\",\"purchase_units\":[{\"custom_id\":89534,\"description\":\"my item name\",\"reference_id\":648,\"amount\":{\"currency_code\":\"USD\",\"value\":\"5.01\"}}]}" }
响应示例
{ "statusCode": 403, "responseText": "" }
问题排查与修复
- 修正请求头格式:手动转义JSON字符串容易出错,建议用
JSON.stringify()自动处理,避免格式问题导致的403:const mockHeader = JSON.stringify({ mock_application_codes: "DUPLICATE_INVOICE_ID" }); const headers = { "Content-Type": "application/json", "Authorization": "Bearer A21[reducted]", "PayPal-Mock-Response": mockHeader }; - 验证错误码适用性:
DUPLICATE_INVOICE_ID错误码可能不适用于订单创建接口,部分错误码仅针对捕获(CAPTURE)等后续操作。尝试在/v2/checkout/orders/{order_id}/capture请求中使用该头,或更换订单创建接口支持的错误码。 - 检查账户权限:确认沙箱商家账户已启用负面测试功能,部分错误码需要特定权限才能触发。
替代负面测试方法
如果Mock头仍无法使用,可采用以下方案:
- 使用PayPal沙箱测试卡号:PayPal提供了多种测试卡号,可模拟卡片被拒、余额不足、过期等场景。在沙箱支付页面选择"Pay with a card",输入对应测试卡号即可触发失败。
- 模拟后续操作失败:正常创建订单后,在捕获订单的请求中添加
PayPal-Mock-Response头,模拟支付失败场景,这种方式的兼容性通常更好。
内容的提问来源于stack exchange,提问作者Igor.K
相关产品推荐
相关产品推荐

