我已成功设置Paypal按钮,可以从我的IPN代码接收电子邮件。但是,我不知道如何知道哪个用户实际付款。我怀疑的是,用户使用的电子邮件地址可能与用于从我的服务注册的电子邮件地址不同。我试图从$_SESSION
获取用户名,但它返回空字符串。这是我的代码:
if (strcmp ($res, "VERIFIED") == 0) {
$txn_id = $_POST['txn_id'];
$payment_amount = $_POST['mc_gross'];
$payment_status = $_POST['payment_status'];
$payment_time = date("Y-m-d H:i:s");
$username = $_SESSION['user'];
$body = $txn_id.' '.$payment_amount.' '.$payment_status.' '.$payment_time.' '.$username;
mail("Email Address", 'Subject', $body, '');
$connection = new mysqli('localhost', 'user', 'password', 'db');
$query = $connection->query("UPDATE members SET TRANSID = '$txn_id', PAYAMOUNT = '$payment_amount', PAYSTATUS = '$payment_status', PAYTIME = '$payment_time' WHERE USERNAME ='$username'");
mysqli_close($connection);
我还在session_start();
的开头添加了ipn.php
。我该怎么做才能为正确的用户更新数据。
更新
我正在使用Paypal IPN系统。用户可以在升级页面上使用Paypal付款。然后Paypal发送给我关于ipn.php的交易细节。现在,我在ipn.php中编写代码来更新MySQL表。
更新两次
根据steammike的建议,这就是我所拥有的。
现在我的代码看起来像这样:
$txn_id = $_POST['txn_id'];
$payment_amount = $_POST['mc_gross'];
$payment_status = $_POST['payment_status'];
$payment_time = date("Y-m-d H:i:s");
$username = $_POST['fuser'];
和我的按钮是这样的:
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="ATXN4EP7FQXR8">
<input type="hidden" name="fuser" value="<?php echo $_SESSION['user'];?>">
<input type="submit" name="submit" value="Pay With Paypal" class="btn btn-primary">
</form>
$username
变量仍为空白。
更新3
在按钮中将fuser
更改为custom
之后,我仍然无法更新表格,如下所示:
<input type="hidden" name="custom" value="<?php echo $_SESSION['user'];?>">
并形成如下:
$username = $_POST["custom"];
唯一需要更新的是&#39; PAYTIME&#39;。虽然在电子邮件中我收到了所有数据。这是表的结构:
TRANSID varchar(20)
PAYAMOUNT decimal(7,2)
PAYSTATUS varchar(25)
PAYTIME datetime