所以我已经将这段未经测试的代码添加到我的IPN
if (strcmp ($res, "VERIFIED") == 0) {
// check whether the payment_status is Completed
// check that txn_id has not been previously processed
// check that receiver_email is your PayPal email
// check that payment_amount/payment_currency are correct
// process payment and mark item as paid.
// assign posted variables to local variables
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
include 'connect.php';
if($payment_status == "completed")
{
mysql_query('UPDATE `users` SET `is_member`= 1 WHERE `username` == $username')
}
else
{
mysql_query('UPDATE `users` SET `is_member`= 0 WHERE `username` == $username')
}
实质上改变了依赖于payment_status的数据。我的问题是paypal不知道用户名是什么。我该如何向paypal提供这些信息?我是通过订阅按钮还是修改html代码?
这里有几个选项可以完成您与IPN的用户/会员对账,
- 在结帐时将"username"/"email"存储到您的数据库中,当付款完成时,从IPN POST-back读取
$payer_email
并使数据与您的数据库条目(订单详细信息)相匹配
虽然这需要对代码进行最少的更改,但当用户使用不同的电子邮件帐户(PayPal帐户)支付
时,它将无法工作。- (推荐)使用"invoice"参数唯一标识要对账的订单。生成一个唯一的发票ID,并将其与用户名/电子邮件一起存储到结帐时的数据库;将"发票"标签传递给PayPal, IPN将在付款完成时返回相同的标签;获取
$invoice
值并将其与您的订单数据条目进行映射。
这里有一些详细的参考:
IPN变量
查看如何添加"invoice"字段:
标准支付按钮,参见HTML变量为PayPal支付标准
关于ExpressCheckout API,请参见SetExpressCheckout API Operation (NVP)