PayPal IPN返回302

时间:2015-07-26 19:07:35

标签: azure ssl paypal

我最近在我的网站上添加了SSL证书,现在我的PayPal IPN监听器不再有效。它已经工作了一年多没有问题。

            // Postback to either Sandbox or Live.
            string strPayPal = "https://www.paypal.com/cgi-bin/webscr";
            BasicCrudToolkit.LogMessage("PayPal Webrequest created", "PayPal Listener");
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);

            // Set values for request back.
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            Byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
            string strRequest = Encoding.ASCII.GetString(param);
            BasicCrudToolkit.LogMessage("Request parameters: " + strRequest, "PayPal Listener");

            strRequest += "&cmd=_notify-validate";
            req.ContentLength = strRequest.Length;

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

当我在PayPal上查看我的IPN历史记录时,我发现没有出现在HTTP响应代码中,并且IPN显示在永久重试中。但是,当我检查Azure上的流量时,我发现该网站正在返回302.

正如您所看到的,我有一个日志文件,可以在IPN执行时生成条目。我没有在日志文件中获得任何条目。这几乎就像Azure在监听器甚至可以运行之前拒绝来自PayPal的IPN请求。在我运行SSL证书后,Azure上是否存在一些设置?

我的技术专长已经结束了,我还想了解下一步调试的建议。

3 个答案:

答案 0 :(得分:0)

302是重定向,因此您必须将网站配置为将http://流量重定向到https://。您应该能够更新您的IPN URL以使用https://而不是http://来解决它。

答案 1 :(得分:0)

我终于解决了这个问题。该问题最终成为web.config文件和cookie的设置。我在这里找到了解决方案:How to remove AspxAutoDetectCookieSupport=1

由于将表单设置为AutoDetect for cookies,因此发生了302重定向。一旦我将它设置为UseCookies,302就会消失。

答案 2 :(得分:0)

我遇到了这个问题,每个POST返回302。我的问题是以json格式发送请求。 Paypal需要一种application / x-www-form-urlencoded格式。我以application / x-www-form-urlencoded格式转换了正文的内容,并且可以正常工作。 JAVA代码如下所示:

    // add all params into a list
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("cmd", "_notify-validate"));
    
    // map variable is all paypal variables received
    map.keySet().forEach((key) -> {
        nvps.add(new BasicNameValuePair(key, map.get(key).toString()));
    });
    
    // create the post request
    HttpPost req = new HttpPost(IPN);
    req.addHeader(USER_AGENT_HEADER, USER_AGENT_CONTENT);
    req.addHeader("Content-Type", "application/x-www-form-urlencoded");
    //add all params into POST body 
    req.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));

    // send req
    HttpResponse response = httpClientBuilder.create().build().execute(req);