Paypal API,Curl不返回任何输出

时间:2013-10-07 18:07:05

标签: php api curl paypal call

我正在试图找出paypal API,我有以下代码,它应该进行调用,获取访问令牌,然后进行API调用。第一部分工作(直到$accesstoken行),并正确返回访问令牌,但第二部分不返回任何内容。这个模仿的代码可以在这里找到:Make Your First Call

$url = "https://api.sandbox.paypal.com/v1/oauth2/token";
$headers = array(
    'Accept' => 'application/json',
    'Accept-Language' => 'en_US',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'grant_type=client_credentials');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_USERPWD, $clientID . ':' . $clientSecret);
$curl = curl_exec($ch);

$x = json_decode($curl, TRUE);
print_r($x);
$accesstoken = $x['access_token'];


$headers2 = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer' . $accesstoken
);

$data = array(
    "intent" => "sale",
    "redirect_urls" => array(
        "return_url" => "http://example.com/your_redirect_url/",
        "cancel_url" => "http://example.com/your_cancel_url/"
    ),
    "payer" => array(
        "payment_method" => "paypal"
    ),
    "transactions" => array(
        "transactions" => array(
            "total" => ".99",
            "currency" => "USD"
        )
    )
);

$saleurl = "https://api.sandbox.paypal.com/v1/payments/payment";

$sale = curl_init();
curl_setopt($sale, CURLOPT_URL, $saleurl);
curl_setopt($sale, CURLOPT_VERBOSE, TRUE);
curl_setopt($sale, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($sale, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($sale, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($sale, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($sale, CURLOPT_HTTPHEADER, $headers2);
$finalsale = curl_exec($sale);

$verb = json_decode($finalsale, TRUE);
print_r($verb);

Curl对我来说没有任何意义,任何帮助都会受到赞赏。

更新: 我将标题的格式更改为:

$headers2 = array(
    'Content-Type: application/json',
    'Authorization: Bearer ' . $accesstoken
);

根据其中一个答案。现在显示:

[name] => MALFORMED_REQUEST
[message] => Incoming JSON request does not map to API request
[information_link] => https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST
[debug_id] => f53a882702a04

3 个答案:

答案 0 :(得分:2)

您没有正确设置标题...

$headers = array(
    'Accept: application/json',
    'Accept-Language: en_US'
);

$headers2 = array(
    'Content-Type: application/json',
    'Authorization: Bearer ' . $accesstoken
);

格式是否正确。

还要注意在$ accesstoken

之间的Bearer之后的(空格)

编辑:更新你的JSON(我认为这是正确的,但回应它并检查它与参考,我可能有一个到多个数组()

$data = array(
    "intent" => "sale",
    "redirect_urls" => array(
        "return_url" => "http://example.com/your_redirect_url/",
        "cancel_url" => "http://example.com/your_cancel_url/"
    ),
    "payer" => array(
        "payment_method" => "paypal"
    ),
    "transactions" => array(array(
            "amount" => array(
                "total" => ".99",
                "currency" => "USD"
            )
        )
    )
);

答案 1 :(得分:1)

你需要一个空间

$headers2 = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer ' . $accesstoken // Added a space after Bearer
);

看看它现在是否有效

答案 2 :(得分:0)

更改     curl_setopt($ sale,CURLOPT_POSTFIELDS,json_encode($ data));

要     curl_setopt($ sale,CURLOPT_POSTFIELDS,$ data);

json编码功能打破它