如何在Play Framework Scala中实现PayPal IPN侦听器(控制器)

时间:2015-12-28 03:14:09

标签: scala paypal playframework paypal-ipn

我目前在使用Scala(Play Framework)编写的应用程序中使用PayPal按钮。

现在我正在尝试实施PayPal IPN而不是重定向。 根据PayPal文件

https://developer.paypal.com/docs/classic/ipn/gs_IPN/

用户完成付款后,事件流程为:

  1. PayPal使用各种变量向我的应用程序的监听器发布消息。
  2. 我的侦听器返回一个空的HTTP 200响应。
  3. 我的监听器执行HTTP POST以将完整的,未经更改的通知发送回PayPal。
  4. PayPal会发回一个单词 - VERIFIED或INVALID。
  5. 因此,我的控制器方法应如下所示:

      def payPalIpn() = Action { implicit request =>
        .... Get all PayPal Variables .......
    
        /* Send empty response with empty HTTP 200 response */
        Ok("")
    
        .... Make a POST request to PayPal site with all original PayPal's variables
    
      }
    

    这是我偶然发现的 - 在我返回OK(“”)后如何发出POST请求? 甚至可以在Play中使用吗?

    感谢有人能给我任何想法。

    安德烈。

2 个答案:

答案 0 :(得分:1)

对于Akka演员来说,这将是一个很好的用例:

def payPalIpn() = Action { implicit request =>
    .... Get all PayPal Variables .......

   actorSystem.actorSelection("paypal-ipn-actor") ! ValidateIPN(request.body)

    /* Send empty response with empty HTTP 200 response */
    Ok("")

  }

答案 1 :(得分:0)

如果我理解正确,您希望在操作中向PayPal发出POST请求。为此,您可以使用Play中的WS Client库。详细的教程在 https://www.playframework.com/documentation/2.4.x/ScalaWS