package com.iamberry.wechat.handles.pay; import java.io.BufferedOutputStream; import java.io.IOException; import java.io.StringReader; import java.net.URLDecoder; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.iamberry.wechat.service.ImberryConfig; import org.apache.commons.lang3.StringUtils; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.xml.sax.InputSource; import com.iamberry.app.tool.log.RatFWLogger; import com.iamberry.wechat.core.entity.AdminUtils; import com.iamberry.wechat.core.entity.admin.ShopSystemRule; import com.iamberry.wechat.core.entity.coupon.CouponItem; import com.iamberry.wechat.core.entity.giftCard.AgentInfo; import com.iamberry.wechat.core.entity.giftCard.AgentMachine; import com.iamberry.wechat.core.entity.giftCard.AgentPayLogs; import com.iamberry.wechat.core.entity.lease.LeaseOrder; import com.iamberry.wechat.core.entity.machine.Machine; import com.iamberry.wechat.core.entity.member.CashLog; import com.iamberry.wechat.core.entity.member.Member; import com.iamberry.wechat.core.entity.mq.MQMessage; import com.iamberry.wechat.core.entity.order.Order; import com.iamberry.wechat.core.entity.order.ProbationOrder; import com.iamberry.wechat.core.entity.order.ProbationOrderDto; import com.iamberry.wechat.core.entity.probation.ProbationAwardRelu; import com.iamberry.wechat.core.entity.qrcode.QrcodeResult; import com.iamberry.wechat.core.entity.rent.RentApply; import com.iamberry.wechat.core.entity.wx.WxPayResult; import com.iamberry.wechat.face.admin.SystemService; import com.iamberry.wechat.face.cart.CartService; import com.iamberry.wechat.face.coupon.CouponItemService; import com.iamberry.wechat.face.giftCard.AgentMachineService; import com.iamberry.wechat.face.giftCard.AgentService; import com.iamberry.wechat.face.giftCard.GiftCardService; import com.iamberry.wechat.face.home.HomeService; import com.iamberry.wechat.face.lease.LeaseOrderService; import com.iamberry.wechat.face.member.CashLogService; import com.iamberry.wechat.face.member.MemberService; import com.iamberry.wechat.face.mq.EfastOrderService; import com.iamberry.wechat.face.order.AdminProbationOrderService; import com.iamberry.wechat.face.order.CodeService; import com.iamberry.wechat.face.order.ProbationShopOrderService; import com.iamberry.wechat.face.qrcode.TemporaryQrcodeService; import com.iamberry.wechat.handles.mq.MQServiceProxy; import com.iamberry.wechat.tools.DateTimeUtil; import com.iamberry.wechat.tools.NameUtils; import com.iamberry.wechat.tools.ResultInfo; import com.iamberry.wechat.tools.StaticInfo; import com.iamberry.wechat.tools.StrUtils; import com.iamberry.wechat.utils.SendMessageUtil; /** * @author 何秀刚 * Class Description: 微信支付回调handler,所有的支付回调,都在本类完成 * Create Date:2016年4月19日 * Update Date:2016年4月19日 */ @Controller @RequestMapping("/callback") public class ResponseWechatPayHandler { @Autowired private RatFWLogger ratFWLogger; private Object lock = new Object(); @Autowired private CartService cartService; @Autowired private MemberService memberService; @Autowired private MQServiceProxy mQservice; @Autowired CashLogService cashLogService; @Autowired CouponItemService couponItemService; @Autowired private AdminProbationOrderService adminProbationOrderService; @Autowired private ProbationShopOrderService probationShopOrderService; @Autowired private SendMessageUtil sendMessageUtil; @Autowired private HomeService homeService; @Autowired private TemporaryQrcodeService temporaryQrcodeService; @Autowired private RatFWLogger inLongLogger; @Autowired private LeaseOrderService leaseOrderService; @Autowired private AdminUtils adminUtils; @Autowired private CodeService codeService; @Autowired private AgentService agentService; @Autowired private GiftCardService cardService; @Autowired private AgentMachineService agentMachineService; @Autowired private SystemService systemService; @Autowired private EfastOrderService efastOrderService; /** * 销售订单支付回调方法 */ @RequestMapping("/orderPayBack") public synchronized void orderPayBack(HttpServletRequest request, HttpServletResponse response) throws IOException { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); //解析XML格式的数据 Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ //resXml:返回给微信服务器的数据 resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); //System.out.println("===========pay 117=============="); if (orderIdMD5.equals(wpr.getOutTradeNo())) { Date nowDate = new Date(); // 组装数据 Order order = new Order(); order.setSalesOrderid(orderIdMD5); order.setSalesStatus(2); // 已支付 order.setSalesTransactionId(wpr.getTransactionId()); // 微信支付ID order.setSalesTransactionDate(new Date()); // 微信支付时间 order.setSalesOpenid(wpr.getOpenid()); // 修改订单状态 int count = cartService.updateOrderStatus(order); //发送短信给运营部 ShopSystemRule rule = cartService.getReluByRid(241); try { String text = MessageFormat.format(ImberryConfig.ORDER_UPDATE_STATUS_TEXT, "发货"); codeService.informShipping(rule.getRuleDesc(),text); } catch (Exception e) { System.out.println("订单换货发送消息失败!"); } //System.out.println("===========pay 132 修改订单状态=============="); //修改优惠券状态 order=cartService.selectOrderInfoById(order); //System.out.println("===========pay 136 修改订单状态=============="+order.getSalesOrderid()); String couponId=order.getCouponId(); if(couponId!=null && !couponId.equals("")){ CouponItem couponItem=new CouponItem(); couponItem.setCouponItemId(couponId); couponItem.setCouponUseStatus(2); couponItem.setCouponUseDate(new Date()); couponItemService.updateCouponItemById(couponItem); } //更新账户余额 int balancePayAmount=order.getBalancePayAmount(); if(balancePayAmount>0){ Member member=new Member(); member.setUserOpenid(order.getSalesOpenid()); member.setUserIncome(-balancePayAmount); memberService.updateUserIncomeByOpenId(member); //现金使用记录 CashLog log=new CashLog(); log.setCashLogsIntroduction("订单支出"); log.setCashLogsNum(balancePayAmount); log.setCashLogsOpenid(member.getUserOpenid()); log.setCashLogsType(2); log.setCashLogsResType(3); log.setCashLogsOrderid(order.getSalesOrderid()); log.setCashLogsCreateDate(nowDate); count=cashLogService.addCashLog(log); } if (count < 1) { resXml = ""; } //System.out.println("===========pay 168 快速插入=============="+count); // 给订单的回调修改状态 try { MQMessage message = new MQMessage(); message.setServiceToMessage(orderIdMD5); message.setServiceOtherMessage(wpr.getTransactionId()); message.setServiceIsSend(2); // 没有推送的信息 message.setServiceStatus(1); // 推送成功 message.setServiceHandlerObjectName("cartServiceImpl"); message.setServiceHandlerMethodName("supdateStateByOrderId"); message.setServiceType(1); mQservice.insertMQMessage(message); } catch (Exception e) { // TODO: handle exception } //System.out.println("===========pay 182 插入返利到mq=============="+count); //rebackServices.loadSingleOrderReward(order); //添加到返利表 //rebackServices.loadSingleOrderReward(order); // 给百胜推送信息 try { MQMessage message = new MQMessage(); message.setServiceToMessage(orderIdMD5); message.setServiceOtherMessage("efast.trade.new.add"); message.setServiceIsSend(2); // 没有推送的信息 message.setServiceStatus(1); // 推送成功 message.setServiceType(1); // 添加订单信息 message.setServiceHandlerObjectName("efastOrderServiceImpl"); message.setServiceHandlerMethodName("addOrderInfoToEfast"); mQservice.insertMQMessage(message); } catch (Exception e) { //System.out.println("===========pay 201 插入返利到百胜失败=============="); } //System.out.println("===========pay 201 插入返利到百胜完成=============="); try { //修改用户购买记录为已购买 memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2); //更新用户绑定状态 Member member = memberService.getMemberByUserOpenId(order.getSalesOpenid()); if (member.getUserIsFlag()!= null && member.getUserIsFlag() == 1) { member.setUserIsFlag(2);//终身绑定 homeService.updateMemberIsFlagByOpenid(member); } QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getSalesOpenid());//为用户生成二维码 inLongLogger.info("为用户-->" + order.getSalesOpenid() + ",生成二维码:" + qr.getQroceUrl()); } catch (Exception e) { System.out.println("修改已购买状态和终身绑定失败!"); e.printStackTrace(); } } else { resXml = ""; ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!"); } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 解析xml片段为Map * @param xml * @return */ @SuppressWarnings({"unchecked"}) private Map parseXmlToList2(String xml) { Map retMap = new HashMap(); try { StringReader read = new StringReader(xml); // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入 InputSource source = new InputSource(read); // 创建一个新的SAXBuilder SAXBuilder sb = new SAXBuilder(); // 通过输入源构造一个Document Document doc = (Document) sb.build(source); Element root = doc.getRootElement();// 指向根节点 List es = root.getChildren(); if (es != null && es.size() != 0) { for (Element element : es) { retMap.put(element.getName(), element.getValue()); } } } catch (Exception e) { e.printStackTrace(); } return retMap; } //封装参数 public WxPayResult setWxPayResultObj(WxPayResult wpr ,Map m){ //解析参数 wpr.setAppid(m.get("appid").toString()); wpr.setBankType(m.get("bank_type").toString()); wpr.setCashFee(m.get("cash_fee").toString()); wpr.setFeeType(m.get("fee_type").toString()); wpr.setIsSubscribe(m.get("is_subscribe").toString()); wpr.setMchId(m.get("mch_id").toString()); wpr.setNonceStr(m.get("nonce_str").toString()); wpr.setOpenid(m.get("openid").toString()); wpr.setOutTradeNo(m.get("out_trade_no").toString()); wpr.setAttach(m.get("attach").toString()); wpr.setResultCode(m.get("result_code").toString()); wpr.setReturnCode(m.get("return_code").toString()); wpr.setSign(m.get("sign").toString()); wpr.setTimeEnd(m.get("time_end").toString()); wpr.setTotalFee(m.get("total_fee").toString()); wpr.setTradeType(m.get("trade_type").toString()); wpr.setTransactionId(m.get("transaction_id").toString()); return wpr; } /** * 试用订单支付回调方法 */ @RequestMapping("/probationOrderPayBack") public synchronized void probationOrderPayBack(HttpServletRequest request, HttpServletResponse response) throws IOException { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); //解析XML格式的数据 Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ //resXml:返回给微信服务器的数据 resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); if (orderIdMD5.equals(wpr.getOutTradeNo())) { // 组装数据 ProbationOrder order = new ProbationOrder(); order.setProbationOrderid(orderIdMD5); order.setProbationStatus(5);// 已支付 order.setProbationTransactionId(wpr.getTransactionId());// 微信支付ID order.setProbationTransactionTime(new Date());// 微信支付时间 order.setProbationOpenid(wpr.getOpenid()); ProbationOrderDto orderDto = probationShopOrderService.selectProbationOrderByOrderId(orderIdMD5); /*计算保存用户订单备注*/ if(orderDto != null && orderDto.getProbationEndTime() != null){ /* * 1.试用结束时间减去当前时间,为试用剩余时间 * 2.试用总天数(30)减去试用剩余时间,为实际已经试用天数(不含暂停天数) * 3.判断实际已经试用天数 符合最早的则奖励 */ long remainingTime = DateTimeUtil.getDiffTimeMinutes(new Date(), orderDto.getProbationEndTime()); long pastTime = 21 * 24 *60 - remainingTime; List< ProbationAwardRelu> list = probationShopOrderService.selectProbationAwardRelu(); for (ProbationAwardRelu awardRelu : list) { if((int)pastTime + 1 < awardRelu.getAwardNum().intValue()){ order.setProbationUserRemark(awardRelu.getAwardInfo()); break; } } } // 修改订单状态 及前台备注 boolean flag = adminProbationOrderService.updateProbationOrderStatus(order); try { //修改用户购买记录为已购买 memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2); //更新用户绑定状态 Member member = memberService.getMemberByUserOpenId(order.getProbationOpenid()); if (member.getUserIsFlag()!= null && member.getUserIsFlag() == 1) { member.setUserIsFlag(2);//终身绑定 homeService.updateMemberIsFlagByOpenid(member); } try { QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getProbationOpenid());//为用户生成二维码 inLongLogger.info("为用户-->" + order.getProbationOpenid() + ",生成二维码:" + qr.getQroceUrl()); } catch (Exception e) { System.out.println("为用户生成二维码失败!"); } } catch (Exception e) { System.out.println("修改已购买状态失败!"); e.printStackTrace(); } try { Member member = memberService.getMemberByUserOpenId(order.getProbationOpenid()); // 当前用户 probationShopOrderService.insertSalesOrder(orderIdMD5, member.getUserId()); } catch (Exception e) { System.out.println("试用订单转存到订单表出错!"); } double money = orderDto.getProbationYetAmount().intValue() / 100; try { sendMessageUtil.probationPaySuccess( ResultInfo.PAYSUCCESS, money + "元", orderDto.getProductName(), ResultInfo.PAYSUCCESSFOOT, order.getProbationOpenid(), ResultInfo.TRY_ORDER_DETAIL + "?orderId=" + orderIdMD5); } catch (Exception e) { System.out.println("推送支付成功消息失败!"); } if (!flag) { resXml = ""; } } else { resXml = ""; ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!"); } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 销售订单支付回调方法 */ @RequestMapping("/leaseOrderPayBack") public void leaseOrderPayBack(HttpServletRequest request, HttpServletResponse response) throws IOException { synchronized (lock) { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); //解析XML格式的数据 Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ //resXml:返回给微信服务器的数据 resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); //System.out.println("===========pay 117=============="); if (orderIdMD5.equals(wpr.getOutTradeNo())) { Date nowDate = new Date(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 组装订单数据 LeaseOrder order = new LeaseOrder(); order.setOrderId(orderIdMD5); order.setOrderStatus(2); // 已支付 order.setOrderTransactionId(wpr.getTransactionId()); // 微信支付ID order.setOrderTransactionDate(new Date()); // 微信支付时间 order.setOrderOpenid(wpr.getOpenid()); // 产生安全的code String code = adminUtils.byte2hex(adminUtils.createRandomByte()); try { code = NameUtils.getConfig("MACHINE_CODE") + adminUtils.byte2hex(adminUtils.createRandomByte()).substring(0, 10); } catch (Exception e) { code = NameUtils.getConfig("MACHINE_CODE") + UUID.randomUUID().toString().replaceAll("-", "").substring(0, 10); } order.setOrderInitCode(code); order.setOrderCodeState(1); //查询购买后机器的初始水量 ShopSystemRule ShopSystemRule = cartService.getReluByRid(211); //组装机器数据 Machine machine = new Machine(); machine.setMachineOrderId(orderIdMD5); machine.setMachineOpenid(order.getOrderOpenid()); machine.setMachineDeviceId(order.getOrderTransactionId()); machine.setMachineSurplusWater(ShopSystemRule.getRuleNum().intValue()); machine.setMachineConnectState(2); machine.setMachineInitState(2); machine.setMachineState(2); machine.setMachineInitCode(code); // 修改订单状态即添加激活码 int count = leaseOrderService.updateLeaseOrderInfo(order,machine); //System.out.println("===========pay 132 修改订单状态=============="); if (count < 1) { resXml = ""; } //System.out.println("===========pay 182 插入返利到mq=============="+count); //rebackServices.loadSingleOrderReward(order); //查询订单的收货人和押金 LeaseOrder leaseOrder = leaseOrderService.selectDepositByOrderId(orderIdMD5); //发送短信 // try{ // codeService.sendLeaseOrderToUser(leaseOrder.getOrderAddressTel(), // format.format(nowDate), leaseOrder.getOrderDeposit(), ShopSystemRule.getRuleNum().intValue()); // } catch (Exception e) { // inLongLogger.info("为订单-->" + order.getOrderId() + ",:" + "发送短信失败"); // } //添加到返利表 //rebackServices.loadSingleOrderReward(order); // 给百胜推送信息 try { MQMessage message = new MQMessage(); message.setServiceToMessage(orderIdMD5); message.setServiceOtherMessage("efast.trade.new.add"); message.setServiceIsSend(2); // 没有推送的信息 message.setServiceStatus(1); // 推送成功 message.setServiceType(1); // 添加订单信息 message.setServiceHandlerObjectName("efastOrderServiceImpl"); message.setServiceHandlerMethodName("addOrderInfoToEfast"); mQservice.insertMQMessage(message); } catch (Exception e) { //System.out.println("===========pay 201 插入返利到百胜失败=============="); } //System.out.println("===========pay 201 插入返利到百胜完成=============="); try { //修改用户购买记录为已购买 memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2); //更新用户绑定状态 Member member = memberService.getMemberByUserOpenId(order.getOrderId()); if (member.getUserIsFlag()!= null && member.getUserIsFlag() == 1) { member.setUserIsFlag(2);//终身绑定 homeService.updateMemberIsFlagByOpenid(member); } QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getOrderId());//为用户生成二维码 inLongLogger.info("为用户-->" + order.getOrderId() + ",生成二维码:" + qr.getQroceUrl()); } catch (Exception e) { System.out.println("修改已购买状态和终身绑定失败!"); e.printStackTrace(); } } else { resXml = ""; ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!"); } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } } /** * 付费代理订单支付回调方法 * 2017年2月17日 * @author muzx */ @RequestMapping("/agent_order_pay_back") public synchronized void agentOrderPayBack(HttpServletRequest request, HttpServletResponse response) throws IOException { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); //解析XML格式的数据 Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ //resXml:返回给微信服务器的数据 resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); inLongLogger.info(this, "orderIdMD5--->>" + orderIdMD5); if (orderIdMD5.equals(wpr.getOutTradeNo())) { // 组装数据 AgentPayLogs payLogs = new AgentPayLogs(); //单号格式:AOID000_ + 支付记录id + "_" + 代理商物流记录id + ("_" + 推荐人物流记录id)<若无推荐人则无此项> String[] ids = StrUtils.strToArr(orderIdMD5, "_"); payLogs.setPayId(Integer.parseInt(ids[1])); payLogs.setPayTransactionId(wpr.getTransactionId());// 微信支付ID payLogs.setPayTransactionDate(new Date());// 微信支付时间 payLogs.setPayStatus(2); // 修改支付状态 boolean flag1 = agentService.updatePayLogsById(payLogs); //修改当前代理商和推荐人物流记录状态 Integer agentId1 = Integer.parseInt(ids[2]); Integer agentId2 = ids.length > 3 ? Integer.parseInt(ids[3]) : null; boolean flag2 = cardService.saveCardAndMachine(1, wpr.getOpenid(), agentId1, agentId2); try { //推送百胜 AgentMachine agentMachine = agentMachineService.selectAgentMachine(Integer.parseInt(ids[2])); efastOrderService.giftCard(agentMachine.getAgentMachineAddressInfo(), "ZS1111111_" + agentMachine.getAgentMachineId(), agentMachine.getAgentMachineColorId(), agentMachine.getAgentMachineAddressName(), agentMachine.getAgentMachineAddressTel(), agentMachine.getAgentMachineOpenId()); } catch (Exception e) { inLongLogger.info(this, "推送百胜失败!"); e.printStackTrace(); } Member member = memberService.getMemberByUserOpenId(wpr.getOpenid()); AgentInfo agentInfo = agentService.selectAgentByOpenId(member.getUserOpenid()); //有推荐人 则推荐人推送消息 if(agentId2 != null){ try { //从规则表中获取:付费代理商支付金额 ShopSystemRule shopSystemRule1 = systemService.selectOneShopRuleById(224); int money = shopSystemRule1.getRuleNum().intValue(); if (agentInfo !=null && StringUtils.isNotEmpty(agentInfo.getAgentReferrerOpenid())) { sendMessageUtil.prizeReceivePush( "您好,您成功推荐一位代理商,详情为:", URLDecoder.decode(member.getUserNickname(), "UTF-8"), "Watero水时代", (money / 100) + "元", DateTimeUtil.format(new Date()), "美国watero净饮水一体机一台", "请点击完善收货地址并领取奖励。", agentInfo.getAgentReferrerOpenid(), ResultInfo.AGENT_REFERRER_MACHINE_PAGE+"?agentMachineId=" + agentId2 ); } } catch (Exception e) { inLongLogger.info(this, "给推荐人推送消息失败!"); e.printStackTrace(); } } if (!(flag1 && flag2)) { resXml = ""; } } else { resXml = ""; ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!"); } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 付费代理订商续费支付回调方法 * 2017年2月17日 * @author LJK */ @RequestMapping("/agent_renewal_pay_back") public synchronized void agentRenewalPayBack(HttpServletRequest request, HttpServletResponse response) throws IOException { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); //解析XML格式的数据 Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ //resXml:返回给微信服务器的数据 resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); System.out.println("orderIdMD5--------------->" + orderIdMD5); if (orderIdMD5.equals(wpr.getOutTradeNo())) { // 组装数据 AgentPayLogs payLogs = new AgentPayLogs(); //单号格式:AOID000_ + 支付记录id + "_" + 代理商物流记录id + ("_" + 推荐人物流记录id)<若无推荐人则无此项> String[] ids = StrUtils.strToArr(orderIdMD5, "_"); payLogs.setPayId(Integer.parseInt(ids[1])); payLogs.setPayTransactionId(wpr.getTransactionId());// 微信支付ID payLogs.setPayTransactionDate(new Date());// 微信支付时间 // 修改支付状态 boolean flag1 = agentService.updatePayLogsById(payLogs); //修改当前代理商和推荐人物流记录状态 Integer agentId1 = Integer.parseInt(ids[2]); //Integer agentId2 = ids.length > 3 ? Integer.parseInt(ids[3]) : null; AgentInfo agentInfo = agentService.selectAgentByOpenId(wpr.getOpenid()); int agentType = 1; if(agentInfo.getAgentIsHudredAgent() == 1){ agentType = 2; } boolean flag2 = cardService.saveCardAndMachine(agentType, wpr.getOpenid(), agentId1, null); try { //推送百胜 AgentMachine agentMachine = agentMachineService.selectAgentMachine(Integer.parseInt(ids[2])); efastOrderService.giftCard(agentMachine.getAgentMachineAddressInfo(), "ZS1111111_" + agentMachine.getAgentMachineId(), agentMachine.getAgentMachineColorId(), agentMachine.getAgentMachineAddressName(), agentMachine.getAgentMachineAddressTel(), agentMachine.getAgentMachineOpenId()); } catch (Exception e) { System.out.println("推送百胜失败!"); } if (!(flag1 && flag2)) { resXml = ""; } } else { resXml = ""; ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!"); } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } /** * 租赁申请回调 * @param request * @param response * @author 献 * @Time 2017年3月16日 */ @RequestMapping("/rent_appply") public void rentApplyCallback(HttpServletRequest request, HttpServletResponse response) { String inputLine; String notityXml = ""; String resXml = ""; try { //获取XML参数 while ((inputLine = request.getReader().readLine()) != null) { notityXml += inputLine; } request.getReader().close(); Map m = parseXmlToList2(notityXml); WxPayResult wpr = new WxPayResult(); wpr=setWxPayResultObj(wpr,m); //判断 if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){ resXml = ""; String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach()); if (orderIdMD5.equals(wpr.getOutTradeNo())) { RentApply apply = new RentApply(); apply.setApplyId(Integer.parseInt(orderIdMD5.replace("DJ00000000", ""))); apply.setApplyPayMoney(Integer.parseInt(wpr.getTotalFee())); leaseOrderService.updateApply(apply); } else { resXml = ""; } }else{ resXml = ""; } BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (Exception e) { } } /** * 随机生成一个密码 * @param len 密码总长度 * @param numLen 需要生成数字的总长度 * @return */ public String getPassward(int len,int numLen) { StringBuilder sb = new StringBuilder(len); Random rnd = new Random(); int num = 0; //除了数字以外的字母的总长度 if (len >= numLen) { num = len - numLen; } if (num > 0) { String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; int j = 0; while (j < num) { //生成一个随机的大写字母 String letter = String.valueOf(chars.charAt((int)(Math.random() * 26))); //该大写字母不能是O,I,L等字母,如果是O,I,L则继续生成并且不添加进sb字符串中 if (!"O".equals(letter) && !"I".equals(letter) && !"L".equals(letter)) { sb.append(letter); j++; } } } for (int i = 0; i < numLen; i++) sb.append("0123456789".charAt(rnd.nextInt("0123456789".length()))); return sb.toString(); } }