【问题标题】:Paypal IPN override charsetPaypal IPN 覆盖字符集
【发布时间】:2012-08-30 08:15:47
【问题描述】:

我对这个 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。

当贝宝调用我的通知 URL 时,我(以前的开发人员)构建了请求 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";
   }

}

这是有趣的事情。我得到了一个完全畸形的用户名。 所以我逐个字符地转储它。

名字将是: 字符: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-validate&mc_gross=10.00&protection_eligibility=Eligible&address_status=confirmed&payer_id=JA3YMCJFKSCNJ&tax=0.00&address_street=1+Main+St&payment_date=07%3A41%3A40+Sep+05%2C+2012+PDT&payment_status=Completed*&charset *&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_handence=USD&&M ling_amount=0.00&transaction_subject=lolka_bolka%3Bfalse%3B%3B%3B%3BHungary%3B%3B%3B%3B%3B%3B&payment_gross=10.00&shipping=0.00&ipn_track_id=6fe12a7a34b74

【问题讨论】:

  • 您的 PayPal 个人资料中是否启用了 UTF-8?见shwup.blogspot.sg/2009/05/paypal-ipn-issues-with-unicode.html
  • @jack:这是我的第一件事:“好的,我尝试在 google 上搜索很多内容。第一件事是检查 paypal 语言设置:jlchereau.blogspot.hu/2006/10/paypal-ipn-with-utf8.html
  • 好的,现在,当我检查我的网址时,意识到我发送了一个错误的名字:first_name=%C1rv%EDzt%1Ar%1A 其中űő 是相同的,%1A。所以现在我将尝试按名称对字符进行 urlencode。
  • 好的,我想我找到了问题所在。我在任何地方都设置了 UTF-8,但没关系,因为我无法在 SANDBOX 模式下设置它。
  • 我使用http_build_query($_POST) 而不是foreach 循环的另一件事,它接缝处理得很好。从来没有遇到过这样的问题。

标签: php utf-8 character-encoding paypal paypal-ipn


【解决方案1】:

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

  • 澄清一下:在您的网站上,在您的订单中(例如:通过隐藏输入)设置 charset 是不够的,您还需要设置您的默认编码 - 解释在莱纳特的回答中。
    • 这是因为该选项仅适用于您自己的数据,而默认设置适用于 PayPal 发送到您的 IPN 处理脚本的数据。
    • 例如:您的订单中可能有UTF-8 作为隐藏输入,但PayPal IPN 仍然在windows-1252 中。您只能通过更改 PayPal 帐户中的默认设置来解决此问题。
  • 出于测试目的,您还需要为您的沙盒商家帐户设置该编码选项! (只需使用您的 Sandbox 商家详细信息登录 https://sandbox.paypal.com。)
  • 设置默认编码后,如果您再次返回设置检查其值,它将显示默认值而不是您设置的值。这是一个错误(说明 PayPal 的工作质量),您之前设置的值实际上仍然设置。
    • 因此,如果您想确定字符集到底是什么,请在您的 IPN 处理脚本中通过检查 POST 消息中的 charset 的值来执行此操作。
  • 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 沙盒服务器测试您的网站,然后选择不使用 PayPal 帐户付款
    • 这样,您就可以为名字和姓氏输入重音/特殊字符。
    • (您将从 `Developer/Sandbox Accounts ›您的客户帐户获得信用卡号、类型和到期日期 › 个人资料 › 资金——任何数字都可以用于 CVV 值。)李>

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

§

使用 PayPal 并不好玩,而且会浪费大量时间。我希望这可以帮助您节省一些时间。如果可以的话,将您的业务转移到其他地方。

【讨论】:

  • 很好的答案。更新:沙盒用户现在可以在 paypal 结账过程中更改地址并输入特殊字符...
【解决方案2】:

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

【讨论】:

  • 此外,您应该在您的IPN页面中将编码大写:$req = 'cmd=_notify-validate'; foreach($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req.= "&$key=$value"; } $req = str_replace('=utf-8', '=UTF-8', $req);
  • 谁会猜到 IPNS 的编码在“PayPal 按钮语言编码”下...感谢您的提示!
  • 很高兴这个链接仍然有效,因为“我的销售工具”从新的 paypal 设计中消失了。
  • 这不再适用于当前界面。浏览到魔法地址paypal.com/cgi-bin/…
  • 花了几个小时找出为什么我不能将 IPN 插入数据库(即使我可以使用 IPN 模拟器结果)后发现问题出在字符编码上。模拟器当然是使用英文字母,而实际付款则不一定(例如 address_street)。这是一个很好的答案,我只是想知道如何为有类似问题(即 IPN 插入问题)的人提供解决方案
猜你喜欢
  • 2013-10-08
  • 1970-01-01
  • 2011-09-01
  • 2012-04-08
  • 2012-07-23
  • 2017-12-26
  • 2013-02-06
  • 2014-07-31
  • 2011-08-19
相关资源
最近更新 更多