解決するまでに3時間くらい必要だったが・・・
(んでもって、失敗していた理由が送るはずのパラメータを送ってなかったとか、それが間違っていたとかそんな話だったりする・・・-_-;)
PaypalのIPNはデータをPostで送信してくるので、追加のパラメータ(自分とこで必要なもの)をクエリーストリングで追加することにした。
方法は、Paypalのショッピングカート画面を開く際のパラメータの一つ「notify_url」で、コールバックURLの後ろの「?key=value」ってやっただけ。まぁ、「?、&、=」辺りはお約束の「%~」に変換する必要はあるけど。
っで、RubyとかPythonとかPHPとか使えない(使わない)僕はPerlのCGI.pmを使って送信されたデータを取得しているわけだが、普通にCGI.pmのparamメソッドを使っても追加パラメータが取れない。
でも、URLの末尾には「?key=value」がくっついてる・・・
しょうがないので$ENV{"QUERY_STRING"}で取得して、自前でパースした。
試してない上に、ドキュメントも読んでいないので憶測に過ぎないが、
送信メソッドが「Post」の際、CGI.pmはクエリーストリングを取りに行かないのかな?
理由はなんとなくわかるし、それがただし動作な気はするが・・・
(逆をやったら、おかしなことが起きるだろうし・・・、GETの時に標準出力から読むっての)
おかげで、数年ぶりくらいにこんなコード書いた。
my @query = split("&", $ENV{"QUERY_STRING"}); my %hash; foreach (@query) { my ($key, $value) = split("="); $hash{$key} = $value; }実際は、$value =~ s/%([0-9a-fA-F]{2})/pack('H2', $1)/eg とか入れる必要があるだろうけどね・・・
1 comment:
url_param()メソッドは?
Post a Comment