PayPal 即时付款通知 (IPN) 的 C# 处理程序

Posted

技术标签:

【中文标题】PayPal 即时付款通知 (IPN) 的 C# 处理程序【英文标题】:C# Handler for PayPal Instant Payment Notification (IPN) 【发布时间】:2012-09-03 19:57:03 【问题描述】:

我正在尝试为 PayPal IPN 编写自己的 ASP.NET C# 处理程序页面。

我跟踪了一些我在网上找到的示例,但没有成功。

我似乎在第一步失败了:捕获从 PayPal 发送到处理程序页面的即时付款通知 (IPN) 数据。

我有一个网页:PayPalIPNHandler.aspx.cs,在 Page_Load 我有以下内容:

protected void Page_Load(object sender, EventArgs e)


    byte[] param = Request.BinaryRead(Request.ContentLength);
    string strRequest = Encoding.ASCII.GetString(param);


我使用一些示例数据来测试处理程序页面:

/sitename/PayPalIPNHandler.aspx?mc_gross=0.01&protection_eligibility=Eligible&address_status=confirmed&item_number1=&payer_id=pid&tax=0.00&address_street=23%20The%20Street&payment_date=12:38:53%20Jan%2010,%202012%20PST=Composlet -1252&address_zip=IP4%204LP&mc_shipping=0.00&mc_handling=0.00&first_name=John&mc_fee=0.01&address_country_code=GB&address_name=John%20Smith&notify_version=3.4&custom=&payer_status=unverified&business=x@googlemail.com&address_country=United%20Kingdom&num_cart_items=1&mc_handling1=0.00&address_city=Ipswich&verify_sign=verify&payer_email= X @ gmail.com&mc_shipping1 = 0.00&txn_id = 1&payment_type =即时&姓氏=史密斯&ADDRESS_STATE =沙福&item_name1 =&RECEIVER_EMAIL = X @ googlemail.com&payment_fee =&数量1 = 1&receiver_id = W&txn_type =购物&mc_gross_1 = 0.01&mc_currency = GBP&residence_country = GB&transaction_subject =购物%20Cart&payment_gross =&ipn_track_id = BU4 p >

但是,ContentLength 似乎总是 0,而 strRequest 是 ""

我显然犯了一个非常愚蠢的错误,但我就是看不出我做错了什么。

请帮忙。

亲切的问候

沃尔特

【问题讨论】:

为什么不直接使用 Request[param_name]? 因为您必须将整个数据作为“&cmd=_notify-validate”的一部分发回 PayPal。 【参考方案1】:

HTTP GET 请求的内容将始终为空 - 只有在 POST(和 PUT 以及可能的 DELETE)请求中发送内容才有效。根据您的评论,我会说您需要查看

Request.ServerVariables["QUERY_STRING"]

【讨论】:

以上是关于PayPal 即时付款通知 (IPN) 的 C# 处理程序的主要内容,如果未能解决你的问题,请参考以下文章

Authorize.Net 上的 IPN(即时付款通知)就像 Paypal 一样

设置 PayPal 即时付款通知后,我可以追溯重新发送历史交易的 IPN 吗?

如何在 PHP 中使用 IPN(即时付款通知)在 Paypal 中配置定期付款

PayPal 是不是支持捐赠按钮的 webhook 或即时付款通知?

未收到 Paypal 沙箱 IPN 消息

通过即时付款通知取消贝宝定期付款