2015-10-10 3 views
0

Привет, у меня возникла проблема с API-интерфейсом paypal , поэтому я настроил все для GetExpressCheckoutDetails, и теперь я пытаюсь сделать DoExpressCheckoutPayment.Ошибка API Paypal: 10400

Здесь ошибка я получил:

array (size=9) 
    'TIMESTAMP' => string '2015-10-10T18:56:25Z' (length=20) 
    'CORRELATIONID' => string '1ad7e8dba8063' (length=13) 
    'ACK' => string 'Failure' (length=7) 
    'VERSION' => string '98.0' (length=4) 
    'BUILD' => string '18308778' (length=8) 
    'L_ERRORCODE0' => string '10400' (length=5) 
    'L_SHORTMESSAGE0' => string 'Transaction refused because of an invalid argument. See additional error messages for details.' (length=94) 
    'L_LONGMESSAGE0' => string 'Order total is missing.' (length=23) 
    'L_SEVERITYCODE0' => string 'Error' (length=5) 

Вот мой код:

Мой Paypal Класс:

<?php 

class Paypal{ 

    private $user = 'xxxxxx'; 
    private $pwd = '5xxxxxx'; 
    private $signature = 'xxxxxx'; 
    private $endpoint = 'https://api-3t.sandbox.paypal.com/nvp'; 
    public $errors = array(); 


    public function __construct($user = false, $pwd = false, $signature = false, $prod = false){ 
     if($user){ 
      $this->user = $user; 
     } 
     if($pwd){ 
      $this->pwd = $pwd; 
     } 
     if($signature){ 
      $this->signature = $signature; 
     } 
     if($prod){ 
      $this->endpoint = str_replace('sandbox.','', $this->endpoint); 
     } 
    } 


    public function request($method, $params){ 
     $params = array_merge($params, array(
      'METHOD' => 'SetExpressCheckout', 
      'VERSION' => '98.0', 
      'USER' => $this->user, 
      'SIGNATURE' => $this->signature, 
      'PWD' => $this->pwd 
     )); 

     $params = http_build_query($params); 
     $curl = curl_init(); 

     curl_setopt_array($curl, array(
      CURLOPT_URL => $this->endpoint, 
      CURLOPT_POST => 1, 
      CURLOPT_POSTFIELDS => $params, 
      CURLOPT_RETURNTRANSFER => 1, 
      CURLOPT_SSL_VERIFYPEER => false, 
      CURLOPT_SSL_VERIFYHOST => false, 
      CURLOPT_VERBOSE => 1 
     )); 


     $response = curl_exec($curl); 
     $responseArray = array(); 
     parse_str($response, $responseArray); 
     if(curl_errno($curl)){ 
      $this->errors = curl_error($curl); 
      curl_close(); 
      return false; 
     }else{ 
      if($responseArray['ACK'] == 'Success'){ 
       return $responseArray; 
      }else{ 
       $this->errors = $responseArray; 
       curl_close($curl); 
       return false; 
      } 
     } 

    } 



} 

process.php

<?php 
/******************* 
TO DO: 
SECURISER l'acces a la page 
$_GET['token'] doit etres defini 
$_GET['PayerID'] aussi 
*******************/ 
require 'paypal.php'; 

$paypal = new Paypal(); 
$response = $paypal->request('GetExpressCheckoutDetails', array(
    'TOKEN' => $_GET['token'] 
)); 

if($response){ 
}else{ 
    var_dump($paypal->errors); 
    die(); 
} 

$response = $paypal->request('DoExpressCheckoutPayment', array(
    'TOKEN' => $_GET['token'], 
    'PAYERID' => $_GET['PayerID'], 
    'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', 
    'PAYMENTREQUEST_0_AMT' => $response['PAYMENTINFO_0_AMT'], 
    'PAYMENTREQUEST_0_ITEMAMT' => $response['PAYMENTINFO_0_AMT'], 
    'PAYMENTREQUEST_0_CURENCYCODE' => 'EUR', 
    'L_PAYMENTREQUEST_0_QTY0' => 1, 
    'L_PAYMENTREQUEST_0_AMT0' => 12.0, 
    'L_PAYMENTREQUEST_0_NAME0' => "Générateur d'énergie quatique", 
    'L_PAYMENTREQUEST_0_NUMBER0' => 0, 
    'L_PAYMENTREQUEST_0_QTY1' => 2, 
    'L_PAYMENTREQUEST_0_AMT0' => 30.50, 
    'L_PAYMENTREQUEST_0_NAME0' => "Hyperdrive T14", 
    'L_PAYMENTREQUEST_0_NUMBER0' => 1 

)); 

if($response){ 
    var_dump($response); 
}else{ 
    var_dump($paypal->errors); 
} 

И всякий раз, когда я перенаправляюсь к proc ess.php через paypal после оплаты Я получаю это:

array (size=9) 
    'TIMESTAMP' => string '2015-10-10T18:56:25Z' (length=20) 
    'CORRELATIONID' => string '1ad7e8dba8063' (length=13) 
    'ACK' => string 'Failure' (length=7) 
    'VERSION' => string '98.0' (length=4) 
    'BUILD' => string '18308778' (length=8) 
    'L_ERRORCODE0' => string '10400' (length=5) 
    'L_SHORTMESSAGE0' => string 'Transaction refused because of an invalid argument. See additional error messages for details.' (length=94) 
    'L_LONGMESSAGE0' => string 'Order total is missing.' (length=23) 
    'L_SEVERITYCODE0' => string 'Error' (length=5) 

Что я сделал не так?

+0

** См. дополнительные сообщения об ошибках для получения подробной информации ** какие ошибки? –

+0

'L_ERRORCODE0' => строка '10400' (length = 5) 'L_SHORTMESSAGE0' => строка 'Сделка отказалась из-за недопустимого аргумента. Дополнительные сведения см. В дополнительных сообщениях об ошибках. ' (длина = 94) 'L_LONGMESSAGE0' => строка 'Сумма заказа отсутствует.' (длина = 23) – newQuery

ответ

0

От paypal api error codes:

10400 

Transaction refused because of an invalid argument. See additional error messages for details.

OrderTotal is missing.

В принципе, вы пропустили OrderTotal

+0

Можете ли вы дать мне переменную, которую мне нужно использовать? – newQuery

+0

Взгляните на этот ответ http://stackoverflow.com/a/16300565/797495, проверьте используемые им переменные, в частности 'PAYMENTREQUEST_0_AMT = 106.72' –

0

После кода я думаю, что параметр L_PAYMENTREQUEST_0_AMT0 выставиться дважды с разными ценами, проверьте, чтобы установить только один раз

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