我做了一个表格。当前,此表单执行以下操作:
- 客户填写表格(创建订单)
- 点击“提交”按钮
- 所有表单条目都输入到数据库中。
我想将其更改为执行以下操作:
- 客户填写表格
- 在表格的最后有一个文本框显示这个订单将花费他多少。
- 点击“提交”按钮(如果接受价格)
- 重定向到贝宝
- 如果付款成功 -> 所有表单条目都输入到数据库中。否则 -> 回显“交易失败”。
这是我到目前为止所做的:
“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”的值而变化。基本上我想在将订单写入数据库之前添加“使用 PayPal 支付”选项。PS 我已经注册了 paypal Sandbox 账户并添加了“买家”和“卖家”。
接下来我该怎么办?
编辑:好的,所以这是一个如何解决问题的小指南。这里有一些建议:
- 首先,下载paypal IPN监听器包装器:https ://github.com/Quixotix/PHP-PayPal-IPN
- 然后注册 SandBox 账户加 1 个买家和 1 个卖家账户
- 以卖家身份登录并创建一个表单(带有非托管按钮!)
- 将表单放入您的页面并通过“自定义”输入解析 ID 或任何其他必要信息(可以在此处找到一些有用的建议:http: //www.devshed.com/c/a/PHP/Creating-a-Paypal -IPN-System-in-PHP-Part-2/ )
- 现在在表单提交后重定向到这个页面
- 不要忘记在 paypal 卖家帐户中启用 IPN 并将 IPNlistener 链接输入到必要的地址字段中
- 提交一个贝宝表单并等待监听器的响应
- 完毕
整个过程是这样的:
- 客户填写表格
- 提交表单后 - 所有条目都写入数据库 + ID + 1 个称为“已付款”的附加字段,表示:1 - 如果客户为订单付款,0 - 如果没有
- 使用 header("Location: URL") 从 Form_Processing 重定向到 Paypal_Form
- 使用“会话”将订单 ID 写入会话或使用 POST 消息
- 提交 PaypalForm 并使用“自定义”字段作为我们订单 ID 的载体
- 设置侦听器以更新数据库,如下所示:如果事务成功 -> 将数据库列“已支付”更新为 1(完成)。使用“自定义”字段中的 ID 选择所需的订单,即:
$sql = "UPDATE paypal_test SET payed = '1' WHERE id = '".$_POST['custom']."'";
现在我们有一个包含已完成和未完成表格的数据库。另外,您可以编写一个逻辑来删除“旧”未完成的订单。出于这个原因,您可以创建名为“日期”的附加列,然后比较: if (current_date.days - old_date.days > 7) -> 从数据库中删除。就是这样!