Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PayPal REST API上的验证错误_Php_Paypal - Fatal编程技术网

Php PayPal REST API上的验证错误

Php PayPal REST API上的验证错误,php,paypal,Php,Paypal,我试图在一个网站上实现PayPalRESTAPI,但我面临一个无法摆脱的验证错误。它在过去以不同的价值观工作,但现在我得到了以下信息: 交易金额明细(小计、税费、运费)合计必须达到 指定的总金额 这里是最后一位,我在这里设置事务对象 $transaction = new Transaction(); $transaction->setItemList($itemList) ->setAmount($amount); 下面是$itemList和$amount对

我试图在一个网站上实现PayPalRESTAPI,但我面临一个无法摆脱的验证错误。它在过去以不同的价值观工作,但现在我得到了以下信息:

交易金额明细(小计、税费、运费)合计必须达到 指定的总金额

这里是最后一位,我在这里设置
事务
对象

$transaction = new Transaction();
$transaction->setItemList($itemList)
            ->setAmount($amount);
下面是
$itemList
$amount
对象的
var\u dump

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
显示转换似乎不是问题。

我能够成功地使用创建付款。我所做的是修改了sdk()中提供的示例,并使其能够根据您的问题处理细节,我成功地创建了它

请你比较一下,看看你是否忘记了这里的任何一步

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