如何使用Symfony的HttpClient联系PayPal API?

mwkjh3gx  于 2022-11-25  发布在  其他
关注(0)|答案(1)|浏览(108)

我试图通过PayPal API捕获付款,但我一直收到错误500。我按照指南(根据我的需要翻译成PHP)操作,所以我看不出我的错误在哪里。
我的后台是PHP/Symfony,所以我使用HTTPClient发送请求:

$response = $this->client->request('POST', sprintf('%s/%s/checkout/orders/%s/capture', $this->url, 'v2', $orderID), [
    'auth_bearer' => $this->accessToken,
    'headers' => [
        'Content-Type' => 'application/json',
        'PayPal-Request-Id' => $payment->getClientToken()
    ],
    'json' => null
]);

我添加了'json' =〉null以强制请求为application/json。
我也注意到一些小问题,我不能验证对v2网址,我必须使用v1和处理付款到v2。
我正在使用沙盒帐户。如果我运行所有的请求在 Postman 我得到201创建,但如果我只做这一个与ID从结帐我得到404未找到。
关于这三种使用方式的请求我没有一个单一的具有相同的回报。
有人遇到过这个问题并解决了吗?
编辑:添加PayPal API文档中的curl示例:

curl -v -X POST https://api-m.sandbox.paypal.com/v2/checkout/orders/XXX/authorize \
-H "Content-Type: application/json" \
-H "Authorization: Bearer Access-Token" \
-H "PayPal-Request-Id: XXX"
j91ykkif

j91ykkif1#

PayPal-Request-Id标头(如果包括)对于该捕获尝试应是唯一的。这适用于API idempotency,用于在收到500类型错误或无响应后需要重试捕获的情况。
如果您尝试从错误的环境中捕获ID,则可能会发生404(例如,ID是在沙箱中创建和批准的,但您错误地尝试在实时URL中捕获它)
我无法在v2 URL上验证
所有API调用都使用访问令牌,但最初的oauth请求仅针对v1 API,因此这是正确的。没有其他“v2”URL可用于请求访问令牌。

相关问题