paypalの定期支払導入の覚書を参考にipnを受信するスクリプトを作成し、sandboxで動作を確認したのだけど、どうやってもipnのvalidateでINVALIDしか帰ってこない。
paypalに送っているデータを見て、悩むこと1時間。わかりましたよ。
ipnのvalidateでは、paypalから送ってきたデータに「cmd=_notify-validate」をつけて、データが正しいか検証するのですが、送ってきたデータの文字コードが「Shift_JIS」なのに、検証する際には「UTF-8」に変換してたため、データが一致せずINVALIDとなっていたようです。
で、このipnのcharsetを変更できるか調べたところ、paypalの設定画面で変更できることがわかりました。
具体的な手順は以下です。
追記)
アカウントによってなのか、ページが古いのか不明なんですが、個人設定のページで、以下のような画面が出る場合は、「販売ツール」の一番下の「Paypalボタンの言語コード化」のリンクから設定を変更できます。
追記)
上記の設定でも治らない場合、「ウェブサイトの文字コード」も「UTF-8」に設定して保存すればよいです。再度、言語コードの設定画面を表示した際、以下のように表示されるけど、内部的には問題ないとのこと。(2016-03-18 テクニカルサポートに確認)