質問: PayPalのウェブペイメントプラスでクレジット決済を行った後、IPNデータを取得してシステムへのデータ取り込みをPHPで書いているのですが、送られてきたデータが正しいかPayPalに問い合わせるValidationが、VERIFIEDでなくINVALIDで返ってきてしまいます。
回答: 原因は、SHIFT JISの0x5C問題、いわゆる「ダメ文字」というやつで、今回だと「圭」が対象でした。 PayPalのIPNでは送られてきたでデータをそのままの順序、そのままの内容でPayPalに送り返すことで 通知が正しいもの=VERIFIEDだと認識されますが、その送り返すデータを作成するときに `stripslashes` 関数をつかっていたため、ダメ文字の0x5Cが削除されてしまうために、 受信文字列と送信文字列が一致しない結果INVALIDが返却されていました。 ``` foreach ($_POST as $key => $value) { $value = urlencode(stripslashes($value)); $req .= ""&$key=$value""; } ``` php.iniでmagic_quotesがOFFになっているので、そもそも `stripslashes()` は呼び出す必要はなかったですね。 IPNの実装方法についてはこちらに詳しく載っています。 *この投稿は @kimaihack66 さん自身の投稿 (質問) に含まれていた内容を元に、個別の回答として抜き出して コミュニティwiki として投稿しました。*