2013-10-10 22 views
1

Когда я пытаюсь представить тестовый платеж через PayPal песочницу я получаю этот новые ответ:Paypal Rest Api Ошибка

array(2) { ["header"]=> string(287) "HTTP/1.1 400 Bad Request Server: Apache-Coyote/1.1 PayPal-Debug-Id: b235ca4e7c1ed Content-Type: application/json Content-Length: 334 DC: origin1-api.sandbox.paypal.com Date: Thu, 10 Oct 2013 17:23:54 GMT Connection: close Set-Cookie: DC=origin1-api.sandbox.paypal.com; secure " ["body"]=> object(stdClass)#4 (5) { ["name"]=> string(16) "VALIDATION_ERROR" ["details"]=> array(1) { [0]=> object(stdClass)#5 (2) { ["field"]=> string(12) "transactions" ["issue"]=> string(95) "Item amount must add up to specified amount subtotal (or total if amount details not specified)" } } ["message"]=> string(29) "Invalid request - see details" ["information_link"]=> string(73) "https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR" ["debug_id"]=> string(13) "b235ca4e7c1ed" } } 

Этой ошибка о том, что мой общем элементе не добавляя к моему итогу но он явно делает, как вы можете видеть из моего JSON ниже:

{ 
"intent": "sale", 
"redirect_urls": { 
    "return_url": "http://test.example.com/", 
    "cancel_url": "http://www.example.com/cart" 
}, 
"payer": { 
    "payment_method": "paypal" 
}, 
"transactions": [ 
    { 
     "amount": { 
      "total": "904.75", 
      "currency": "USD", 
      "details": { 
       "subtotal": "889.80", 
       "shipping": "14.95" 
      } 
     }, 
     "description": "Order ID #9", 
     "item_list": { 
      "items": [ 
       { 
        "quantity": "1", 
        "name": "40 Steps and a View-20\" x 24\" - 1.5\" thick gallery wrap canvas", 
        "price": "204.95", 
        "currency": "USD", 
        "sku": "7 - 10" 
       }, 
       { 
        "quantity": "1", 
        "name": "Emerald Bay-24\" x 36\" - 0.75\" thin gallery wrap canvas", 
        "price": "219.95", 
        "currency": "USD", 
        "sku": "8 - 5" 
       }, 
       { 
        "quantity": "1", 
        "name": "Life on the Beach-36\" x 48\" - 0.75\" thin gallery wrap canvas", 
        "price": "299.95", 
        "currency": "USD", 
        "sku": "2 - 6" 
       }, 
       { 
        "quantity": "1", 
        "name": "View from the Mountain Tops-16\" x 20\" - 0.75\" thin gallery wrap canvas", 
        "price": "167.95", 
        "currency": "USD", 
        "sku": "5 - 3" 
       } 
      ] 
     } 
    } 
] 

}

Вот мой PayPal код:

class paypal { 
    private $access_token; 
    private $token_type; 

    /** 
    * Constructor 
    * 
    * Handles oauth 2 bearer token fetch 
    * @link https://developer.paypal.com/webapps/developer/docs/api/#authentication--headers 
    */ 
    public function __construct(){ 
     $postvals = "grant_type=client_credentials"; 
     $uri = PAYMENT_URI . "v1/oauth2/token"; 

     $auth_response = self::curl($uri, 'POST', $postvals, true); 
     $this->access_token = $auth_response['body']->access_token; 
     $this->token_type = $auth_response['body']->token_type; 
    } 

    /** 
    * cURL 
    * 
    * Handles GET/POST requests for auth requests 
    * @link http://php.net/manual/en/book.curl.php 
    */ 
    private function curl($url, $method = 'GET', $postvals = null, $auth = false){ 
     $ch = curl_init($url); 

     //if we are sending request to obtain bearer token 
     if ($auth){ 
      $headers = array("Accept: application/json", "Accept-Language: en_US"); 
      curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
      curl_setopt($ch, CURLOPT_USERPWD, CLIENT_ID . ":" .CLIENT_SECRET); 
      curl_setopt($ch, CURLOPT_SSLVERSION, 3); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
     //if we are sending request with the bearer token for protected resources 
     } else { 
      $headers = array("Content-Type:application/json", "Authorization:{$this->token_type} {$this->access_token}"); 
     } 

     $options = array(
      CURLOPT_HEADER => true, 
      CURLINFO_HEADER_OUT => true, 
      CURLOPT_HTTPHEADER => $headers, 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_VERBOSE => true, 
      CURLOPT_TIMEOUT => 10 
     ); 

     if ($method == 'POST'){ 
      $options[CURLOPT_POSTFIELDS] = $postvals; 
      $options[CURLOPT_CUSTOMREQUEST] = $method; 
     } 

     curl_setopt_array($ch, $options); 

     $response = curl_exec($ch); 
     $header = substr($response, 0, curl_getinfo($ch,CURLINFO_HEADER_SIZE)); 
     $body = json_decode(substr($response, curl_getinfo($ch,CURLINFO_HEADER_SIZE))); 
     curl_close($ch); 

     return array('header' => $header, 'body' => $body); 
    } 

    // Function for Processing Payment 
    function process_payment($request) { 
     $postvals = $request; 
     $uri = PAYMENT_URI . "v1/payments/payment"; 
     return $this->curl($uri, 'POST', $postvals); 
    } 
} 
+0

любая ошибка найденный? @ user2864113 –

+0

Я отправил ответ наверху, но нет, я не получаю ошибку php – McCoy

+0

Показать ваш код запроса –

ответ

2

Операция представляет собой массив, но вы передаете в объекте , Вы должны посылать

"сделки": [{ "количество": { ... } ]

вместо

https://developer.paypal.com/webapps/developer/docs/api/#create-a-payment см для более

+0

Я отредактировал свой вопрос, чтобы попросить о помощи, поскольку я не могу понять, как получить json_encode для размещения скобки в транзакциях , См. Измененную информацию выше. – McCoy

1

Вы пытаетесь открыть сокет себя, так что вам нужно, чтобы добавить заголовок HTTP HOST себя

$header .= "Host: www.sandbox.paypal.com\r\n"; 

Источник: PayPal IPN Bad Request 400 Error

2
'transactions' => array(
     0 => array(
      'amount' => array(
       'total' =>''.number_format($order_total,2).'', 
       ..... 
      ),    
      'description' =>'Mike and Maureen Photography - Order ID #'.$order_id.'' 
     ) 
    ), 
+0

Спасибо, я понял, что часть теперь появилась новая ошибка, поскольку я отредактировал свой пост для новой ошибки. – McCoy

+0

Это было довольно легко понять из сообщения об ошибке. Ваши цены на товар добавляются к 892.80, а общая сумма установлена ​​на 889.80 – aydiv

+0

. Я просто перепутал цены с продажами в db, все это хорошо. Теперь мне просто нужно работать с данными, которые я возвращаю. – McCoy

Смежные вопросы