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が「松原」ではなく「\ x8F \ xBC \ x8C \ xB4」の取得を待機していたため、Paypalはエラー(無効)を返します。
私がそれをどのように解決できるかについて何か考えがありますか?
編集:私はペイパルフォーラムにも投稿します