Play Framework 2.0 を使用して PayPal IPN コントローラー (現在は Java) を実装しています。このコントローラーは、PayPal サーバーからフォーム エンコードされた POST 要求を受け取ります。Guillame Leone によるブログ投稿の Play 1.x コントローラーを Play 2.0 で動作するように調整しています。「params」がなくなったので、このタスクは少しトリッキーに思えます。
PayPal IPN プロセスには 2 つのステップがあります。
1) 要求本文をテキストとして解析し、PayPal が必要とする正確な応答を送信できるようにします。彼らが私に提出するのと同じ順序の同じ文字列でなければなりません。これは現在動作します:
@BodyParser.Of(BodyParser.TolerantText.class)
public static Result validation() throws Exception {
Logger.info("Received IPN request");
String str = "cmd=_notify-validate&" + request().body().asText();
Logger.info("Validation string: " + str);
2)検証リクエストをPayPalに送信し、「VERIFIED」応答で応答すると、フォームでエンコードされたリクエスト本文をデコードし、マップとしてアクセスしたいと考えています。しかし、アノテーションを使用してリクエスト本文をテキストとして解析済みであるため、以下はマップではなく null を返します。
Map<String,String[]> data = request().body().asFormUrlEncoded() //returns null
このリクエストを 2 回解析する最善の方法は何ですか?
(注釈を取り除き、TolerantText および FormEncoded パーサーを直接呼び出したいと思うかもしれませんが、その方法がわかりません!)