我正在使用Spring Web Service进行PayPal IPN侦听器配置。我在谷歌上搜索了一下,我找不到太多有用的Java实现资源,有很多仅适用于PHP的示例。
我正在尝试使用PayPal定期付款 API 为我的 Web 应用程序创建定期付款选项。我有一些高级会员资格,我的网站用户必须支付一些钱才能订阅会员资格。我创建了计费计划、计费协议,并使用计费协议响应中的审批 URL 从用户那里获取授权。我卡在 IPN 侦听器中。我不知道如何在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 应用程序中有很多用户。在这里我不知道
如何识别哪个用户的付款已完成?
我需要哪个用户来激活高级会员资格?
有没有办法配置membership_Id和User_Id以在创建计费计划或计费协议时重新进入 IPN 侦听器?
我得到了这个问题的解决方案。我使用创建的Agreement_Id
来跟踪user_id
和membership_id
。执行协议后,我将Agreement_Id
与membership_id
和user_id
一起存储在我的数据库中。我将以 IPN 侦听器中的Recurring_Payment_Id
的名义获得Agreement_Id
。我将查询我的数据库以使用Agreement_id
获取user_id
和membership_id
。希望这可能会对某人有所帮助。