全部交易,我在春季mvc面临一个问题。从我们的一个外部系统说,支付网关将在他们的交易完成后给我们打电话[/ getRespFromExternal],不幸的是他们正在给我们打电话多次。
在方法getRespFromExternal中,我们调用内部webservice来处理支付确认,在WS调用完成之前我从外部系统获得另一个重复调用。所以我在控制器中的payResponse方法中得到payInd为null。在第一次调用[WS调用]完成后,来自控制器的/ payResponse甚至没有调用。对不起我的英语不好。请指教我。
外部系统调用的服务方法:
@RequestMapping(value="/getRespFromExternal",method=RequestMethod.POST)
public String getRespFromExternal(HttpServletRequest httpRequest,HttpServletResponse httpResponse,HttpSession session){
if (httpRequest != null && session.getAttribute("extRespId") == null) {
session.setAttribute("extRespId", httpRequest.getParameter("tranID"));
// internal web service call
callInternalWS(); // to process payment
before processing above WS method i get another call from external[/getRespFromExternal] for second time;
session.setAttribute("payInd", "Y");
return "redirect:/payResponse/";
}
return "redirect:/payResponse/";
}
控制器方法:
@RequestMapping(value = "/payResponse/", method = RequestMethod.GET)
public ModelAndView payResponse(HttpServletRequest request, HttpSession session) {
String payInd = (String) session.getAttribute("payInd");
System.out.println("payInd --> "+payInd);
if (payInd != null && payInd.trim().equalsIgnoreCase("Y") ) {
}
}
答案 0 :(得分:0)
如果您使用相同的交易多次调用您的服务,则应该将其视为错误。
我假设您使用交易数据库记录付款。
如果是这样,那么您可以使事务id成为数据库中的唯一键。如果由于重复键而导致记录事务的SQL插入或更新失败,请重定向到其他URL以报告错误。