如何发布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-Type
和Content-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)
);