/** * 回馈方法 当支付成功时,易宝会访问这里 用两种方法访问: 1. 引导用户的浏览器重定向(如果用户关闭了浏览器,就不能访问这里了) 2. * 易宝的服务器会使用点对点通讯的方法访问这个方法。(必须回馈success,不然易宝服务器会一直调用这个方法) * * @param req * @param resp * @return * @throws ServletException * @throws IOException */ public String back(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { /* * 1. 获取12个参数 */ String p1_MerId = req.getParameter("p1_MerId"); String r0_Cmd = req.getParameter("r0_Cmd"); String r1_Code = req.getParameter("r1_Code"); String r2_TrxId = req.getParameter("r2_TrxId"); String r3_Amt = req.getParameter("r3_Amt"); String r4_Cur = req.getParameter("r4_Cur"); String r5_Pid = req.getParameter("r5_Pid"); String r6_Order = req.getParameter("r6_Order"); String r7_Uid = req.getParameter("r7_Uid"); String r8_MP = req.getParameter("r8_MP"); String r9_BType = req.getParameter("r9_BType"); String hmac = req.getParameter("hmac"); /* * 2. 获取keyValue */ Properties props = new Properties(); props.load(this.getClass().getClassLoader().getResourceAsStream("payment.properties")); String keyValue = props.getProperty("keyValue"); /* * 3. 调用PaymentUtil的校验方法来校验调用者的身份 * >如果校验失败:保存错误信息,转发到msg.jsp * >如果校验通过: * * 判断访问的方法是重定向还是点对点,如果要是重定向 * 修改订单状态,保存成功信息,转发到msg.jsp * * 如果是点对点:修改订单状态,返回success */ boolean bool = PaymentUtil.verifyCallback( hmac, p1_MerId, r0_Cmd, r1_Code, r2_TrxId, r3_Amt, r4_Cur, r5_Pid, r6_Order, r7_Uid, r8_MP, r9_BType, keyValue); if (!bool) { req.setAttribute("code", "error"); req.setAttribute("msg", "无效的签名,支付失败!"); return "f:/jsps/msg.jsp"; } if (r1_Code.equals("1")) { orderService.updateStatus(r6_Order, 2); if (r9_BType.equals("1")) { req.setAttribute("code", "success"); req.setAttribute("msg", "恭喜,支付成功!"); return "f:/jsps/msg.jsp"; } else if (r9_BType.equals("2")) { resp.getWriter().print("success"); } } return null; }