我最近在我的网站上添加了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上是否存在一些设置?
我的技术专长已经结束了,我还想了解下一步调试的建议。
答案 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);