java - 使用 Java Web 服务配置 PayPal IPN

标签 java spring web-services paypal paypal-ipn

我正在使用 Spring Web 服务进行 PayPal IPN 监听器配置。我在 Google 中搜索过,我无法获得很多关于 Java 实现的有用资源,有很多仅适用于 PHP 的示例。

我正在尝试使用 PayPal 定期付款 API 为我的 Web 应用程序创建定期付款选项。我有一些高级成员(member)资格,因为我的网站用户必须支付一些钱才能订阅成员(member)资格。我创建了计费计划、计费协议(protocol),并使用计费协议(protocol)响应中的批准 URL 从用户那里获得授权。我卡在了 IPN Listener 中。我不知道如何在 Spring Web 服务中配置 IPN 监听器。我需要在我的 Web 应用程序中具有自动续订功能。这是我的听众

@RequestMapping(value = "ipn", method = RequestMethod.POST)
    public @ResponseBody 
    Map<String,Object> IPNListener(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException {
        try {
            HttpClient client = HttpClientBuilder.create().build();
            HttpPost post = new HttpPost("https://ipnpb.sandbox.paypal.com/cgi-bin/webscr");
            List<NameValuePair> params = new ArrayList<NameValuePair>();

            params.add(new BasicNameValuePair("cmd", "_notify-validate")); //You need to add this parameter to tell PayPal to verify
            for (Enumeration<String> e = request.getParameterNames(); e.hasMoreElements();) {
                String name = e.nextElement();
                String value = request.getParameter(name);
                params.add(new BasicNameValuePair(name, value));
            }
            post.setEntity(new UrlEncodedFormEntity(params));

            HttpResponse resp = client.execute(post);
            InputStream is = resp.getEntity().getContent();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String result = "";
            String line = null;
            while ((line = br.readLine()) != null) {
                result += line;
            }
            String rc = result.trim();
            logger.info("IPN Listener Result :: " + rc);
            if ("VERIFIED".equals(rc)) {
                logger.info("IPN Listener Verified");
                // Add Premium Membership for User
            }
        } catch (Exception e) {
            logger.error("IPN Listener Exception ");
            e.printStackTrace();
        }
        return null;
    }

我的 Web 应用程序中有很多用户。在这里我不知道
如何识别哪个用户的支付完成了?
我需要哪个用户激活高级成员(member)资格?
有什么方法可以配置 membership_Id 和 User_Id 在创建计费计划或计费协议(protocol)时返回到 IPN Listener 中吗?

最佳答案

我找到了这个问题的解决方案。我使用创建的 Agreement_Id 来跟踪 user_idmembership_id。执行协议(protocol)后,我将 Agreement_Idmembership_iduser_id 存储在我的数据库中。我将在 IPN 监听器中以 Recurring_Payment_Id 的名称获取 Agreement_Id。我将使用 Agreement_id 查询我的数据库以获取 user_idmembership_id。希望这可以帮助某人。

关于java - 使用 Java Web 服务配置 PayPal IPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975753/

相关文章:

java - 列表 WebElement 始终从下拉列表中选择第一个元素,但我想选择第四个元素

java - 文件 lastModified() 返回 Wed Dec 31 19 :00:00 EST 1969

javascript - 智能解析字符串构建复杂的api调用

c# - Mono:Webservice 在 XML 中添加 UTF-8 BOM

java - 在 Restful Web 服务中打开 Tomcat 服务器上的 html 文件

java - 同步块(synchronized block)是否有最大可重入限制?

5000~ 用户的 Java Web 应用程序

java - 如果工厂模式强制您使用默认构造函数,那么应该如何设计需要参数化构造函数的类接口(interface)?

java - 基于 Spring 注解的 SAP 连接器

java - 为什么我无法使用虚拟主机名来获取我的微服务?