Khi tôi nhận được một thông báo từ Paypal, tôi gửi lại cho Paypal để chắc chắn rằng nó là từ Paypal. Mã hoạt động tốt và tôi không có vấn đề gì:đường ray paypal thông báo xác nhận Nhật Bản
# 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")
Vấn đề là khi người dùng có tên tiếng Nhật. Thông báo (từ Paypal) đã nhận được như:
Parameters: {"last_name"=>"\x8F\xBC\x8C\xB4", "payment_cycle"=>"Daily", "next_payment_date"....
Khi tôi đang cố gắng gửi lại cho Paypal (để chắc chắn nó đến từ Paypal), tôi có lỗi này:
ArgumentError (invalid byte sequence in UTF-8):
app/controllers/payment_notifications_controller.rb:90::in `notification_validation'
Đó là như RestClient không thích "\ x8F \ xBC \ x8C \ xB4". Tôi đã cố gắng thêm: content_type => "shift_jis" và cũng "utf-8", nhưng tôi luôn có lỗi này.
Nếu tôi làm điều gì đó như:
params[:last_name] = params[:last_name].encode("UTF-8", "Shift_JIS")
# now params[:last_name] is 松原
Sau đó RestClient.post tôi được gửi đến Paypal, nhưng Paypal trả về một lỗi (INVALID) có lẽ vì Paypal đã được chờ đợi để có được "\ x8F \ xBC \ x8C \ xB4 "và không" 松原 ".
Bạn có ý tưởng nào về cách tôi có thể giải quyết điều đó không?
chỉnh sửa: Tôi cũng đăng bài trên paypal forum