使用php成功完成paypal钱交易后提交表格

时间:2012-08-06 12:36:11

标签: php mysql forms transactions paypal

我做了一个表格。目前,此表单执行以下操作:

  1. 客户填写表格(创建订单)
  2. 点击“提交”按钮
  3. 将所有表单条目输入数据库。
  4. 我想将其更改为执行以下操作:

    1. 客户填写表格
    2. 在表单的最后有一个文本框,显示这个订单将花费他很多。
    3. 点击“提交”按钮(如果接受价格)
    4. 重定向到paypal
    5. 如果付款成功 - >所有表单条目都输入到数据库中。否则 - > echo“交易失败”。
    6. 这是我到目前为止所做的:

      “form.php”内容

      <html><head><title>Title</title></head><body>
      <form action="php-form-processor.php" method="post">
          <table border="0" cellspacing="5" width = "500">
              <tr>
                  <td align="right" width="160">Choose an Item:</td>
                  <td align="left">
                  <select name="formItem" value="<?=$varItem;?>" class="input_full" >
                      <option value="1">Cheese</option>
                  </select>
                  </td>
              </tr>
              <tr bgcolor="#D0E8F5">
                  <td align="right" >Item count:</td>
                  <td align="left">
                      <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>"  class="input_full" />
                  </td>
              </tr>
          </table>
          <p align="center">
          <input type="submit" name="formSubmit" align = "center" value="Submit" />
          </p>
      </form></body></html>
      

      “php-form-processor.php”内容

      <?php
      if($_POST['formSubmit'] == "Submit")
      {
          $varItem = $_POST['formItem'];
          $varItemCount = $_POST['formItemCount'];
      
          //database stuff
          $username = "...";
          $password = "...";
          $hostname = "..."; 
       // connect and add to the database varItem and varItemCount
          mysql_query($sql);
          mysql_close($dbhandle);
      }
      ?>
      

      表单更大但我简化了stackoverflow的版本。订单的价格必须根据“varItem”和“varItemCount”值更改。基本上我想在将订单写入数据库之前添加“Pay with PayPal”选项。 附:我已经注册了paypal Sandbox帐户,并添加了“买方”和“卖方”。

      接下来该怎么做?

      编辑:好的,所以这里有一个小指南如何解决问题。以下是一些建议:

      • 首先,下载paypal IPN监听器包装器:https://github.com/Quixotix/PHP-PayPal-IPN
      • 然后注册SandBox帐户加1买家和1卖家acc
      • 以卖家身份登录并创建表单(使用非托管按钮!)
      • 将表单放入您的页面并通过“自定义”输入解析ID或任何其他必要信息(可在此处找到一些有用的建议:http://www.devshed.com/c/a/PHP/Creating-a-Paypal-IPN-System-in-PHP-Part-Two/
      • 现在在表单提交后重定向到此页面
      • 不要忘记在paypal卖家帐户启用IPN并输入IPNlistener链接到必要的地址栏
      • 提交paypal表格并等待听众的回复
      • 完成

      整个过程看起来像这样:

      1. 客户填写表格
      2. 提交表格后 - 所有条目都写入数据库+ ID + 1附加字段“payed”,表示:1 - 如果客户支付订单而0 - 如果不是
      3. 使用标题(“位置:网址”)从Form_Processing重定向到Paypal_Form
      4. 使用“会话”将订单ID写入会话或使用POST消息
      5. 提交PaypalForm并使用“自定义”字段作为我们的订单ID的载体
      6. 设置侦听器以更新数据库,如下所示:如果事务成功 - >将数据库列“付费”更新为1(完成)。使用“自定义”字段中的ID来选择所需的顺序,即:。
      7. $ sql =“UPDATE paypal_test SET payed ='1'WHERES id ='”。$ _ POST ['custom']。“'”;

        现在我们有一个包含已完成和未完成表单的数据库。另外,你可以写一个逻辑,删除“旧的”未完成的订单。因此,您可以创建名为“date”的其他列,然后比较:if(current_date.days - old_date.days&gt; 7) - &gt;从DB中删除。就是这样!

3 个答案:

答案 0 :(得分:2)

嗯,你几乎已经描述了你需要做什么:

  • 1st:制作一个onChange javascript,总结价值并将其发布到你想要的地方;
  • 第二:提交后对值进行php检查(确保检查注入问题);
  • 3rd:重定向到paypal并等待答案;
  • 第4名:根据paypals回答结果反映出来;

PS:我希望你不是在等人为你重写整个剧本;)

答案 1 :(得分:1)

我不接受PayPal回复给你的内容,这是检查用户身份验证的一种草率方式,并希望用户点击“返回网站”按钮。而是使用IPN(https://www.paypal.com/ipn/)并确保将回复发回PayPal进行验证。

从PayPal查看此PHP示例:https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

答案 2 :(得分:0)

参加聚会太晚了....但在 2021 年试试这个..

如果您想将自定义表单与贝宝智能支付按钮 (https://developer.paypal.com/docs/checkout/) 结合使用,那么您可以尝试这种方法。这对我有用,而且您也不需要 IPN(以下方法是最新的且速度更快)。

在您的前端使用这个(有了这个,您可以将表单数据发送到您的服务器):
https://developer.paypal.com/demo/checkout/#/pattern/server

在你的后端使用这个(我把创建和捕获代码放在一个文件中):
创建订单:
https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/
捕获订单:
https://developer.paypal.com/docs/checkout/reference/server-integration/capture-transaction/
设置:
https://developer.paypal.com/docs/checkout/reference/server-integration/setup-sdk/

现在您可以在贝宝批准订单后将表单数据写入您的数据库。

这里给出了类似的答案
How to submit data for the address and payment details after PayPal payment is made