我一直在沙箱模式下一直在试用PayPal IPN侦听器,试图调整我自己使用的示例代码。我对我得到的结果感到困惑 - 如果为发送到侦听器脚本的每个IPN插入6行数据,MySQL查询将在底部运行。我已经改变了查询,并重现了一个典型的数据库插入来说明我的观点 - 请参阅代码下方的表格。有任何想法吗?我确信我还记得以前发生过的其他一些API,但确定它会是造成它的根本原因。一旦我可以验证表单正在工作,我当然会将数据正确地转义出来。Paypal IPN监听器页面多次插入MySQL数据
<?php
$dbc = mysqli_connect ('host', 'user', 'pass', 'db');
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if ((stristr ($res, "VERIFIED") == 0) &&
($_POST['payment_status'] == 'Completed'))
{
// PAYMENT VALIDATED & VERIFIED!
$email = $_POST['payer_email'];
$next = mysqli_query($dbc, "INSERT INTO users (email, password) VALUES('$email', NOW()) ");
$to = $email;
$subject = 'Download Area | Login credentials';
$message = '
Thank you for your purchase
Your account information
-------------------------
Email: '.$email.'
Password:
-------------------------
You can now login at http://yourwebsite.com/PayPal/';
$headers = 'From:[email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
}
我从一个IPN得到的数据如下:
+----+-------------------+---------------------+
| id | email | password |
+----+-------------------+---------------------+
| 25 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 26 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 27 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 28 | [email protected] | 2013-07-03 17:15:58 |
+----+-------------------+---------------------+
| 29 | [email protected] | 2013-07-03 17:15:59 |
+----+-------------------+---------------------+
| 30 | [email protected] | 2013-07-03 17:15:59 |
+----+-------------------+---------------------+
为什么被插入数据多次为此IPN?
谢谢@Andrew Angell我会试试看,并在这里报告 – Welly
即使你返回200,你也可以获得重复。你必须自己检查重复。 – EJP