Paypal IPN处理程序 - 如何知道发生了哪些事务

时间:2012-10-26 07:52:07

标签: paypal paypal-ipn

我第一次在其中一个项目中实现了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电子邮件地址。 (感觉不太好)

赞赏这方面的任何帮助

1 个答案:

答案 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#等中轻松翻译。