25

我有这个贝宝 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。

当贝宝调用我的通知 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 名称?

我发送的 URL: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 * 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¬ify_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 =即时与姓氏= 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+Silk&mc_currency=USD&item_number=&residence_country=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&shipping=0.00&ipn_track_id=6fe12a7a34b74

4

2 回答 2

52

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

结束页面

于 2014-05-11T13:16:45.037 回答
7

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

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

§

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

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

这是一个回顾:

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

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

§

使用 PayPal 工作并不有趣,而且会浪费大量时间。我希望这可以帮助您节省一些时间。如果可以的话,把你的生意带到别处。

于 2017-09-19T14:52:40.257 回答