php - 使用paypal sdk购买成功后如何向客户回显付款金额?

标签 php paypal paypal-sandbox paypal-rest-sdk

我可以使用 paypal Rest sdk 成功创建付款。

下面的代码属于我重定向成功客户的页面。

成功.php

// #Execute Payment Sample
// This is the second step required to complete
// PayPal checkout. Once user completes the payment, paypal
// redirects the browser to "redirectUrl" provided in the request.

require "app/start.php";

use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\ExecutePayment;
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;
use PayPal\Api\Transaction;
// ### Approval Status
// Determine if the user approved the payment or not
if (isset($_GET['paymentId']) && $_GET['token'] && $_GET['PayerID']) {
    // Get the payment Object by passing paymentId
    // payment id was previously stored in session in
    // CreatePaymentUsingPayPal.php
    $paymentId = $_GET['paymentId'];
    $payment = Payment::get($paymentId, $paypal);
    // ### Payment Execute
    // PaymentExecution object includes information necessary
    // to execute a PayPal account payment.
    // The payer_id is added to the request query parameters
    // when the user is redirected from paypal back to your site
    $execution = new PaymentExecution();
    $execution->setPayerId($_GET['PayerID']);

    try {
        // Execute the payment
        // (See bootstrap.php for more on `ApiContext`)
        $result = $payment->execute($execution, $paypal);
        // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
        //ResultPrinter::printResult("Executed Payment", "Payment", $payment->getId(), $execution, $result);
        echo $payment->getId();
        echo "<br>";
        var_dump($result);

        try {
            $payment = Payment::get($paymentId, $paypal);
        } catch (Exception $ex) {
            // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
            //ResultPrinter::printError("Get Payment", "Payment", null, null, $ex);
            echo "error 1";
            exit(1);
        }
    } catch (Exception $ex) {
        // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
        //ResultPrinter::printError("Executed Payment", "Payment", null, null, $ex);
        echo "error 2";
        exit(1);
    }
    // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
    //ResultPrinter::printResult("Get Payment", "Payment", $payment->getId(), null, $payment);

    //return $payment;
} else {
    // NOTE: PLEASE DO NOT USE RESULTPRINTER CLASS IN YOUR ORIGINAL CODE. FOR SAMPLE ONLY
    //ResultPrinter::printResult("User Cancelled the Approval", null);
    echo "cancelled";
    exit;
}

以下是我对成功者的回应:

echo $payment->getId();
echo "<br>";
var_dump($result);

无论如何,我想重复类似的内容您已成功支付了 $X.00。

但我不知道如何从我所拥有的中获取总付款金额。

var_dump($result);

打印这个:

>object(stdClass)#36 (10) {
  ["id"]=>
  string(28) "PAY-XXXXXXXXXX"
  ["intent"]=>
  string(4) "sale"
  ["state"]=>
  string(8) "approved"
  ["cart"]=>
  string(17) "XXXXXXXXXXX"
  ["payer"]=>
  object(stdClass)#35 (2) {
    //payer details was here
  }
  ["transactions"]=>
  array(1) {
    [0]=>
    object(stdClass)#29 (4) {
      ["amount"]=>
      object(stdClass)#27 (3) {
        ["total"]=>
        string(5) "25.00"
        ["currency"]=>
        string(3) "USD"
        ["details"]=>
        object(stdClass)#23 (3) {
          ["subtotal"]=>
          string(5) "25.00"
          ["tax"]=>
          string(4) "0.00"
          ["shipping"]=>
          string(4) "0.00"
        }
      }

  //and goes on....

所以,我真的非常接近得到总数了。我在这里需要一点帮助。

提前致谢

最佳答案

我不确定这是否是最佳实践,但是,

$result->transactions[0]->related_resources[0]->sale->amount->total; //echo: 25.00

到目前为止,这段代码解决了我的问题。

关于php - 使用paypal sdk购买成功后如何向客户回显付款金额?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35465823/

相关文章:

java - 使用 Paypal API 问题

PHP Payal 根据购买的产品更新 MySQL

cordova - 无需插件即可将 PayPal 与 Cordova 集成?

用于获取客户数据的 PayPal API 端点

php - PayPal Pro 托管解决方案和 3D 安全卡

php - 为什么没有生成输出?

php - echo 在输出浏览器端没有显示任何内容

paypal - PayPal REST API 中的 IMMEDIATE_PAY 和 INSTANT_FUNDING_SOURCE 有什么区别

正则表达式 : lookbehind and lookahead and greediness problem

PHP PDO 安全