卡住了 Paypal Express Checkout 的集成(基本集成 checkout.js 版本 4.0.0)

Posted

技术标签:

【中文标题】卡住了 Paypal Express Checkout 的集成(基本集成 checkout.js 版本 4.0.0)【英文标题】:Stuck with integration of Paypal Express Checkout ( Basic integration checkout.js version 4.0.0) 【发布时间】:2017-05-31 05:37:45 【问题描述】:

我正在尝试将 Paypal Express Checkout 集成到简单的购物车中。有不同的方法可以做到这一点。 Paypal 建议在基本或高级集成和 checkout.js 4.0 版(使用 REST API)之间进行选择。到目前为止,一切都很好。 我在我的 Paypal 帐户中创建了 Paypal 应用程序以获取凭据并开始测试它。 测试没问题,但是这里有一些误解。 Checkout.js 通过 REST API(连同我的凭据)将金额 ( 1.00 ) 和货币 ( EUR ) 发送到 Paypal 服务器。如果付款完成,则触发回调函数 onAuthorize,并且有两个带有响应的参数(数据和操作)。好吧,这里我调用我自己的AJAX函数来在我的数据库中写入事务响应数据。但是......我在这里只有支付交易的PaymentID和PayerID?!如果我想稍后搜索到 paypal.com 的 Web 界面 - 没有 PaymentID 这样的东西。只有TransactionID ???如何在 onAutorize 回调函数的响应中获取其他交易详情?如何在此处获取 TransactionID 以记录在我的数据库中?可能在这里我必须调用 Paypal API,还是必须实现 Paypal IPN(即时付款通知)?但是如果我没有 TransactionID,如何调用 IPN API :)

<div style="width: 906px; text-align: right; height: 100px; 
     margin-top: 50px;">
<div id="paypal-button"></div> 
</div>

<script src="https://www.paypalobjects.com/api/checkout.js"></script>

<script>
    paypal.Button.render(

        env: 'production', // Optional: specify 'sandbox' environment

        style: 
            size: 'medium',
            shape: 'rect'
        ,

        client: 
            sandbox:    'xxx-my-credentials-xxx',
            production: 'xxx-my-credentials-xxx'
        ,

        payment: function() 

            var env    = this.props.env;
            var client = this.props.client;

            return paypal.rest.payment.create(env, client, 
                transactions: [
                    
                        amount:  total: '1.00', currency: 'EUR' 
                    
                ]
            );
        ,

        commit: true, // Optional: show a 'Pay Now' button in the checkout flow

        onAuthorize: function(data, actions) 

            // Optional: display a confirmation page here   
            var EXECUTE_PAYMENT_URL = 'payment-process.php'; 

paypal.request.post(EXECUTE_PAYMENT_URL,  paymentID: data.paymentID, payerID: data.payerID, transactionID: data.transactionID, data: data ) .then(function(data)  ) .catch(function(err)  ); 


            return actions.payment.execute().then(function() 
                // Show a success page to the buyer
            );
        

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

【问题讨论】:

【参考方案1】:

要从事务中读取信息,您需要调用并将数据 JSON 保存在数据库中

    return actions.payment.execute().then(function() 
                actions.payment.get().then(function(data) 
                 if(data.state === 'approved')
                   console.log(data);  
                   var transactionId = data.id;
                   alert("Transaction ID: "+ transactionId + " \n State: " +data.state);
                 else
                  console.log(data);
                 
               );
          );

【讨论】:

但是 data.id 是交易还是支付 id ?我发现这些是不同的 data.id 是交易ID。 data.state还是data.status 它是 data.state。它的付款状态。

以上是关于卡住了 Paypal Express Checkout 的集成(基本集成 checkout.js 版本 4.0.0)的主要内容,如果未能解决你的问题,请参考以下文章