Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Paypal API,Curl不返回任何输出_Php_Api_Curl_Paypal_Call - Fatal编程技术网

Php Paypal API,Curl不返回任何输出

Php Paypal API,Curl不返回任何输出,php,api,curl,paypal,call,Php,Api,Curl,Paypal,Call,我正在尝试了解paypal API,我有以下代码,应该进行调用,获取访问令牌,然后进行API调用。第一部分工作(直到$accesstoken行),并正确返回访问令牌,但第二部分不返回任何内容。此处可以找到本应模拟的代码: 卷发对我来说没有完全意义,任何帮助都将不胜感激 更新: 我将标题的格式更改为: $headers2 = array( 'Content-Type: application/json', 'Authorization: Bearer ' . $accesstoke

我正在尝试了解paypal API,我有以下代码,应该进行调用,获取访问令牌,然后进行API调用。第一部分工作(直到
$accesstoken
行),并正确返回访问令牌,但第二部分不返回任何内容。此处可以找到本应模拟的代码:

卷发对我来说没有完全意义,任何帮助都将不胜感激

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

$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

您没有正确设置标题

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

是正确的格式

还要注意$accesstoken之间的(空格)

编辑:更新您的JSON(我认为这是正确的,但将其回显并对照引用进行检查,我可能有一对多数组()

你需要一个空间

$headers2 = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer ' . $accesstoken // Added a space after Bearer
);
查看它现在是否工作更改 curl_setopt($sale,CURLOPT_POSTFIELDS,json_encode($data))

到 curl_setopt($sale,CURLOPT_POSTFIELDS,$data)


json encode函数在您的生产代码中打破了它

始终验证对等和验证主机的安全性:永远不要假设外部调用成功。您没有检查curl_exec()的返回值对于布尔值false,这表示失败。您只需获取返回值并尝试对其进行json_解码。至少您应该有类似于
if($result=$curl_exec($handle)==false){die(curl_error($handle));}
@Matt的东西,我现在正在测试,但一旦联机,SSL当然是必须的。@I尝试过:if(($result=curl\u exec($sale))==FALSE){echo“Error.”die(curl\u Error($sale));}但它没有触发。我现在正在研究curl调试命令。(无耻的插件)如果您通过Runscope运行它,您可以更轻松地看到API返回的内容。这似乎没有改变任何事情,尽管您对空间的看法是正确的,但我的意思是将其包括在内。现在它给出了一个关于格式错误的请求的错误,“传入的JSON请求未映射到API请求”,现在它给出了:“货币金额必须是非负数,可以选择包含正好由“.”分隔的2位小数,可选的千位分隔符“,”,小数点前限制为7位”添加0(0.99 vs.99)修复了该问题。
$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(array(
            "amount" => array(
                "total" => ".99",
                "currency" => "USD"
            )
        )
    )
);
$headers2 = array(
    'Content-Type' => 'application/json',
    'Authorization' => 'Bearer ' . $accesstoken // Added a space after Bearer
);