我正在使用 Play Framework 2.0 实现一个 PayPal IPN 控制器(目前使用 Java),它从 PayPal 服务器接收表单编码的 POST 请求。我正在改编Guillame Leone 的博客文章中的 Play 1.x 控制器以使用 Play 2.0。由于“参数”现在消失了,这个任务似乎有点棘手。
PayPal IPN 流程有两个步骤:
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 发送验证请求,当他们回复“已验证”响应时,我想解码表单编码的请求正文并将其作为地图访问。但由于我已经使用注释将请求正文解析为文本,因此以下返回 null 而不是映射:
Map<String,String[]> data = request().body().asFormUrlEncoded() //returns null
将此请求解析两次的最佳方法是什么,一次作为文本(忽略表单编码的 MIME 类型),第二次作为表单编码的数据?
(看来我可能想摆脱注释并直接调用 TolerantText 和 FormEncoded 解析器,但我不知道该怎么做!)