我已经为网站设置了自动捐赠功能,但是当PayPal验证IPN时,数据没有写入数据库。 IPN日志写入webhost,它表示付款已经过验证,但没有数据写入数据库。
这是处理ipn的小片段
if ($p->validate_ipn()) {
$fh = fopen(".ipn", "a");
fwrite($fh, print_r($p->ipn_data, true));
fclose($fh);
if($p->ipn_data["payment_status"] != "Completed") die();
if($p->ipn_data["mc_gross"] > 0) {
$user = $p->ipn_data["custom"];
$date = $p->ipn_data["payment_date"];
$prodid = $p->ipn_data["item_number"];
$amount = $p->ipn_data["mc_gross"];
$amountTickets = 1;
//$user = str_replace("-", "_", $user);
//$user = str_replace(" ", "_", $user);
$user = str_replace("-", " ", $user);
$user = str_replace("_", " ", $user);
$user = mysql_real_escape_string($user);
$conn = mysql_connect("localhost", "USERNAME", "PASSWORD");
mysql_select_db('web_donations', $conn);
mysql_query("INSERT INTO donation (username, time, productid, price, tickets) VALUES ('" . $user . "', '" . $date . "', '" . $prodid . "', " . $amount . ", " . $amountTickets . ");");
$fh = fopen(".ipnerr", "a");
fwrite($fh, mysql_error());
fclose($fh);
mysql_close($conn);
}
}
我没有收到任何错误。只是数据没有写入数据库,其他所有内容都在日志中验证。
编辑:我已经解决了这个问题,问题是:
if($p->ipn_data["payment_status"] != "Completed") die();
付款是待定的,这意味着它永远不会通过这个阶段
答案 0 :(得分:1)
为了实现这一点,你有一些事情要做,有些与PHP编程无关,因此,我不会发布源代码。您在手动调用时对它的评论表明culplrit是SSL证书。
去过那里!做到了!
1.-确保您的网站安装了SSL证书。 PayPal要求网站能够支持HTTPS而不仅仅是HTTP,它会通过HTTPS发送付款通知。
2.-如果您使用的是已保存的按钮请确保该按钮指向正确的HTTPS通知URL。
3.-您无法将error_reporting()的错误读取为sugested,因为这是PayPal与您的网站之间的交易。你唯一能做的就是保存某个地方(例如一个文件)a" flag"看看PayPal是否调用了URL,除非你执行第1步和第2步,否则不会这样做。
如果我记得,我会添加更多积分,现在检查一下。 :)