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¬ify_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 中配置定期付款