2013-03-15 66 views
4

由於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的更改前一週左右工作正常。

提前

回答

2

沒有非常感謝 - 這看起來像你的IPN處理程序本身沒有返回來自PayPal收到IPN消息後,適當的HTTP 200響應。下面是該序列:

  1. PayPal發送IPN消息
  2. 你的IPN處理程序接收的IPN消息並返回HTTP 200(W /響應無數據)
  3. 你的IPN處理程序發送POST消息至PayPal以校驗。

看起來像#2是它失敗的地方。我會建議檢查您的IPN腳本,確保它在收到IPN消息後立即返回成功響應(即使在發送IPN進行驗證之前)。

+0

完美 - 非常感謝。奇怪的是,相同的代碼總是使用舊的模擬器生成綠色勾號和「IPN發送成功」。無論如何,在我發回IPN之前,我推了下面的代碼: Response.Clear(); Response.StatusCode = 200; Response.Write(「」); Response.End(); 這似乎是訣竅。畢竟,我沒有正確閱讀手冊。 – Alex 2013-03-15 09:04:33

+0

@Praveen - 你可以參考指定這個流程的文檔的鏈接嗎?在我看來,這是一個糟糕的API設計 - 您如何保證HTTP 200響應在IPN Handler POST之前到達PayPal? – 2013-05-22 21:39:46

+0

該文檔在這裏: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

相關問題