【问题标题】:PayPal Smart Payment Buttons integration with server-side REST APIPayPal 智能支付按钮与服务器端 REST API 集成
【发布时间】:2020-08-05 18:32:57
【问题描述】:

我知道有一些关于 PayPal 集成的问题,但我正在尝试使用智能按钮和 REST API 实施 PayPal Express Checkout,但没有成功。

我想做的是:

  1. 创建支付授权(使用payidorderid

  2. 将此payid 发送给客户端(javascript)以进行批准。

  3. 付款后重定向到确认页面。

我已经使用以下代码创建了付款授权:

<?php

// 1. Autoload the SDK Package. This will include all the files and classes to your autoloader
// Used for composer based installation
require __DIR__  . '/PayPal-PHP-SDK/autoload.php';
// Use below for direct download installation
// require __DIR__  . '/PayPal-PHP-SDK/autoload.php';


// After Step 1
$apiContext = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential(
            'client id',     // ClientID
            'cliente secret'      // ClientSecret
        )
);

// After Step 2
$payer = new \PayPal\Api\Payer();
$payer->setPaymentMethod('paypal');

$amount = new \PayPal\Api\Amount();
$amount->setTotal('1.00');
$amount->setCurrency('USD');

$transaction = new \PayPal\Api\Transaction();
$transaction->setAmount($amount);

$redirectUrls = new \PayPal\Api\RedirectUrls();
$redirectUrls->setReturnUrl("https://example.com/your_redirect_url.html")
    ->setCancelUrl("https://example.com/your_cancel_url.html");

$payment = new \PayPal\Api\Payment();
$payment->setIntent('sale')
    ->setPayer($payer)
    ->setTransactions(array($transaction))
    ->setRedirectUrls($redirectUrls);


    // After Step 3
try {
    $payment->create($apiContext);
    echo $payment;

    echo "\n\nRedirect user to approval_url: " . $payment->getApprovalLink() . "\n";
      echo $data= json_encode($payment->id, JSON_PRETTY_PRINT), "\n";
    echo "</br>";echo "</br>";
    echo $data= $payment->id;
}
catch (\PayPal\Exception\PayPalConnectionException $ex) {
    // This will print the detailed information on the exception.
    //REALLY HELPFUL FOR DEBUGGING
    echo json_encode($ex->getData()->id, JSON_PRETTY_PRINT), "\n";
    echo "</br>";echo "</br>";
    echo $ex->getData()->id;
}
?>

我的设置如下(如有错误请指正):

  1. 用户选择项目并提交表单。

  2. 用户被重定向到带有新表单的新页面,然后用他的姓名和其他个人信息填写表单,然后提交表单以保存在数据库中并生成付款授权。

  3. 应使用智能按钮将用户重定向到最终页面以完成付款。

  4. 用户应该被重定向到一个确认页面,确认他的付款已经成功。

问题是我被困在第 2 步,因为一旦我生成付款授权,我不知道如何在这个应该的新页面中将此 id(和其他必需参数)传递给客户端显示智能支付按钮以完成交易。

我正在按照 PayPal 文档中的教程进行操作,但我无法理解。

JavaScript 调用我的服务器以获取payid,它可以工作,但它会生成一个新的payid 和一个新的付款订单,我想使用之前在用户提交表单时创建的那个然后,不知何故,通过智能按钮将其传递到最终页面以完成交易并重定向到确认页面。

我的 Javascript:

<script>
   paypal.Button.render({  
      onApprove: function(data) {
      return fetch('/my-server/get-paypal-transaction', {
        headers: {
          'content-type': 'application/json'
        },
        body: JSON.stringify({
          orderID: data.orderID
        })
      }).then(function(res) {
        return res.json();
      }).then(function(details) {
        alert('Transaction approved by ' + details.payer_given_name);

    }, '#paypal-button');
</script>

问题是它生成了一个新的orderID,一个新的事务,我想检索用户在步骤2中提交表单时生成的事务,但我不知道该怎么做。

最终我需要的是:

  1. 获取付款授权并将其传递给客户端(带有按钮的最后一页)

  2. 支付完成后重定向用户。

【问题讨论】:

  • 如果您正在寻找 ASP.NET 中 PayPal 结账的最新解决方案(使用 Orders v2 REST API 和 PayPal JavaScript SDK,服务器端集成),请查看演示 >>>> techtolia.com/PayPal
  • paypal 的文档一团糟。他们引用存档的 git,而不是参考答案中概述的 git 和代码集。一个彻头彻尾的骗局,.

标签: rest api paypal integration


【解决方案1】:

您正在寻找这个前端:https://developer.paypal.com/demo/checkout/#/pattern/server

对于您的后端,您应该使用最新的 v2/orders SDK:https://github.com/paypal/Checkout-PHP-SDK

(您的 v1/payments 后端可以工作,但该 SDK 已弃用,没有理由将其用于新的集成)

【讨论】:

  • 非常感谢您的回答。我对此表示怀疑……但我想和你澄清一些事情。假设我使用这个旧版本,我应该如何获得用户在提交表单时先前生成的payid,因为 javascript 会调用请求新的付款授权?因为这样做的正确方法是: 1. 向数据库中插入数据。 2.生成订单。 3:用payid将用户重定向到支付页面,对吧?如果是这样,是否应该通过 URL 参数将payid 传递到最终(付款)页面来完成?我正在努力解决
  • createOrder 中的 javascript 应该获取您希望用户批准的任何 PAYID/OrderID
猜你喜欢
  • 2020-03-01
  • 2021-01-28
  • 2013-04-13
  • 2016-01-17
  • 2021-07-14
  • 2020-03-23
  • 2020-11-29
  • 2020-11-11
  • 2019-11-16
相关资源
最近更新 更多