下面的一切都是在貝寶沙箱:IPN驗證返回無效的,因爲貝寶是後到IPN監聽器發送不正確的字符集
我有一個PayPal訂閱/定期付款設置,其中採用IPN偵聽器作爲最後一步在我的網站數據庫中創建或更新用戶的訂閱。但是,當我從PayPal收到POST數據並將其發回驗證時,我收到的唯一回復是「INVALID」。
我知道我的代碼正確地將POST數據發送回PayPal,因爲我通過硬編碼POST數據字符串(如所看到的「IPN Message」值)來爲我的監聽器模擬正確的POST時得到「VERIFIED」響應在PayPal的IPN歷史頁面上。
所以我的代碼將POST數據發送回PayPal進行最終驗證,我的IPN偵聽器正在接收事務的POST變量。我的IPN監聽器創建的POST數據字符串與PayPal發送的POST數據字符串以及PayPal希望接收的POST數據字符串的區別僅有一點不同。
貝寶指出,IPN偵聽器必須發回它具有相同的價值觀,才能收到貝寶發送它在POST數據和編碼。
我認爲這個問題是一個編碼的問題,因爲在貝寶POST對於我的聽衆,「charset」的值爲「windows-1252」,應該是「UTF-8」。但是,「form_charset」具有正確的「UTF-8」值。
我已在我的賣家PayPal配置文件的兩個輸入字段上將編碼設置爲UTF-8,並在名稱爲「charset」和值爲「UTF-8」的初始PayPal表單/按鈕中具有隱藏輸入。請告訴我是否有另一種方法來設置我錯過的編碼。
PayPal聲稱要發送的POST數據字符串的一部分包含「& notify_version = 3.8」,後面跟着更多變量。當我手動插入這個字符串來測試我的代碼時,「& not」在打印到頁面時被轉換爲「¬」,根據我的理解,這意味着使用的字符編碼是「windows-1252」,因爲「¬」處於windows-1252字符集,但「¬」不在UTF-8字符集中,所以如果正在使用UTF-8,則「&不是」將不會像這樣轉換。
如何讓PayPal實際將數據發送到使用UTF-8字符編碼的IPN偵聽器?請記住,這是經常性付款,因此某些方面可能會有所不同。
我不認爲這個問題是在我的最後,因爲我已經嘗試了不同的方法,對發佈的數據進行編碼/解碼的不同方式,外部庫,cUrl /套接字,不同版本的SSL,不同的頭文件,重新啓動服務器,重新購買等 因此,貝寶發送給我錯誤的POST數據或我正在形成錯誤的帖子字符串。後者是可能的,但我已經嘗試了每種可以找到的用於形成後綴字符串的方法,但都沒有成功。
我一直在這個問題上工作幾天無濟於事,所以任何幫助或指針將非常感激。
PS: 幾個音符,可能會或可能不相關:
此訂閱系統中創建的,幾個月前,只停在過去幾週一些莫明其妙點工作。在那個時候AFAIK沒有改變相關的代碼。
第一天我開始調試這個問題,沙箱的賣家帳戶有完全不正確的數據,當它應該是商業帳戶時,它被列爲個人帳戶,這意味着沒有IPN設置可用。第二天,同一個帳戶莫名其妙地工作,並顯示爲一個商業帳戶,因爲它應該在首位。我沒有意識到我的任何行動導致這種變化。也許PayPal發送錯誤的字符編碼是一個類似的問題? cron作業上的一些緩存系統?我只是在猜測這一點,我真的不知道。
關於我的最後一點,登錄到賣家沙箱帳戶已經非常不可靠。有時我會在會話超時後嘗試重新登錄,並收到一個錯誤代碼,這在註冊新帳戶的情況下才有意義。其他時間登錄不起作用,結果是在會話超時後我嘗試登錄的一小部分時間,我必須清除我的Cookie以便重新登錄才能正常工作。
你嘗試改變這裏的編碼格式在沙箱https://www.sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding – Eshan 2014-10-29 02:32:14
@Eshan是的,它不修理它。 – 2014-10-29 02:37:50
當您訪問上述鏈接時,您是否點擊了「更多選項」鏈接,因爲它可以讓您選擇設置IPN的編碼嗎? – Eshan 2014-10-29 02:41:09