示例#1
0
 /**
  * 回馈方法 当支付成功时,易宝会访问这里 用两种方法访问: 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;
 }