@Before public void setUp() throws Exception { Document document = Dom4jUtil.reader(Dom4jUtil.class.getResourceAsStream("test.xml")); document.accept(new Dom4jUtil.MyVistor()); }
@RequestMapping( value = "/api/integrate/flpaygame/receiver", method = {RequestMethod.GET, RequestMethod.POST}) public String excuteApi( @ModelAttribute("GpayForm") GpayForm gpayForm, Model model, HttpServletRequest request, HttpServletResponse response) { long runstarttime = System.currentTimeMillis(); logger.info( "parameter : notify_data={}, sign={}", new Object[] {gpayForm.getNotify_data(), gpayForm.getSign()}); String reStr = null; PrintWriter out = null; StringBuffer stringBuffer = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); stringBuffer.append("<Response>"); try { out = response.getWriter(); int len = request.getContentLength(); System.out.println("数据流长度===============" + len); if (len <= 0) { stringBuffer.append("<Ret>0</Ret>"); stringBuffer.append("</Response>"); out.write(stringBuffer.toString()); String res0 = Dom4jUtil.postSpancer(URLUtil.FL_VTION_POST_SP, Dom4jUtil.reqStr("0", "noorderInfo")); System.out.println("商户返回信息res0==" + res0); // 此时本地订单状态仍为0,临时订单 } else { // 获取HTTP请求的输入流 InputStream is = request.getInputStream(); // 已HTTP请求输入流建立一个BufferedReader对象 BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8")); // 读取HTTP请求内容 String buffer = null; StringBuffer sb = new StringBuffer(); while ((buffer = br.readLine()) != null) { // 在页面中显示读取到的请求参数 sb.append(buffer + "\n"); } System.out.println("接收飞流post发送数据流================\n" + sb.toString().trim()); reStr = sb.toString(); // 首先获取加密串 Map<String, String> map = Dom4jUtil.readFLStringXmlOut(reStr); String rsaStr = map.get("verifyString"); // 获取解密后的明码 // 需要先RSA解密验证数据是否和明码一致 String rsaStrs = RsaMessage.getStrDSADecInfo(rsaStr); // rsaStrs = "2323|1000|100016|2323323|100|1|101|feiliupay"; // 解密后的MAP信息 Map<String, String> rsaMap = Dom4jUtil.getRsaInfo(rsaStrs, rsaStr); // 如果解密数据和铭文不一致 // 如果支付状态不为1 if (!rsaMap.equals(map) || !"1".equals(map.get("ret"))) { System.out.println("返回支付结果后map对比====" + rsaMap.equals(map)); System.out.println("返回的ret===" + map.get("ret")); stringBuffer.append("<Ret>0</Ret>"); // 同时告诉私办事儿支付失败 // 不需要返回数据 @SuppressWarnings("unused") String res1 = Dom4jUtil.postSpancer( URLUtil.FL_VTION_POST_SP, Dom4jUtil.reqStr("0", map.get("orderId"))); // if("0".equals(Dom4jUtil.getRetMsg(res1))){ gamepayService.updateFLorderStatusByOrderId( gamepayService, 1, map.get("flOrderId"), map.get("cardStatus"), map.get("orderId")); // } } else { System.out.println("进入else,说明map值相等......"); // 发送支付结果请求到死板散而,看返回是否成功 String results = Dom4jUtil.postSpancer( URLUtil.FL_VTION_POST_SP, Dom4jUtil.reqStr("1", map.get("orderId"))); System.out.println("商户返回的通知结果====" + results); // 如果商户返回的为空与否 if (!"".equals(results) && results != null) { System.out.println("商户返回信息不为空......"); if ("1".equals(Dom4jUtil.getRetMsg(results))) { // 1为成功,其他为失败 // 私办事儿返回成功与否支付标识(1成功,0失败) // 成功再修改订单状态 /** 参数说明 2,为订单状态,支付成功 flOrderId飞流订单 cardStatus卡支付状态 orderId本地订单号 */ System.out.println("商户返回的成功信息,开始修改订单....."); gamepayService.updateFLorderStatusByOrderId( gamepayService, 2, map.get("flOrderId"), map.get("cardStatus"), map.get("orderId")); System.out.println("支付成功订单更新完毕....."); stringBuffer.append("<Ret>1</Ret>"); } else { System.out.println("进入商户返回不成功标识......"); stringBuffer.append("<Ret>0</Ret>"); // 私办事儿返回不成功支付标识 // 不需要返回数据, System.out.println("商户返回不成功标识,且更新订单信息为失败......"); gamepayService.updateFLorderStatusByOrderId( gamepayService, 1, map.get("flOrderId"), map.get("cardStatus"), map.get("orderId")); System.out.println("支付失败订单更新完毕......"); } } else { System.out.println("商户返回信息为空......"); stringBuffer.append("<Ret>0</Ret>"); } } stringBuffer.append("</Response>"); out.write(stringBuffer.toString()); } } catch (Throwable e) { logger.error(e.getMessage(), e); System.out.println("进入支付结果catch..."); // 发送给商户通知支付失败 Dom4jUtil.postSpancer(URLUtil.FL_VTION_POST_SP, Dom4jUtil.reqStr("0", "noorderInfo")); stringBuffer.append("<Ret>0</Ret>"); stringBuffer.append("</Response>"); out.write(stringBuffer.toString()); System.out.println("response给飞流支付异常信息....."); } finally { out.flush(); out.close(); logger.info("running:" + (System.currentTimeMillis() - runstarttime)); } System.out.println("the last response to feiliu info"); return null; }