PayPal智能支付按钮与服务器端REST API集成

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PayPal智能支付按钮与服务器端REST API集成相关的知识,希望对你有一定的参考价值。

我知道有一些关于PayPal集成的问题,但我试图用智能按钮和REST API实现PayPal快速结账,但没有成功。

我想做的是

  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 PayPalRestApiContext(
        new PayPalAuthOAuthTokenCredential(
            'client id',     // ClientID
            'cliente secret'      // ClientSecret
        )
);

// After Step 2
$payer = new PayPalApiPayer();
$payer->setPaymentMethod('paypal');

$amount = new PayPalApiAmount();
$amount->setTotal('1.00');
$amount->setCurrency('USD');

$transaction = new PayPalApiTransaction();
$transaction->setAmount($amount);

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

$payment = new PayPalApiPayment();
$payment->setIntent('sale')
    ->setPayer($payer)
    ->setTransactions(array($transaction))
    ->setRedirectUrls($redirectUrls);


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

    echo "

Redirect user to approval_url: " . $payment->getApprovalLink() . "
";
      echo $data= json_encode($payment->id, JSON_PRETTY_PRINT), "
";
    echo "</br>";echo "</br>";
    echo $data= $payment->id;
}
catch (PayPalExceptionPayPalConnectionException $ex) {
    // This will print the detailed information on the exception.
    //REALLY HELPFUL FOR DEBUGGING
    echo json_encode($ex->getData()->id, JSON_PRETTY_PRINT), "
";
    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. 付款完成后重定向用户。

答案

你正在寻找这个前端。https:/developer.paypal.comdemocheckout#patternserver。

对于您的后台,您应该使用最新的v2orders SDK。https:/github.compaypalCheckout-PHP-SDK。

(您的v1payments后台可以工作,但该SDK已被废弃,没有理由将其用于新的集成)

以上是关于PayPal智能支付按钮与服务器端REST API集成的主要内容,如果未能解决你的问题,请参考以下文章

Paypal Rest API 支付验证服务器端

C# REST PayPal API - 如何传递自定义变量?

PayPal 智能支付按钮 - 请求数量

PayPal 智能按钮和 REST Checkout SDK - SyntaxError:JSON 输入意外结束或期望传递订单 ID

PayPal Checkout 与智能支付按钮的集成

Woocommerce Paypal REST api 与 React JS 的集成