0

在过去的几个小时里,我一直在试图弄清楚为什么 Paypal Sandbox IPN 模拟器没有在我的请求中检测到内容类型。我没有修改任何返回请求的代码,所以奇怪的是它没有正确通过。

三月份有一个类似的问题,尽管他标记的答案似乎对我没有用。

有谁知道为什么会这样?最近有其他人发生过这种情况吗?

public class PaypalIPN : IHttpHandler, IRequiresSessionState {

    public void ProcessRequest (HttpContext context)
    {
        //post back to either sandbox or live
        string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
        string strLive = "https://www.paypal.com/cgi-bin/webscr";
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);

        //Set values for the request back
        req.Method = "POST";
        req.ContentType = "application/x-www-form-urlencoded";
        byte[] param = context.Request.BinaryRead(HttpContext.Current.Request.ContentLength);
        string strRequest = Encoding.ASCII.GetString(param);
        strRequest += "&cmd=_notify-validate";
        req.ContentLength = strRequest.Length;

        //Send the request to PayPal and get the response
        StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
        streamOut.Write(strRequest);
        streamOut.Close();
        StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
        string strResponse = streamIn.ReadToEnd();
        streamIn.Close();
        ...
4

2 回答 2

0

我刚刚在 Play2 (Scala) 中实现 IPN 侦听器时遇到了同样的问题。

请注意。它抱怨的不是您返回给 Paypal 的请求的内容类型,而是您返回到它向您的侦听器服务发出的原始 Paypal IPN 请求的响应。

我正在返回一个 play.api.mvc.SimpleResult.Ok() (映射到 Http 200),但收到“IPN 未检测到内容类型”消息。

在挠了挠头并向自己证明我立即返回 200 后,我重新阅读了文档并注意到“您的侦听器返回一个的HTTP 200 响应”。

所以相反,我尝试了 play.api.mvc.SimpleResult.Ok("") ,嘿,它工作了!

因此,您似乎必须发送一些带有 200 响应的内容(一个空字符串)才能使测试服务满意。

于 2013-10-10T14:12:14.513 回答
0

因此,使用 ASHX 不起作用,但显然当我切换到 ASPX 文件时,它神奇地起作用了。我不确定 ASHX 有什么不能让它工作,但 ASPX 是解决方案。

于 2013-10-01T14:15:52.510 回答