2014-11-04 56 views
0

因此,我一直在測試我的IPN腳本並根據需要開發它,但遇到了一個問題,我收到了「我們」很抱歉,我們無法發送IPN。「錯誤。貝寶IPN模擬器不會在奇怪的條件下發送IPN

未提及的所有選項的默認值

方案1 - 成功

Transaction Type: Web Accept 
All default information. 

方案2 - 成功

Transaction Type: Web Accept 
Receiver_email: [email protected] 

方案3 - 成功

Transaction Type: Web Accept 
Receiver_email: [email protected] 
Item_name: My Item 

方案3 - 成功

Transaction Type: Web Accept 
Receiver_email: [email protected] 
Item_name: My Item 
mc_gross: 39.99 

方案4 - 成功

Transaction Type: Web Accept 
All defaults; 
custom: Jimmy|0 

方案5 - 成功

Transaction Type: Web Accept 
All defaults; 
Reveiver_email: [email protected] 
custom: Jimmy|0 

方案6 - 失敗

Transaction Type: Web Accept 
All defaults; 
Reveiver_email: [email protected] 
Item_name: My Item 
custom: Jimmy|0 

方案7 - 失敗

Transaction Type: Web Accept 
Receiver_email: [email protected] 
Item_name: My Item 
mc_gross: 39.99 
custom: Jimmy|0 

那麼,爲什麼它,我可以讓

定製:吉米| 0

情況下4-5,然後把所有的其他信息,如1-3沒有問題顯示在的場景,但只要我從方案6(自定義字段中添加值)給我的價值發送,它打破了。

我已經測試了大約4-5個不同的值,並且總共發送了幾乎所有的IPN請求,試圖找出它。

看來,使用ITEM_NAME和自定義方法一起使用時,它會導致此,如圖方案5和6

注意,去除定製的分隔符值當「|」 IPN將發送,但爲什麼分離器在所有其他情況下都會導致問題?我還將自定義字段擴展爲無數字符,以確保它不是長度問題。

!!看起來,當更改發送到IPN的分隔符時,它工作正常,但看起來導致錯誤的問題實際上是我的explode()方法。

$custom = explode('~', $_POST['custom']); 

$referral = $custom[0]; 
$software_type = $custom[1]; 

無論我從哪個角色爆炸都會導致錯誤。

然而,在打印$轉診和$ software_type到的error_log,它提供了正確的價值觀:

[04-Nov-2014 02:18:11 America/Los_Angeles] [Referral]: Jimmy 
[04-Nov-2014 02:18:11 America/Los_Angeles] [Software]: 0 

回答

0

你必須有一些錯誤的IPN腳本導致當某個數據被包含在它失敗它。這會導致200 OK以外的值被髮送回PayPal的服務器,所以他們會認爲它失敗了。

您應該能夠檢查您的Web服務器日誌以查看正在發生的實際錯誤,如果您直接運行它,您通常會在瀏覽器中看到這些錯誤。

在這個筆記上,解決這類問題的一個好方法是構建自己的模擬器,以便您可以做到這一點。使用設置爲IPN網址的操作構建基本的HTML表單。包含類似於您期望從PayPal IPN獲得的參數的名稱/值的隱藏字段。然後將其加載到瀏覽器中並直接提交,以便在屏幕上看到結果。

請記住,測試這種方式時,數據不是來自PayPal的服務器。因此,它將被大大削弱,所以如果你的代碼中有邏輯來處理,你需要相應地進行調整以便用這種方式進行測試。

+0

我將此標記爲正確,因爲解釋如何在不使用PayPal沙盒的情況下進行本地調試,這對我的幫助非常大。我能夠找出腳本在哪裏被破壞,爲什麼,以及減少了幾個小時的開發時間。再次感謝。 – Hobbyist 2014-11-04 22:29:44

+0

很高興能幫到你! – 2014-11-04 22:49:12