当我收到来自 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”而不是“松原”。
您知道我该如何解决吗?
编辑:我也在贝宝论坛上发帖