如何发布JSON数据到贝宝自适应

问题描述:

我想使用curl使用贝宝自适应API。如何发布JSON数据到贝宝自适应

Docs告诉我可以用JSON格式发送我的参数,但是我总是收到Invalid Request (580001)错误。

这是我做的请求:

[X-PAYPAL-SECURITY-USERID] => XXXXXX 
[X-PAYPAL-SECURITY-PASSWORD] => XXXXXX 
[X-PAYPAL-SECURITY-SIGNATURE] => XXXXXX 
[X-PAYPAL-REQUEST-DATA-FORMAT] => JSON 
[X-PAYPAL-RESPONSE-DATA-FORMAT] => JSON 
[X-PAYPAL-APPLICATION-ID] => APP-80W284485P519543T //APP-ID for Sandbox 

这是我已经建立了JSON数据:

{"endingDate":"2012-06-11T12:20:02+00:00", 
"startingDate":"2012-06-20T12:20:02+00:00", 
"maxTotalAmountOfAllPayments":"1000.00", 
"currencyCode":"EUR", 
"cancelUrl":"http:\/\/localhost\/xx\/pledge?id=221&step=fail", 
"returnUrl":"http:\/\/localhost\/xx\/pledge?id=221&step=done", 
"pinType":"NOT_REQUIRED", 
"requestEnvelope":{"detailLevel":"ReturnAll","errorLanguage":"en_US"}, 
"clientDetails":[] 
} 

我觉得我不发送JSON数据正确。 我设置这样的JSON数据(使用卷曲):

curl_setopt($handle, CURLOPT_POST, true); 
curl_setopt($handle, CURLOPT_POSTFIELDS, $json_data); 

这是发送JSON数据的正确方法?

好,我找到了解决办法:

我失踪到指定的头Content-TypeContent-Length
所以最后的结果是这样的:

$json_data = json_encode($json_fields); 

$this->headers = array(
// Authentication 
'X-PAYPAL-SECURITY-USERID' => $this->_username, 
'X-PAYPAL-SECURITY-PASSWORD' => $this->_password, 
'X-PAYPAL-SECURITY-SIGNATURE' => $this->_signature, 

// Data format 
'X-PAYPAL-REQUEST-DATA-FORMAT' => 'JSON', 
'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'JSON', 

// Application and Device identification 
'X-PAYPAL-APPLICATION-ID' => $this->_app_id, 
'X-PAYPAL-DEVICE-IPADDRESS' => $this->_client_ip, 
'Content-Type'   => 'application/json', 
    'Content-Length'    => strlen($json_data) 
);