8

当我收到来自 Paypal 的通知时,我会将其发送回 Paypal 以确保它来自 Paypal。代码运行良好,我没有问题:

# payment_notifications_controller.rb # notification_validation, line 90
response = RestClient.post(PAYPAL_CONFIG["url_validate"], params.merge({"cmd" => "_notify-validate"}), :content_type => "application/x-www-form-urlencoded")

问题是当用户有一个日本名字时。收到的通知(来自 Paypal)如下:

Parameters: {"last_name"=>"\x8F\xBC\x8C\xB4", "payment_cycle"=>"Daily", "next_payment_date"....

当我尝试将其发送回 Paypal(以确保它来自 Paypal)时,出现此错误:

ArgumentError (invalid byte sequence in UTF-8):
 app/controllers/payment_notifications_controller.rb:90::in `notification_validation'

就像 RestClient 不喜欢 "\x8F\xBC\x8C\xB4" 一样。我尝试添加:content_type =>“shift_jis”和“utf-8”,但我总是有这个错误。

如果我这样做:

params[:last_name] = params[:last_name].encode("UTF-8", "Shift_JIS")
# now params[:last_name] is 松原

然后我的 RestClient.post 被发送到 Paypal,但 Paypal 返回错误(INVALID)可能是因为 Paypal 正在等待获取“\x8F\xBC\x8C\xB4”而不是“松原”。

您知道我该如何解决吗?

编辑:我也在贝宝论坛上发帖

4

1 回答 1

9

所以我想我有解决办法。

在卖家的 paypal 帐户中转到:个人资料 > 我的销售工具 > PayPal 按钮语言编码 > 更多选项

使用以下下拉菜单选择您网站上使用的编码。

编码:Shift_JIS

您想对从 PayPal 发送给您的数据(例如,IPN、可下载日志、电子邮件)使用相同的编码吗?

否,使用:UTF-8

现在我可以得到“验证”。

于 2012-11-22T00:31:41.773 回答