paypalのsandboxでipnのvalidateでINVALIDになる

paypalの定期支払導入の覚書を参考にipnを受信するスクリプトを作成し、sandboxで動作を確認したのだけど、どうやってもipnのvalidateでINVALIDしか帰ってこない。

paypalに送っているデータを見て、悩むこと1時間。わかりましたよ。

ipnのvalidateでは、paypalから送ってきたデータに「cmd=_notify-validate」をつけて、データが正しいか検証するのですが、送ってきたデータの文字コードが「Shift_JIS」なのに、検証する際には「UTF-8」に変換してたため、データが一致せずINVALIDとなっていたようです。

で、このipnのcharsetを変更できるか調べたところ、paypalの設定画面で変更できることがわかりました。

具体的な手順は以下です。

個人設定 PayPal

言語のエンコード PayPal

その他のエンコードオプション PayPal

追記)

アカウントによってなのか、ページが古いのか不明なんですが、個人設定のページで、以下のような画面が出る場合は、「販売ツール」の一番下の「Paypalボタンの言語コード化」のリンクから設定を変更できます。

個人設定 PayPal

追記)

上記の設定でも治らない場合、「ウェブサイトの文字コード」も「UTF-8」に設定して保存すればよいです。再度、言語コードの設定画面を表示した際、以下のように表示されるけど、内部的には問題ないとのこと。(2016-03-18 テクニカルサポートに確認)

言語のエンコード   PayPal 2

投稿日:
カテゴリー: php タグ: