坚持Paypal Express Checkout的集成(基本集成checkout.js版本4.0.0)

时间:2017-01-16 11:31:05

标签: paypal express-checkout

我正在尝试将Paypal Express Checkout集成到简单的购物车中。有不同的方法可以做到这一点。 Paypal建议在基本或高级集成和checkout.js 4.0版(使用REST API)之间进行选择。到现在为止还挺好。 我在Paypal帐户中创建了Paypal App以获取凭据并开始测试。 测试没问题,但这里有一些误解。 Checkout.js通过REST API(以及我的凭据)将金额(1.00)和货币(EUR)发送到Paypal服务器。如果付款完成,则会触发回调函数onAuthorize,并且有两个带响应的参数(数据和操作)。好吧,我在这里调用自己的AJAX函数在我的数据库中编写事务响应数据。但是......我这里只收到付款交易的PaymentID和PayerID?!!如果我想稍后搜索到paypal.com的网络界面 - 没有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 个答案:

答案 0 :(得分:2)

要从您需要调用的事务中读取信息并在数据库中保存数据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);
                 }
               });
          });