我第一次在其中一个项目中实现了IPN处理程序(copt从代码项目粘贴它)。
用户的问题可以通过某个电子邮件地址注册到我的网站,然后付款时可以使用一些不同的电子邮件地址
IPN处理程序请求变量给出了它支付的电子邮件地址。我应该如何找出哪个用户已付款。
if (strResponse == "VERIFIED")
{
//check the payment_status is Completed
//check that txn_id has not been previously processed
//check that receiver_email is your Primary PayPal email
//check that payment_amount/payment_currency are correct
//process payment
string payerEmail = Request.Form["payer_email"];
string paymentStatus = Request.Form["payment_status"];
string receiverEmail = Request.Form["receiver_email"];
string amount = Request.Form["mc_gross"];
}
解决方案:
传递一些addiditonal可能是付款处理页面中的用户ID,并假设它将在IPN处理程序中返回。
或者要求用户在付款前输入paypal电子邮件地址。 (感觉不太好)
赞赏这方面的任何帮助
答案 0 :(得分:3)
我通常在购物车信息中发布一个自定义字段,用于标识我的本地交易或本地购物车。 IPN会将该自定义字段发回给您,以便您可以将交易与您的用户进行匹配。或者您可以传递USER_ID,无论事务如何都将其取回。
使用以下字段在表单中发送paypal您的自定义数据:
<input type="hidden" name="custom" value="YOUR_CUSTOM_INFO_HERE">
处理回调中的IPN:
if (strcmp ($res, "VERIFIED") == 0) {
// This is the custom field i posted within the cart form.
$cid = $_POST['custom'];
$txn_id = $_POST['txn_id'];
$cart = load_cart_by_cid($cid);
if (!empty($cart)) {
// Fetch your user from cart and do things with it,
// along with your security checks.
$user = $cart->getUser();
// For example, store the transaction.
TransactionManager::saveTransaction($user, $txn_id);
}
}
源代码是php,但我认为它足够简单,可以在java或c#等中轻松翻译。