【问题标题】:Paypal checkout - transaction data - only returning PayerIDPaypal 结帐 - 交易数据 - 仅返回 PayerID
【发布时间】:2021-07-08 10:33:05
【问题描述】:

第一次集成 paypal,如果这是一个不好的问题,请见谅。我制作了一个使用 php 作为后端的商店页面,这是我的单件购买代码:

<form action="<?php echo PAYPAL_URL; ?>" method="get">
                <!-- Identify your business so that you can collect the payments. -->
                <input type="hidden" name="business" value="<?php echo PAYPAL_ID; ?>">
                
                <!-- Specify a Buy Now button. -->
                <input type="hidden" name="cmd" value="_xclick">
                
                <!-- Specify details about the item that buyers will purchase. -->
                <input type="hidden" name="item_name" value="dev_test_item">
                <input type="hidden" name="item_number" value="2">
                <input type="hidden" name="amount" value="10">
                <input type="hidden" name="currency_code" value="EUR">
                
                <!-- Specify URLs -->
                <input type="hidden" name="return" value="http://localhost/doda/success.php">
                <input type="hidden" name="cancel_return" value="http://localhost/doda/cancel.php">
                
                <!-- Display the payment button. -->
                <input type="image" name="submit" border="0" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif">
            </form>

但是在返回success.php 上,paypal 在成功支付后返回的唯一交易数据是PayerID。的输出: print_r( $_REQUEST );只是数组([PayerID] => SOME_HEXADECIMAL)

我在我的 PayPal 企业帐户中启用了“网站付款自动退货”和“付款数据传输”。 Auto return中的返回地址我已经设置为:http://localhost/test/success.php

该网站未上线,我使用的是沙盒版本的贝宝。我做错了什么?

【问题讨论】:

  • 您使用了哪些 API?

标签: php web paypal


【解决方案1】:

您获得的对象是“付款” - 您需要使用付款人 ID 来执行。

https://developer.paypal.com/docs/api/quickstart/payments/

<?php
require __DIR__ . '/../bootstrap.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;

// Get payment object by passing paymentId
$paymentId = $_GET['paymentId'];
$payment = Payment::get($paymentId, $apiContext);
$payerId = $_GET['PayerID'];

// Execute payment with payer ID
$execution = new PaymentExecution();
$execution->setPayerId($payerId);

try {
  // Execute payment
  $result = $payment->execute($execution, $apiContext);
  var_dump($result);
} catch (PayPal\Exception\PayPalConnectionException $ex) {
  echo $ex->getCode();
  echo $ex->getData();
  die($ex);
} catch (Exception $ex) {
  die($ex);
}

【讨论】:

  • 我应该把那段代码放在哪里?成功.php?
  • 警告:需要(C:\xampp\htdocs\test/../bootstrap.php):无法打开流:C:\xampp\htdocs\test\success 中没有这样的文件或目录第 2 行的 .php 致命错误:require():在 C:\ xampp\htdocs\test\success.php 在第 2 行
  • 您目前在哪里处理数据?您使用的是什么 API?贝宝有几个。
  • @Feyton 您不能只是将示例代码 sn-ps 复制并粘贴到您当前的应用程序中,并期望它能够解决您的编码问题。那根本不是编程。您应该非常小心,错误的支付代码编码可能会产生非常负面的影响,如果集成错误,您或其他人可能会赔钱。
猜你喜欢
  • 2013-08-03
  • 1970-01-01
  • 2012-08-05
  • 1970-01-01
  • 2014-08-05
  • 2016-10-05
  • 2013-02-19
  • 2020-03-15
  • 2020-07-17
相关资源
最近更新 更多