2012-09-05 146 views
15

我對此PayPal IPN有問題。 我看到,很多人都有。Paypal IPN覆蓋字符集

我嘗試以用戶身份付費:ÁrvíztűrőTükörfúrógép 在這個名字中,有所有特殊字符,匈牙利ABC中都有。

我是匈牙利PHP開發人員。

好吧,我試圖搜索很多谷歌。 的第一件事是檢查貝寶的語言設置: http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html

每一個設置是UTF-8。

當paypal調用我的通知網址時,我(以前的開發人員)構建請求URL。 當我登錄這個URL時,我看到字符集不是UTF-8,所以我強制腳本使用它。

$req = 'cmd=_notify-validate'; 
foreach ($_POST as $key => $value) { 
    if ($key == 'charset') { 
     $req .= "&charset=utf-8"; 
    } else { 
     $value = urlencode(stripslashes($value)); 
     $req .= "&$key=$value"; 
    } 

}

這裏是intresting的事。我找回了一個完全mallmore的用戶名。 所以我轉儲char由字符。

第一名稱將是: CHARS:193,114,118,237,122,116,26,114,26

吸。 我嘗試了一切,以獲得我真正的utf-8名稱 mb_detect_encoding爲UTF-8。

我試圖使用iconv,mb_convert_encoding,utf8_encode和解碼。 沒有成功。試圖不要urlencode這個名字,再次成功。

有人可以告訴我,爲什麼,以及我如何找回真正的utf8名稱?

我發送的網址: CMD = _notify-驗證& mc_gross = 10.00 & protection_eligibility =合格& address_status =證實& payer_id = JA3YMCJFKSCNJ &稅= 0.00 & address_street = 1 +主+聖& PAYMENT_DATE = 07%3A41 %3A40 +月+ 05%2C + 2012 + PDT & PAYMENT_STATUS =完成* &的charset = UTF-8 * & address_zip = 95131 &如first_name =%C1rv%EDzt%1AR%1A & mc_fee = 0.59 & address_country_code = US & address_name =%C1rv%EDzt%1Ar%1A + T%FCk%F6rf%FAr%F3g%E9p & notify_version = 3.6 & custom = lolka_bolka%3Bfalse%3B%3B%3B%3BHungary%3B%3B%3B%3B% 3B%3B & payer_status =驗證&業務= vaso_1346830963_biz%40mydomain.hu & = ADDRESS_COUNTRY美國+美國& ADDRESS_CITY =聖若澤+量& = 1 & verify_sign = AVVJjJNeVwHbYcMDVfj2N1DqWwUdAtNQIpb9KIP99gZ2PY-LPoOYzSCc & PAYER_EMAIL = test_1346830232_per%40mydomain.hu & txn_id = 4J747779YW528551F & payment_type = instant & last_name = T%FCk%F6rf%FAr%F3g%E9p & address_state = CA & receiver_email = vaso_1346830963_biz%40mydomain。 hu & payment_fee = 0。59 & receiver_id = TGEHBCMG336WE & txn_type = web_accept & ITEM_NAME = 510 +絲綢& mc_currency = USD & ITEM_NUMBER = & residence_country = US &的test_ipn = 1個& handling_amount = 0.00 & transaction_subject = lolka_bolka%3Bfalse%3B%3B%3B%3BHungary%3B %3B%3B%3B%3B%3B & payment_gross = 10.00 &運費= 0.00 & ipn_track_id = 6fe12a7a34b74

+0

是UTF-8在您的PayPal配置文件中啓用?見http://shwup.blogspot.sg/2009/05/paypal-ipn-issues-with-unicode.html –

+0

@jack:這是我的第一件事: 「好的,我試圖搜索很多谷歌。第一件事是檢查PayPal語言設置:http://jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html「 – vaso123

+0

好吧,現在,當我檢查我的網址,意識到,我發送的壞第一名: 如first_name =%C1rv%EDzt%1AR%1A 其中UO相同,%1A是。所以現在我將嘗試通過char名稱來urlencode char。 – vaso123

回答

33

你應該在貝寶更改設置。

End page

+3

太棒了。謝謝。這些paypal的人隱藏它:) – vaso123

+0

此外,你應該把大寫的編碼在你的IPN頁面: '$ req ='cmd = _notify-validate'; \t \t的foreach($ _ POST爲$密鑰=> $值){ \t \t \t $值=用urlencode(的stripslashes($值)); \t \t \t $ req。=「&$ key = $ value」; \t \t} \t \t $ REQ = str_replace函數( '= UTF-8', '= UTF-8',$ REQ);' – toni07

+1

誰會想到用於IPNS編碼是在 「PayPal按鈕語言編碼」 .. 。 謝謝你的提示! – Paludis

2

Lenart的回答非常好,非常有用,但我想我會添加一些不適合評論的內容。

  • 澄清:(通過一個隱藏的輸入例如: - )在您的網站設置charset,在您的訂單,是不夠的,你還需要設置你的默認編碼 - 在Lenart的答案解釋。
    • 這是因爲該選項僅適用於您自己的數據,而默認設置適用於PayPal發送給您的IPN處理腳本的數據。
    • 例如:您可能有UTF-8作爲您訂單上的隱藏輸入,但PayPal IPN仍在windows-1252。您只能通過更改PayPal帳戶中的默認設置來解決該問題。
  • 出於測試目的,您需要爲您的Sandbox商家帳戶設置編碼選項! (只需登錄您的Sandbox商戶詳情登錄https://sandbox.paypal.com。)
  • 設置默認編碼後,如果您再次返回設置以檢查其值,則將顯示默認值而不是您設置的值。這是的錯誤(並說明了貝寶的工作質量),並且您之前設置的值實際上仍然設置。
    • 因此,如果您想確定字符集的真實含義,請在POST消息中檢查charset的值,從而在IPN處理腳本中執行此操作。
  • PayPal使用的默認字符集無法正常工作。
    • 例如:Western European Languages (including English)會導致法語重音字符不起作用。
    • 你最好使用UTF8無處不在(在IPN中將顯示爲UTF-8。)

§

編輯。最後但並非最不重要的:

如果您想用特殊或重音字符測試IPN處理腳本,您(理論上)有幾個不同的選項,但大多數在實踐中不起作用。

這裏有一個概括:(。它產生的虛假請求,不以假亂真)

  • 使用,因爲它無法驗證請求IPN Simulator將無法​​正常工作
  • Creating a PayPal Sandbox customer account有特殊字符的姓名的內部或姓氏可悲是不可能的。
    • 用戶界面不支持它,並會要求您Only enter letters(原文如此)。
    • 大量帳戶上傳功能是再好不過了,導致Something went wrong. One or more sandbox accounts could not be uploaded. Try again.
  • 的一個選項的工作原理:貝寶沙盒服務器測試你的網站,並選擇工資沒有PayPal賬號
    • 這樣,您就可以在第一和最後一個名稱輸入重音/特殊字符。
    • (你會從'Developer/Sandbox Accounts>您的客戶賬戶>簡介>資金獲得信用卡號碼,類型和到期日期 - 任意數量的CVV值都行)

幾個月前我向PayPal報告過這個問題,但沒有任何變化。

§

使用PayPal沒有趣味,而且浪費時間。我希望這會幫助你節省一些時間。如果可以,請在其他地方開展業務。

+0

很棒的回答。更新:沙盒用戶現在可以在PayPal結帳過程中更改他的地址並輸入特殊字符... – DIDoS