2015-05-18 4 views
0

Я пытаюсь реализовать API-интерфейс PayPal REST на веб-сайте, но мне грозит ошибка проверки, из которой я не могу выйти. Он работал в прошлом с различными значениями, но теперь я получаю следующее сообщение:Ошибка проверки в API-интерфейсе PayPal REST

Сумма транзакции детали (субтотальная, налог, доставка) необходимо добавить до указанной общей суммы.

Вот последний бит, где я устанавливаю объект Transaction.

$transaction = new Transaction(); 
$transaction->setItemList($itemList) 
      ->setAmount($amount); 

Вот var_dump из $itemList и $amount объектов:

object(PayPal\Api\ItemList)[1117] 
    private '_propMap' (PayPal\Common\PayPalModel) => 
    array (size=1) 
     'items' => 
     array (size=1) 
      0 => 
      object(PayPal\Api\Item)[1116] 
       private '_propMap' (PayPal\Common\PayPalModel) => 
       array (size=4) 
        'name' => string 'Product description' (length=19) 
        'currency' => string 'EUR' (length=3) 
        'quantity' => int 1 
        'price' => string '31.90' (length=5) 
object(PayPal\Api\Amount)[1119] 
    private '_propMap' (PayPal\Common\PayPalModel) => 
    array (size=3) 
     'currency' => string 'EUR' (length=3) 
     'total' => string '137.46' (length=6) 
     'details' => 
     object(PayPal\Api\Details)[1118] 
      private '_propMap' (PayPal\Common\PayPalModel) => 
      array (size=2) 
       'shipping' => string '105.56' (length=6) 
       'subtotal' => string '31.90' (length=5) 

Я абсолютно уверен, что 105.56 + 31.90 = 137.46, так что должно быть что-то еще я с видом. Я обрабатываю все значения в центах и ​​должен конвертировать их в евро для отправки в PayPal, но var_dump показывает, что преобразование не кажется проблемой.

ответ

0

Я смог успешно создать платеж с PayPal-PHP-SDK. То, что я сделал, было изменено образцы, предоставленные внутри sdk (sample/payments/CreatePaymentUsingPayPal.php), и заставил его работать с деталями в соответствии с вашим вопросом, и я смог его успешно создать.

Не могли бы вы сравнить и посмотреть, не забыли ли вы здесь какие-либо шаги.

<?php 

// # Create Payment using PayPal as payment method 
// This sample code demonstrates how you can process a 
// PayPal Account based Payment. 
// API used: /v1/payments/payment 

require __DIR__ . '/../bootstrap.php'; 
use PayPal\Api\Amount; 
use PayPal\Api\Details; 
use PayPal\Api\Item; 
use PayPal\Api\ItemList; 
use PayPal\Api\Payer; 
use PayPal\Api\Payment; 
use PayPal\Api\RedirectUrls; 
use PayPal\Api\Transaction; 

// ### Payer 
// A resource representing a Payer that funds a payment 
// For paypal account payments, set payment method 
// to 'paypal'. 
$payer = new Payer(); 
$payer->setPaymentMethod("paypal"); 

// ### Itemized information 
// (Optional) Lets you specify item wise 
// information 
$item1 = new Item(); 
$item1->setName('Ground Coffee 40 oz') 
    ->setCurrency('EUR') 
    ->setQuantity(1) 
    ->setSku("123123") // Similar to `item_number` in Classic API 
    ->setPrice(31.90); 

$itemList = new ItemList(); 
$itemList->setItems(array($item1)); 

// ### Additional payment details 
// Use this optional field to set additional 
// payment information such as tax, shipping 
// charges etc. 
$details = new Details(); 
$details->setShipping(105.56) 
    ->setSubtotal(31.90); 

// ### Amount 
// Lets you specify a payment amount. 
// You can also specify additional details 
// such as shipping, tax. 
$amount = new Amount(); 
$amount->setCurrency("EUR") 
    ->setTotal(137.46) 
    ->setDetails($details); 

// ### Transaction 
// A transaction defines the contract of a 
// payment - what is the payment for and who 
// is fulfilling it. 
$transaction = new Transaction(); 
$transaction->setAmount($amount) 
    ->setItemList($itemList) 
    ->setDescription("Payment description") 
    ->setInvoiceNumber(uniqid()); 

// ### Redirect urls 
// Set the urls that the buyer must be redirected to after 
// payment approval/ cancellation. 
$baseUrl = getBaseUrl(); 
$redirectUrls = new RedirectUrls(); 
$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true") 
    ->setCancelUrl("$baseUrl/ExecutePayment.php?success=false"); 

// ### Payment 
// A Payment Resource; create one using 
// the above types and intent set to 'sale' 
$payment = new Payment(); 
$payment->setIntent("sale") 
    ->setPayer($payer) 
    ->setRedirectUrls($redirectUrls) 
    ->setTransactions(array($transaction)); 


// For Sample Purposes Only. 
$request = clone $payment; 

// ### Create Payment 
// Create a payment by calling the 'create' method 
// passing it a valid apiContext. 
// (See bootstrap.php for more on `ApiContext`) 
// The return object contains the state and the 
// url to which the buyer must be redirected to 
// for payment approval 
try { 
    $payment->create($apiContext); 
} catch (Exception $ex) { 
    // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY 
    ResultPrinter::printError("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", null, $request, $ex); 
    exit(1); 
} 

// ### Get redirect url 
// The API response provides the url that you must redirect 
// the buyer to. Retrieve the url from the $payment->getApprovalLink() 
// method 
$approvalUrl = $payment->getApprovalLink(); 

// NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY 
ResultPrinter::printResult("Created Payment Using PayPal. Please visit the URL to Approve.", "Payment", "<a href='$approvalUrl' >$approvalUrl</a>", $request, $payment); 

return $payment; 

Вот снимок успешной сделки:

enter image description here