我正在编写代码来涵盖卡被拒绝等类似的负面情况。 根据文档,对订单执行此操作的唯一方法是使用标头 PayPal-Mock-Response https://developer.paypal.com/tools/sandbox/negative-testing/request-headers/
但是,它对我不起作用,每次我尝试添加带有任何错误的“PayPal-Mock-Response”标头时,我都会收到 403 错误和空响应,根本无法使其工作
示例,请求:
POST https://api-m.sandbox.paypal.com/v2/checkout/orders
params:
{
"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": ""
}
我正在使用nodejs,node-fetch包,身份验证令牌是正确的,因为我已经得到了积极的场景工作,只有当我添加“PayPal-Mock-Response”标头时才会抛出403错误。
我做错了什么或者有其他方法可以在沙箱上付款失败吗?
DUPLICATE_INVOICE_ID
不是模拟 /v2/checkout/orders creation API 调用的有效错误...
然而,对于 v2 订单capture API 调用来说,这是一个有效错误:
发布到 https://api.sandbox.paypal.com/v2/checkout/orders/:id/capture
这个示例是您引用的文档中实际给出的。
--
从概念上讲,发票 ID 将在捕获时进行检查。您可以为给定的发票 ID 创建任意数量的订单(用于结账尝试),在对同一 ID 重试审批时不会出现重复问题。重复发票错误是指尝试捕获已导致为该帐户创建成功交易的 ID(使用该 ID 创建交易)时出现的错误。重点是防止重复付款,而不是防止尚未创建付款的重复结帐尝试。
--
如果您想阻止尝试创建新订单 ID,请在创建调用中设置
PayPal-Request-Id
标头。使用相同的标头重复调用将返回与之前相同的信息。
我仍然有同样的问题。负面测试处于活动状态,我使用了以下标题:
def create_order(self, payload: dict) -> dict:
access_token = self.get_access_token()
response = requests.post(
self.get_endpoint("/checkout/orders/", version="v2"),
headers={
"Authorization": f"Bearer {access_token}",
"Accept-Language": get_language(),
"Content-Type": "application/json",
"Prefer": "return=representation",
"PayPal-Request-Id": self.hash_data(payload),
"PayPal-Mock-Response": '{"mock_application_codes": "AUTHENTICATION_FAILURE"}',
},
json=payload,
)
response = response.json()
return response
API 仍在响应 403。当我删除标头时,会响应新订单。