转换paypal curl获取访问令牌请求进入guzzle

时间:2014-07-25 09:01:11

标签: curl paypal internal guzzle

我需要一些Paypal rest api帮助。

我使用guzzle作为http客户端来使用paypal api

当我在curl的命令行中尝试使用paypal示例时,它确实有效

但是当我想用guzzle重现它时,我总是从paypal获得内部500错误..

这是来自官方文档的paypal curl示例(请点击此处https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/):

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
  -H "Accept: application/json" \
  -H "Accept-Language: en_US" \
  -u "clientId:clientSecret" \
  -d "grant_type=client_credentials"

这是我的guzzle代码:

/**
 * Etape 1 récuperer un access token
 */
$authResponse = $client->get("https://api.sandbox.paypal.com/v1/oauth2/token", [
    'auth' =>  [$apiClientId, $apiClientSecret, 'basic'],
    'body' => ['grant_type' => 'client_credentials'],
    'headers' => [
    'Accept-Language' => 'en_US',
    'Accept'     => 'application/json' 
    ]
]);

echo $authResponse->getBody();

我尝试使用auth basic,digest但到目前为止都没有。

感谢您提供任何帮助!

3 个答案:

答案 0 :(得分:4)

这是使用 guzzlehttp

$uri = 'https://api.sandbox.paypal.com/v1/oauth2/token';
$clientId = \\Your client_id which you got on sign up;
$secret = \\Your secret which you got on sign up;

$client = new \GuzzleHttp\Client();
$response = $client->request('POST', $uri, [
        'headers' =>
            [
                'Accept' => 'application/json',
                'Accept-Language' => 'en_US',
               'Content-Type' => 'application/x-www-form-urlencoded',
            ],
        'body' => 'grant_type=client_credentials',

        'auth' => [$clientId, $secret, 'basic']
    ]
);

$data = json_decode($response->getBody(), true);

$access_token = $data['access_token'];

答案 1 :(得分:2)

您的问题出在第一行。

    $authResponse = $client->get

应该是一个帖子。

     $authResponse = $client->post

我有一个类似的问题。

编辑:我也很喜欢如果你想使用JSON作为请求的主体使用json_encode或用json替换body,guzzle将处理其余部分。在您之前的代码中......

$authResponse = $client->post("https://api.sandbox.paypal.com/v1/oauth2/token", [
    'auth' =>  [$apiClientId, $apiClientSecret, 'basic'],
    'json' => ['grant_type' => 'client_credentials'],
    'headers' => [
        'Accept-Language' => 'en_US',
        'Accept' => 'application/json' 
    ]

]);

答案 2 :(得分:2)

我得到了Filippo De Santis'的帮助。码。他已经使用guzzle 3.9.1实现了一个非常好的PayPal REST API客户端,你可以在https://github.com/p16/paypal-rest-api-client找到它并且你可以使用他的代码。

但是如果你还想使用Guzzle。所以我从他的代码中获得帮助并使用以下代码,它对我来说非常有用

$client = new \Guzzle\Http\Client();

$clientId = "xxxxxxxxx";
$secret = "yyyyyyyyyy";

$request = $client->createRequest(
    'POST',
    'https://api.sandbox.paypal.com/v1/oauth2/token',
    array(
        'Accept' => 'application/json',
        'Accept-Language' => 'en_US',
        'Content-Type' => 'application/x-www-form-urlencoded'
    ),
    'grant_type=client_credentials',
    array(
        'auth' => array($clientId, $secret),
    )
);

$response = $client->send($request);
$data = json_decode($response->getBody(), true);        

var_dump($data);

请注意我使用guzzle 3.9.1