【问题标题】:Submit PayPal form & Update Database at same time同时提交 PayPal 表格和更新数据库
【发布时间】:2011-11-10 09:25:18
【问题描述】:

如果我使用标准的 PayPal 表单进行付款,我是否也可以同时更新我的​​数据库,只需稍微更改代码以包含更新详细信息?

这是我想要使用的标准 PayPal 付款方式 - 将根据需要进行更改..

 <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="payPalForm">

 <input type="hidden" name="item_number" value="01 - General Payment to FreelanceSwitch.com">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="no_note" value="1">
 <input type="hidden" name="business" value="your@paypalaccount.com">
 <input type="hidden" name="currency_code" value="USD">
 <input type="hidden" name="return" value="http://freelanceswitch.com/payment-complete/">

 Item Details:<br /><input name="item_name" type="text" id="item_name"  size="45">
 <br /><br />
 Amount: <br /><input name="amount" type="text" id="amount" size="45">
 <br /><br />
 <input type="submit" name="Submit" value="Submit">

 </form>

这是我页面中的更新代码:

 $editFormAction = $_SERVER['PHP_SELF'];
 if (isset($_SERVER['QUERY_STRING'])) {
   $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
 }

 if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form")) {
   $updateSQL = sprintf("UPDATE db SET payment_page_completed=%s WHERE id=%s",
                   GetSQLValueString($_POST['payment_page_completed'], "text"),
                   GetSQLValueString($_POST['id'], "int"));

   mysql_select_db($database_connAdmin, $connAdmin);
   $Result1 = mysql_query($updateSQL, $connAdmin) or die(mysql_error());

   //$updateGoTo = "confirmation"; WILL NEED TO CHANGE AS NEEDS TO GO TO PAYPAL


   if (isset($_SERVER['QUERY_STRING'])) {
     $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
     $updateGoTo .= $_SERVER['QUERY_STRING'];
   }
   header(sprintf("Location: %s", $updateGoTo));
 }

这是我目前的表格

 <form action="<?php echo $editFormAction; ?>" name="form" class="" id="form" method="POST" enctype="multipart/form-data">
 <input type="hidden" name="id" value="<?php echo $_SESSION['id']; ?>" readonly="readonly">
 <input type="hidden" name="payment_page_completed" value="yes" readonly="readonly">
 </form>

谢谢

【问题讨论】:

    标签: php mysql paypal


    【解决方案1】:

    我有同样的问题,我所做的是做 Ajax 暂停我的提交并调用我的 insert.php。我的 insert.php 几乎可以保存到数据库。我已经在这里写了确切的步骤。 Save HTML form POST to database before redirecting to PayPal

    <script>
    
     $(function () {
    
            $('#senrollnow').on('submit', function (e) {
    
          var form = $(this);
    
          if(!form.hasClass('pending')) {
    
              e.preventDefault();
    
              form.addClass('pending');
    
              $.ajax({
    
                  type: 'post',
    
                  url: 'insert.php',
    
                  data: $('#senrollnow').serialize(),
    
                  success: function () {
    
                    form.submit();
    
                     alert('form was submitted'+data);
    
                  }
              });
          }
    });
    
      $('#freeform').on('submit', function (e) {
    
      //e.preventDefault(); //prevents the form to submit
    
              alert("Your request has been sent! Please check your email within 12 hours for my feedback. Thank you.");
    
            });
    
          });
    
    </script>
    

    【讨论】:

      【解决方案2】:

      是的,您可以通过两种方式将表单提交到两侧,在一个表单上提交两个,一个到 paypal,另一个到您可以将其保存在数据库中的页面。

      编辑 1:

      在您的表单中添加两个这样的提交:

      <input type="submit" name="submit" class="btns" id="submit1" value="Save in DB" onclick="changeWhere('http://yourwebsite.com/savedata.php');" >
      
      <input type="submit" name="submit" class="btns" id="submit2" value="Move to PayPal"
      onclick="changeWhere('https://www.paypal.com/cgi-bin/webscr');" disabled="true">
      

      并在您的脚本中添加以下内容:

      <script type="text/javascript">
      
      function changeWhere(place){
      
          document.form.action=place;   //use your forms name inplace of form
      
      }
      
      </script>
      

      编辑 2:

      对两个表单操作使用单个提交

      将此添加到您的表单中:

      <input type="button" value="Submit" onclick="submitTwice(this.form)">
      

      并在脚本中添加:

      <script type="text/javascript">
       function submitTwice(form){
       form.action = 'https://www.paypal.com/cgi-bin/webscr';
       form.submit();
       form.action = 'savedata.php';
       form.submit();
      }
      </script>
      

      它对我有用。 :-)

      编辑 3:

      savedata.php 可能包含类似的代码;

      <?php
      $item_name   = $_POST['item_name'];
      $item_price  = $_POST['item_price'];
      $item_number = $_POST['item_number'];
      
      $sql="Insert into sales (name, price, number) values ('$item_name', '$item_price', '$item_number')";
      $result=mysql_query($sql);
      ?>
      

      希望这会有所帮助。

      【讨论】:

      • 谢谢... savedata.php 怎么样?我需要那个吗?它看起来像/包含什么?
      • savedata.php 将包含 php 脚本,用于将您想要的数据保存到数据库中。例如,您可以使用它将商品名称、数量和价格保存到数据库中。
      • 好的,看看 savedata.php 位和数据库更新有问题。你能告诉我你的savedata.php,这样我就可以看看你是怎么做的???谢谢
      【解决方案3】:

      here 提出了一个相同的问题,应该会为您提供所需的答案。如果您需要澄清,请发表评论。

      引用这个答案,它涉及向您的 PHP 提交数据,然后使用套接字请求将该数据发送到 PayPal:

      function post($host, $path, $data) { 
      $http_response = ''; 
      $content_length = strlen($data); 
      $fp = fsockopen($host, 80); 
      fputs($fp, "POST $path HTTP/1.1\r\n"); 
      fputs($fp, "Host: $host\r\n"); 
      fputs($fp, "Content-Type: application/x-www-form-urlencoded\r\n"); 
      fputs($fp, "Content-Length: $content_length\r\n"); 
      fputs($fp, "Connection: close\r\n\r\n"); 
      fputs($fp, $data); 
      while (!feof($fp)) $http_response .= fgets($fp, 28); 
      fclose($fp); 
      return $http_response; 
      }
      $postdata = '?foo=bar'; 
      foreach($_POST as $key => $val) $postdata .= '&'.$key.'='.$val;
      

      重要说明:我从我链接的线程中复制了该代码,因此请查看它以获取更多信息。此外,这将提交给您的 PHP。如果您希望用户实际查看 PayPal 页面,您需要将用户重定向到该 POST 请求。

      此外,您似乎可以从使用 PayPal 的即时付款通知功能中受益。这实质上是回调您选择的包含所有付款信息的 URL。我发现this tutorial 对学习如何在 PHP 中执行此操作非常有帮助。

      【讨论】:

      • 要补充这一点,我会使用贝宝的回调功能。你真的想在交易失败的情况下保存数据吗?提交数据,如果通过Paypal成功,则将数据保存到您的数据库。
      • 我非常同意@luckytaxi。您可能希望实施您所询问的方法的唯一时间是您是否要保存有关订单的信息,无论它们是否已被取消。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多