Symfony 5.4 HttpClient为PayPal结账集成设置curl选项

agxfikkp  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在Symfony 5.4项目中实现PayPal Checkout(https://developer.paypal.com/docs/checkout/standard/integrate/)。
通过使用Symfony HttpClient将clientId和clientSecret发送到PayPal REST API(https://developer.paypal.com/api/rest/authentication/),我在检索访问令牌时遇到了一些麻烦。
PayPal定义了一个curl请求来获取令牌:

curl -v -X POST "https://api-m.sandbox.paypal.com/v1/oauth2/token" \
    -u "<CLIENT_ID>:<CLIENT_SECRET>" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "grant_type=client_credentials"

我试着用Symfony的HttpClient来实现这个功能,但是没有成功,因为我不知道如何传递选项。
我尝试使用CURLOPT_VERBOSE,CURLOPT_USERNAME,CURLOPT_HEADER来传递extra.curl的选项(找不到grant_type选项的定义)。似乎在extra.curl中不允许设置header和verbose模式,所以我尝试在'body'部分设置它。这导致了401。
下面是我的尝试:

$response = $this->httpClient->request('POST', 'https://api-m.sandbox.paypal.com/v1/oauth2/token', [
    'extra' => [
        'curl'=> [
            CURLOPT_VERBOSE => 1,
            CURLOPT_USERNAME => $clientId.':'.$clientSecret,
            CURLOPT_HEADER => "Content-Type: application/x-www-form-urlencoded"
        ]
    ]
]);

或者:

$response = $this->httpClient->request('POST', 'https://api-m.sandbox.paypal.com/v1/oauth2/token', [
    'body' => [
        'Content-Type' => 'application/x-www-form-urlencoded',
        'grant_type' => 'client_credentials'
    ],
    'extra' => [
        'curl'=> [
            CURLOPT_USERNAME => $clientId.':'.$clientSecret,
        ]
    ]
]);

我找不到任何合适的HttpClient curl使用示例。所以基本上我正在尝试了解如何使用HttpClient实现PayPal Auth请求。欢迎提供任何提示。

bbuxkriu

bbuxkriu1#

使用'auth_basic'...

$response = $this->httpClient->request('POST', 'https://api-m.sandbox.paypal.com/v1/oauth2/token', [
    'auth_basic' => [$clientId, $clientSecret],

    // ...
]);

相关问题