【发布时间】:2020-05-05 14:45:10
【问题描述】:
在收到 PayPal IPN 后,我正在尝试一个简单的侦听器来更新我的用户信息数据库(例如将他们的帐户类型从免费设置为高级)。检查 IPN 历史记录后,IPN 已成功发送到我的侦听器,但似乎无法更新我的数据库。我想在 VERIFIED 部分使用我的用户正在使用的 SESSION ID 更新用户的帐户类型。我使用的 listener.php 来自我关注的教程视频。
代码如下:
session_start();
require 'scr/db.inc.php';
header('HTTP:/1.1 200 OK');
$resp = "cmd=_notify-validate";
foreach ($_POST as $parm => $var) {
$var = urlencode (stripslashes($var));
$resp .= "&$parm=$var";
}
$item_name = $_POST['item_name'];
$item_number = $_POST['$item_number'];
$payment_status = $_POST['$payment_status'];
$payment_amount = $_POST['$payment_amount'];
$payment_currency = $_POST['$payment_currency'];
$txn_id = $_POST['$txn_id'];
$receiver_email = $_POST['$receiver_email'];
$payer_email = $_POST['$payer_email'];
$record_id = $_POST['$record_id'];
$httphead = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$httphead .= "Content-Type: application/x-www-form-urlencoded\r\n";
$httphead .= "Content-Length: " .strlen($resp) . "\r\n\r\n";
$errno = '';
$errstr = '';
$fh = fsockopen ('ssl:www.paypal.com',443,$errno,$errstr,30);
if (!$fh) {
} else {
fputs ($fh, $httphead . $resp);
while (!feof($fh)) {
$readresp = fgets ($fh, 1024);
if(strcmp ($readresp, "VERIFIED") == 0 ) {
$handler = new Dbh();
$sql = 'UPDATE `users` SET `type` = "PREMIUM" WHERE `id` = :id ';
$query = $handler->connect()->prepare($sql);
$query->execute(array(':id'=>$_SESSION['log_id']));
} else if (strcmp ($readresp, "INVALID") == 0) {
}
}
fclose($fh);
}
?>
我只是在其中添加了几行以希望更新数据库。这些是那些行:
session start();
require 'scr/db.inc.php';
.
.
.
.
$handler = new Dbh(); // used to connect to database
$sql = 'UPDATE `users` SET `type` = "PREMIUM" WHERE `id` = :id ';
$query = $handler->connect()->prepare($sql);
$query->execute(array(':id'=>$_SESSION['log_id']));
.
.
.
.
【问题讨论】:
-
什么是
$Dbh变量? -
@GiacomoM Dbh 是我使用处理程序调用的类以连接到我的数据库
-
由于您无法更新数据库,因此问题可能就在那里。编辑您的问题以添加信息,否则我们无法帮助您