切换到直播模式 - PayPal JS SDK

问题描述 投票:0回答:1

所以我的网站有一个结帐页面,我已经在沙盒模式下使用 PayPal JS SDK 一段时间来处理产品的测试付款,它工作正常它在捕获付款后单击表单提交所以我有信心想切换到实时模式,所以我在 Paypal 仪表板中切换到实时模式,现在 JS 似乎不再点击表单提交了。

实时模式客户端 ID/密钥是否需要与测试网相同或类似的东西?或者我为实时模式创建一个新的客户端 ID 可以吗?

更新:当我观看控制台时,我可以看到大约 1 秒钟的表单请求详细信息,PayPal 似乎刷新了我的结帐页面,我认为这可能会阻止我的表单完全提交(?)

我发现了类似的问题,但它们在 7 多年前就已经过时了。任何帮助将不胜感激,谢谢

这是我结账页面上的内容..

<!----------- Set up a container element for the button ----------->
            <div id="paypal-button-container"></div>

            <!-- Include the PayPal JavaScript SDK -->
            <script src="https://www.paypal.com/sdk/js?client-id=MY_CLIENT_ID&currency=GBP"></script>

            <script>
                // Render the PayPal button into #paypal-button-container
                paypal.Buttons({

                    //****************  SET UP TRANSACTION / CREATE ORDER  ****************//

                    createOrder: function(data, actions) {
                        return actions.order.create({
                            purchase_units: [{
                                amount: {
                                    value: '<?php echo number_format($totalprice['totPrice'], 2);?>'
                                }
                            }]
                        });
                    },

                    //************  FINALIZE TRANSACTION - APPROVE CUSTOMER HAS PAID  ************//

                    onApprove: function(data, actions) {
                        return actions.order.capture().then(function(orderData) {

                            // SUCCESSFUL CAPTURE! //

                            //*********************  NOW JS 'CLICKS' SUBMIT BUTTON ON CONFIRMATION FORM  **********************//

                            document.getElementById("cnfrmd").click();

                        });
                    }
                }).render('#paypal-button-container');
            </script>


<form method="POST" action="" id="paypalconf" name="paypalconf">
              <input type="hidden" value="<?php echo $_SESSION['sessionID'];?>" name="userID">
              <input type="hidden" value="PayPal" name="paytype">
              <input type="hidden" value="Confirmed" name="confirmation">
              <input type="hidden" value="Preparing.." name="ordprogress">

              <input type="hidden" value="<?php echo $subdetails['email'];?>" name="email">
              <input type="hidden" value="<?php echo $subdetails['first_name'];?>" name="first_name">
              <input type="hidden" value="<?php echo $subdetails['last_name'];?>" name="last_name">
              <input type="hidden" value="<?php echo $subdetails['product'];?>" name="product">
              <input type="hidden" value="<?php echo $subdetails['shipping'];?>" name="shipping">
              <input type="hidden" value="<?php echo $subdetails['quantity'];?>" name="quantity">
              <input type="hidden" value="<?php echo date("d/m/Y" ,strtotime($subdetails['date'])); ?>" name="date">
              <input type="hidden" value="<?php echo number_format($totalprice['totPrice'], 2); ?>" name="price">
              <input type="hidden" value="<?php echo $subdetails['prodimage'];?>" name="prodimage">
              <input type="hidden" value="<?php echo $subdetails['address_line1'];?>" name="address_line1">
              <?php if (empty($subdetails['address_line2'])):?>
                <input type="hidden" value="N/A" name="address_line2">
              <?php endif ?>
              <?php if (!empty($subdetails['address_line2'])):?>
                <input type="hidden" value="<?php echo $subdetails['address_line2'];?>" name="address_line2">
              <?php endif ?>
              <input type="hidden" value="<?php echo $subdetails['city'];?>" name="city">
              <input type="hidden" value="<?php echo $subdetails['county'];?>" name="county">
              <input type="hidden" value="<?php echo $subdetails['zip'];?>" name="zip">
              <input type="hidden" value="<?php echo $subdetails['country'];?>" name="country">

              <input style="display:none;" type="submit" value="cnfrmd" name="cnfrmd" id="cnfrmd">
            </form>

我希望我的表格在付款被捕获后提交,但看起来表格被某些 PayPal 刷新取消了

javascript php forms paypal paypal-rest-sdk
1个回答
0
投票
  1. 在您当前的代码中,唯一需要更改为实时模式的是
    MY_CLIENT_ID
    必须是实时客户端id
  2. actions.order.create(
    actions.order.capture(
    是已弃用的函数。有关使用后端集成(使用 v2/checkout/orders REST API)创建和捕获 PayPal 订单的示例,请参阅当前的 standard checkout integration guide。该指南中的示例后端代码使用 node.js,但它当然可以在任何语言/环境中实现,包括 PHP。
  3. 您问题中的代码在客户端付款批准后提交表单是一个糟糕的设计,并且会导致在没有通知您的服务器成功交易的情况下捕获付款的情况。当您使用
    body
    发布到您的服务器以创建或捕获订单时,更改您的集成以在创建或捕获路由中将表单数据作为 JSON
    fetch
    有效负载提交。任何客户端验证逻辑也可以存在于这些路由中,最有可能存在于创建路由中。如果您希望在表单未处于有效状态时禁用按钮,请参阅validate user input。这是您稍后可以担心的事情,一旦付款处理以稳健的方式工作(即后端订单创建和捕获更重要)
© www.soinside.com 2019 - 2024. All rights reserved.