2012-06-19 2 views
0

Я пытаюсь использовать Adaptive API Paypal с помощью curl.Как опубликовать данные JSON для Paypal Adaptive

Документы говорят, что я могу отправлять свои параметры в формате JSON, но я всегда получаю ошибку Invalid Request (580001).

Это запрос я делаю:
Headers

[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?

ответ

3

Ok Я нашел решение:

мне не хватало, чтобы указать 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) 
); 
Смежные вопросы