卡住了 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)的主要内容,如果未能解决你的问题,请参考以下文章

贝宝账单协议 ID 不来

paypal express checkout set paypal费用另加

Magento Paypal Express 按钮不显示

Paypal Express Checkout 窗口不断加载

Magento Paypal Express 附加信息字段

Paypal Express Checkout / React - 发送产品信息