Paypal IPN覆盖字符集

vas*_*123 21 php paypal utf-8 character-encoding paypal-ipn

我有这个paypal IPN的问题.我看到,很多人都有.

我尝试以用户身份付费:ÁrvíztűrőTükörfúrógép在这个名字中,有所有特殊字符,匈牙利ABC中有什么.

我是匈牙利的PHP开发人员.

好吧,我试图在谷歌搜索很多.首先要检查paypal语言设置: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";
   }
Run Code Online (Sandbox Code Playgroud)

}

这是有趣的事情.我找回了一个完全商品化的用户名.所以我通过char转储char.

名字将是:CHARS:193,114,118,237,122,116,26,114,26

吸.我尝试了一切以获得我真正的utf-8名称mb_detect_encoding是UTF-8.

我尝试使用iconv,mb_convert_encoding,utf8_encode和decode.没有成功.试图不urlencode名称,再没有成功.

有人可以告诉我,为什么会这样,我怎样才能找回真正的utf8名字?

该URL我送:CMD = _notify,验证和mc_gross = 10.00 protection_eligibility =合格&address_status =证实与payer_id = JA3YMCJFKSCNJ&税= 0.00&address_street = 1 +主+ ST&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%远%F3G%E9P¬ify_version = 3.6&定制= 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 =即时&姓氏= T%FCK%F6rf%远%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&吨 est_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

Len*_*art 45

您应该在Paypal更改您的设置.

结束页面

  • 大.谢谢.这些paypal人深深地隐藏它:) (4认同)
  • 谁会猜到IPNS的编码在“ PayPal按钮语言编码”下...谢谢您的提示! (2认同)
  • 很高兴这个链接仍然有效,因为“我的销售工具”从新的贝宝设计中消失了。 (2认同)
  • 这在当前界面中不再起作用。浏览到魔术地址 https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding 。 (2认同)

Fab*_*ert 6

Lenart 的回答很棒而且非常有用,但我想我会添加一些不适合评论的内容。

  • 澄清charset一下:在您的网站上,在您的订单中(例如:通过隐藏输入)设置 是不够的,您还需要设置您的默认编码- 如 Lenart 的回答中所述。
    • 这是因为该选项仅适用于您自己的数据,而默认设置适用于 PayPal 发送到您的 IPN 处理脚本的数据。
    • 例如:也许您UTF-8在订单上有一个隐藏的输入,但 PayPal IPN 仍然在windows-1252. 您只能通过更改 PayPal 帐户中的默认设置来解决此问题。
  • 出于测试目的,您还需要为您的 Sandbox 商家帐户设置该编码选项!(只需使用您的 Sandbox 商家详细信息登录https://sandbox.paypal.com。)
  • 设置默认编码后,如果再次返回设置查看其值,它将显示默认值而不是您设置的值。这是一个错误(并且说明了 PayPal 的工作质量)并且您之前设置的值实际上仍然设置。
    • 因此,如果您想确定字符集到底是什么,请通过检查charsetPOST 消息中的值在您的 IPN 处理脚本中进行。
  • PayPal 使用的默认字符集无法正常工作。
    • 例如:Western European Languages (including English)会导致法语重音字符不起作用。
    • 你最好在任何地方使用 UTF8(将UTF-8在 IPN 中显示。)

§

编辑。最后但并非最不重要的:

如果您想用特殊字符或重音字符测试您的 IPN 处理脚本,您(理论上)有几个不同的选项,但大多数在实践中不起作用。

这是一个回顾:

  • 使用IPN 模拟器将不起作用,因为它无法验证请求(它产生虚假请求,而不是真实请求。)
  • 遗憾的是,无法在名字或姓氏中创建带有特殊字符的 PayPal 沙盒客户帐户
    • 用户界面不支持它,会要求你Only enter letters(原文如此)。
    • 批量账户上传功能没有更好,导致 Something went wrong. One or more sandbox accounts could not be uploaded. Try again.
  • 一种有效的选择:使用 PayPal Sandbox 服务器测试您的网站,然后选择在没有 PayPal 帐户的情况下付款
    • 这样,您就可以为名字和姓氏输入重音/特殊字符。
    • (您将从`开发人员/沙盒帐户 ›您的客户帐户› 个人资料 › 资金 - 任何数字都可以用于 CVV 值。)

我几个月前向 PayPal 报告了这个问题,但没有任何改变。

§

与 PayPal 合作并不有趣,而且是在浪费时间。我希望这会帮助你节省一些时间。如果可以,将您的业务转移到其他地方。