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が「松原」ではなく「\ x8F \ xBC \ x8C \ xB4」の取得を待機していたため、Paypalはエラー(無効)を返します。

私がそれをどのように解決できるかについて何か考えがありますか?

編集:私はペイパルフォーラムにも投稿します

4

1 に答える 1

9

だから私は解決策があると思います。

売り手のペイパルアカウントで、次の場所に移動します:プロファイル>私の販売ツール>PayPalボタンの言語エンコーディング>その他のオプション

次のドロップダウンメニューを使用して、Webサイトで使用されているエンコーディングを選択します。

エンコーディング:Shift_JIS

PayPalから送信されるデータ(IPN、ダウンロード可能なログ、電子メールなど)に同じエンコーディングを使用しますか?

いいえ、使用します:UTF-8

これで「VERIFIED」を取得できるようになりました。

于 2012-11-22T00:31:41.773 に答える