首页 > 解决方案 > 如何在不干扰 PayPal 智能按钮的情况下向服务器发送表单

问题描述

我正在尝试在 PayPal 付款处理获得批准后发送订单确认电子邮件。我认为问题在于,当我提交表单时,页面会刷新,而当 PayPal 付款被批准时,它也会刷新页面。PHP 代码可以很好地满足我目前的需要,PayPal 智能按钮也是如此,主要问题是它们只能单独工作,我需要两者都执行。我一直在寻找一段时间,并没有找到解决这个问题的具体方法,但也许我只是没有看到它们。

我曾想过使用 AJAX 来提交我的表单而无需刷新,但我承认我对这类东西还很陌生,而且我添加的代码似乎并没有太大的不同。

  onApprove: function (data, actions) {

    // Get the order details
    return actions.order.get().then(function (orderDetails) {

            
            $(function () {

            $( "#ppCheckoutForm" ).on('submit', function (event) {

            event.preventDefault();

            $.ajax({
            url: '/OrderConfirmation.php',
            type: 'post',
            data: $('#ppCheckoutForm').serialize(),
            success: function () {
              alert('Form was submitted');
            }
          });

        });

      });
      
            document.getElementById("ppCheckoutForm").submit();

            
      document.querySelector('#confirm-button')
        .addEventListener('click', function () {


          return actions.order.capture().then(function () {

标签: phppaypal

解决方案


关于上面的代码,在 onApprove 中,您应该立即运行ajax 函数,而不是将事件处理程序绑定到提交按钮。

如果您要将这样的事件处理程序绑定到提交按钮(不同的、单独的解决方案,这不是您所需要的),那么该按钮将需要一些东西来防止其默认的重定向操作。


最好的解决方案是在 ajax/fetch 调用中提交所有数据,并让此操作本身触发服务器端的捕获。

以下是用于审批流程的 JavaScript 代码:https ://developer.paypal.com/demo/checkout/#/pattern/server

您的服务器上需要两条路由,一条用于“设置事务”,一条用于“捕获事务”,记录在此处。

当您的 JavaScript 执行“捕获事务”时,您将发送表单数据以及要捕获的 orderId,并且当且仅当它能够成功捕获时,您的服务器应该将该表单数据保留在您的数据库中(通过 API)。


推荐阅读