由於PayPal在過去幾周內對其開發人員API進行了一些更改,因此我注意到開發人員中心的IPN模擬器不再響應如我所料,測試IPN。現在,它吐出消息:IPN模擬器「無法提取響應:找不到內容類型」
「IPN傳遞失敗:不能提取響應:沒有內容類型找到」
測試IPN本身似乎實際上是執行就好了 - 我的IPN控制器(在ASP中)正在接收IPN,並將其回顯,PayPal正在按照我的預期回覆「VERIFIED」。
這只是一個模擬器前端錯誤,或者我在這裏丟失了什麼?我的代碼是(據我可以告訴)絕對發送ContentType標頭,就像它一直是:
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded"; <-- ## HEADER IS PRESENT ##
byte[] param = Request.BinaryRead(HttpContext.Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
值得一提的是,我使用nginx的作爲代理的IPN請求轉發到我的本地開發服務器,因爲微軟的開發測試服務器(非常愚蠢)只能在本地訪問。我不知道這是否會影響結果,但它做了就在PayPal的更改前一週左右工作正常。
提前
完美 - 非常感謝。奇怪的是,相同的代碼總是使用舊的模擬器生成綠色勾號和「IPN發送成功」。無論如何,在我發回IPN之前,我推了下面的代碼: Response.Clear(); Response.StatusCode = 200; Response.Write(「」); Response.End(); 這似乎是訣竅。畢竟,我沒有正確閱讀手冊。 – Alex 2013-03-15 09:04:33
@Praveen - 你可以參考指定這個流程的文檔的鏈接嗎?在我看來,這是一個糟糕的API設計 - 您如何保證HTTP 200響應在IPN Handler POST之前到達PayPal? – 2013-05-22 21:39:46
該文檔在這裏:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/ 嗯不知道我完全理解你評論糟糕的API設計,但每個HTTP請求必須有迴應 - 正確?因此,當您收到來自PayPal的HTTP請求的IPN消息時,您必須回覆響應代碼200,並說「是的,我收到了」。如果這種情況沒有發生,貝寶認爲你的服務器從未收到過IPN消息,它會嘗試再次發送。 – Praveen 2013-05-23 17:04:59