【问题标题】:Validation error on PayPal REST APIPayPal REST API 上的验证错误
【发布时间】:2015-07-30 10:10:54
【问题描述】:

我正在尝试在网站上实现 PayPal REST API,但我遇到了无法摆脱的验证错误。它过去曾使用不同的值,但现在我收到以下消息:

交易金额详细信息(小计、税金、运费)必须加起来 指定金额总计。

这是最后一点,我设置了Transaction 对象。

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

这是$itemList$amount 对象中的var_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 表明转换似乎不是问题。

【问题讨论】:

    标签: php paypal


    【解决方案1】:

    我能够使用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;
    

    这是成功交易的快照:

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2012-05-19
      • 1970-01-01
      • 2013-05-09
      • 2013-09-10
      • 2023-03-20
      • 1970-01-01
      • 2020-01-10
      • 2015-05-31
      相关资源
      最近更新 更多