ResponseWechatPayHandler.java 46 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134
  1. package com.iamberry.wechat.handles.pay;
  2. import com.iamberry.app.tool.log.RatFWLogger;
  3. import com.iamberry.wechat.core.entity.AdminUtils;
  4. import com.iamberry.wechat.core.entity.OrderUtil;
  5. import com.iamberry.wechat.core.entity.admin.ShopSystemRule;
  6. import com.iamberry.wechat.core.entity.agentInfo.AgentOrder;
  7. import com.iamberry.wechat.core.entity.coupon.CouponItem;
  8. import com.iamberry.wechat.core.entity.coupon.CouponItemDto;
  9. import com.iamberry.wechat.core.entity.giftCard.AgentInfo;
  10. import com.iamberry.wechat.core.entity.giftCard.AgentMachine;
  11. import com.iamberry.wechat.core.entity.giftCard.AgentPayLogs;
  12. import com.iamberry.wechat.core.entity.lease.LeaseOrder;
  13. import com.iamberry.wechat.core.entity.machine.Machine;
  14. import com.iamberry.wechat.core.entity.member.Member;
  15. import com.iamberry.wechat.core.entity.mq.MQMessage;
  16. import com.iamberry.wechat.core.entity.order.Order;
  17. import com.iamberry.wechat.core.entity.order.OrderItem;
  18. import com.iamberry.wechat.core.entity.order.ProbationOrder;
  19. import com.iamberry.wechat.core.entity.order.ProbationOrderDto;
  20. import com.iamberry.wechat.core.entity.probation.ProbationAwardRelu;
  21. import com.iamberry.wechat.core.entity.qrcode.QrcodeResult;
  22. import com.iamberry.wechat.core.entity.receive.ChargerReceive;
  23. import com.iamberry.wechat.core.entity.rent.RentApply;
  24. import com.iamberry.wechat.core.entity.wx.WxPayResult;
  25. import com.iamberry.wechat.face.admin.SystemService;
  26. import com.iamberry.wechat.face.agentInfo.AgentPurchaseOrderService;
  27. import com.iamberry.wechat.face.apparatus.ApparatusService;
  28. import com.iamberry.wechat.face.cart.CartService;
  29. import com.iamberry.wechat.face.coupon.CouponItemService;
  30. import com.iamberry.wechat.face.giftCard.AgentMachineService;
  31. import com.iamberry.wechat.face.giftCard.AgentService;
  32. import com.iamberry.wechat.face.giftCard.GiftCardService;
  33. import com.iamberry.wechat.face.home.HomeService;
  34. import com.iamberry.wechat.face.lease.LeaseOrderService;
  35. import com.iamberry.wechat.face.member.CashLogService;
  36. import com.iamberry.wechat.face.member.MemberService;
  37. import com.iamberry.wechat.face.mq.EfastOrderService;
  38. import com.iamberry.wechat.face.order.AdminOrderService;
  39. import com.iamberry.wechat.face.order.AdminProbationOrderService;
  40. import com.iamberry.wechat.face.order.CodeService;
  41. import com.iamberry.wechat.face.order.ProbationShopOrderService;
  42. import com.iamberry.wechat.face.qrcode.TemporaryQrcodeService;
  43. import com.iamberry.wechat.face.receive.ChargReceiveService;
  44. import com.iamberry.wechat.handles.mq.MQServiceProxy;
  45. import com.iamberry.wechat.tools.*;
  46. import com.iamberry.wechat.tools.SendMessageUtil;
  47. import org.apache.commons.lang3.StringUtils;
  48. import org.jdom.Document;
  49. import org.jdom.Element;
  50. import org.jdom.input.SAXBuilder;
  51. import org.springframework.beans.factory.annotation.Autowired;
  52. import org.springframework.stereotype.Controller;
  53. import org.springframework.web.bind.annotation.RequestMapping;
  54. import org.xml.sax.InputSource;
  55. import javax.servlet.http.HttpServletRequest;
  56. import javax.servlet.http.HttpServletResponse;
  57. import java.io.BufferedOutputStream;
  58. import java.io.IOException;
  59. import java.io.StringReader;
  60. import java.net.URLDecoder;
  61. import java.text.DecimalFormat;
  62. import java.text.SimpleDateFormat;
  63. import java.util.*;
  64. /**
  65. * @author 何秀刚
  66. * Class Description: 微信支付回调handler,所有的支付回调,都在本类完成
  67. * Create Date:2016年4月19日
  68. * Update Date:2016年4月19日
  69. */
  70. @Controller
  71. @RequestMapping("/callback")
  72. public class ResponseWechatPayHandler {
  73. @Autowired
  74. private RatFWLogger ratFWLogger;
  75. private Object lock = new Object();
  76. @Autowired
  77. private CartService cartService;
  78. @Autowired
  79. private MemberService memberService;
  80. @Autowired
  81. private MQServiceProxy mQservice;
  82. @Autowired
  83. CashLogService cashLogService;
  84. @Autowired
  85. CouponItemService couponItemService;
  86. @Autowired
  87. private AdminProbationOrderService adminProbationOrderService;
  88. @Autowired
  89. private ProbationShopOrderService probationShopOrderService;
  90. @Autowired
  91. private SendMessageUtil sendMessageUtil;
  92. @Autowired
  93. private HomeService homeService;
  94. @Autowired
  95. private TemporaryQrcodeService temporaryQrcodeService;
  96. @Autowired
  97. private RatFWLogger inLongLogger;
  98. @Autowired
  99. private LeaseOrderService leaseOrderService;
  100. @Autowired
  101. private AdminUtils adminUtils;
  102. @Autowired
  103. private CodeService codeService;
  104. @Autowired
  105. private AgentService agentService;
  106. @Autowired
  107. private GiftCardService cardService;
  108. @Autowired
  109. private AgentMachineService agentMachineService;
  110. @Autowired
  111. private SystemService systemService;
  112. @Autowired
  113. private EfastOrderService efastOrderService;
  114. @Autowired
  115. private AgentPurchaseOrderService agentPurchaseOrderService;
  116. @Autowired
  117. private AdminOrderService adminOrderService;
  118. @Autowired
  119. private ApparatusService apparatusService;
  120. @Autowired
  121. private ChargReceiveService chargReceiveService;
  122. /**
  123. * 销售订单支付回调方法 -- tooth订单返回
  124. */
  125. @RequestMapping("/orderPayBack")
  126. public synchronized void orderPayBack(HttpServletRequest request,
  127. HttpServletResponse response) throws IOException {
  128. String inputLine;
  129. String notityXml = "";
  130. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  131. try {
  132. //获取XML参数
  133. while ((inputLine = request.getReader().readLine()) != null) {
  134. notityXml += inputLine;
  135. }
  136. request.getReader().close();
  137. //解析XML格式的数据
  138. Map<String, String> m = parseXmlToList2(notityXml);
  139. WxPayResult wpr = new WxPayResult();
  140. wpr=setWxPayResultObj(wpr,m);
  141. //判断
  142. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  143. //resXml:返回给微信服务器的数据
  144. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  145. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  146. //System.out.println("===========pay 117==============");
  147. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  148. /*免费领取充电器支付邮费---start*/
  149. if (orderIdMD5.startsWith("mflq")) {
  150. ChargerReceive cr = new ChargerReceive();
  151. cr.setReceiveOrderId(orderIdMD5);
  152. cr.setReceiveStatus(2);
  153. cr.setReceiveTransactionId(wpr.getTransactionId());
  154. cr.setReceiveTransactionDate(new Date());
  155. Integer flag = chargReceiveService.updateByOrderId(cr);
  156. if (flag < 1) {
  157. System.out.println("免费领取充电器支付邮费回调修改记录失败!");
  158. }
  159. /*免费领取充电器支付邮费---end*/
  160. } else {
  161. Date nowDate = new Date();
  162. // 组装数据
  163. Order order = new Order();
  164. order.setSalesOrderid(orderIdMD5);
  165. order.setSalesStatus(2); // 已支付
  166. order.setSalesTransactionId(wpr.getTransactionId()); // 微信支付ID
  167. order.setSalesTransactionDate(new Date()); // 微信支付时间
  168. order.setSalesOpenid(wpr.getOpenid());
  169. Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
  170. if (or.getSalesStatus() != 1) {
  171. return;
  172. }
  173. // 修改订单状态
  174. int count = cartService.updateOrderStatus(order);
  175. //发送短信给运营部
  176. /*ShopSystemRule rule = cartService.getReluByRid(241);
  177. try {
  178. String text = MessageFormat.format(ImberryConfig.ORDER_UPDATE_STATUS_TEXT, "发货");
  179. codeService.informShipping(rule.getRuleDesc(),text);
  180. } catch (Exception e) {
  181. System.out.println("订单换货发送消息失败!");
  182. }*/
  183. /*计算使用优惠券优惠的金额*/
  184. Integer couponAmount = 0;
  185. //修改优惠券状态
  186. order = cartService.selectOrderInfoById(order);
  187. String couponId = order.getCouponId();
  188. if (couponId != null && !couponId.equals("")) {
  189. CouponItem couponItem = new CouponItem();
  190. couponItem.setCouponItemId(couponId);
  191. couponItem.setCouponUseStatus(2);
  192. couponItem.setCouponUseDate(new Date());
  193. couponItemService.updateCouponItemById(couponItem);
  194. CouponItemDto couponItemDto = couponItemService.getCouponItemById(couponId);
  195. if (couponItemDto.getCouponType() == 1) { //按照金额
  196. couponAmount = couponItemDto.getCouponReduce() / 100;
  197. } else if (couponItemDto.getCouponType() == 2) { ////按照折扣
  198. couponAmount = or.getSalesAmount() - or.getSalesAmount() / (couponItemDto.getCouponReduce() / 100) / 100;
  199. }
  200. }
  201. /*-- 计算积分 ----*/
  202. List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(orderIdMD5);
  203. Integer allIntegral = 0; //总积分
  204. Integer allBrushAmount = 0; //牙刷总金额与优惠券相减 -- 未乘以3
  205. for (int i = 0; i < orderItemList.size(); i++) {
  206. OrderItem orderItem = orderItemList.get(i);
  207. Integer amount = orderItem.getItemProductDiscount() / 100; //商品优惠价
  208. if (orderItem.getItemProductType() == 100) { //类型为电动牙刷
  209. Integer integral = amount * (orderItem.getItemNum() * 3 - orderItem.getItemNum()); //计算牙刷*2的金额
  210. allIntegral += integral;
  211. } else {
  212. Integer integral = amount * (orderItem.getItemNum() * 3);
  213. allBrushAmount += integral;
  214. }
  215. }
  216. if (couponAmount > 0) { //有优惠券减去优惠券的金额 -- 先用牙刷总金额减去优惠券
  217. allBrushAmount += -couponAmount;
  218. }
  219. /**
  220. * start
  221. * 两种情况:
  222. * 1) 刷头金额低于抵扣金额时:支付金额*2;
  223. * 2) 刷头金额高于等于抵扣金额时:399*2
  224. */
  225. if(allBrushAmount < 0){ //刷头金额低于抵扣金额 ==> 牙刷金额*2 + (刷头金额 - 优惠券)*2
  226. allIntegral += allBrushAmount * 2; //牙刷减去(优惠券减去刷头的金额)
  227. }else{ //刷头金额高于等于抵扣金额
  228. //allIntegral += allBrushAmount * 3; //----- 删除
  229. }
  230. /*-----end-----*/
  231. ratFWLogger.error(this, "订单:" + orderIdMD5 + "订单使用优惠卷金额:" + couponAmount + "所得积分为:" + allIntegral);
  232. boolean flag = apparatusService.addStayIntegral(or.getSalesOpenid(), 3, allIntegral, or.getSalesOrderid(),null);
  233. ratFWLogger.info("积分是否入账:" + flag);
  234. /*----------计算积分-----------*/
  235. if (count < 1) {
  236. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  237. }
  238. // 给订单的回调修改状态
  239. try {
  240. MQMessage message = new MQMessage();
  241. message.setServiceToMessage(orderIdMD5);
  242. message.setServiceOtherMessage(wpr.getTransactionId());
  243. message.setServiceIsSend(2); // 没有推送的信息
  244. message.setServiceStatus(1); // 推送成功
  245. message.setServiceHandlerObjectName("cartServiceImpl");
  246. message.setServiceHandlerMethodName("supdateStateByOrderId");
  247. message.setServiceType(1);
  248. mQservice.insertMQMessage(message);
  249. } catch (Exception e) {
  250. // TODO: handle exception
  251. }
  252. //System.out.println("===========pay 182 插入返利到mq=============="+count);
  253. //rebackServices.loadSingleOrderReward(order);
  254. //添加到返利表
  255. //rebackServices.loadSingleOrderReward(order);
  256. // 给百胜推送信息
  257. try {
  258. MQMessage message = new MQMessage();
  259. message.setServiceToMessage(orderIdMD5);
  260. message.setServiceOtherMessage("efast.trade.new.add");
  261. message.setServiceIsSend(2); // 没有推送的信息
  262. message.setServiceStatus(1); // 推送成功
  263. message.setServiceType(1); // 添加订单信息
  264. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  265. message.setServiceHandlerMethodName("addOrderInfoToEfast");
  266. mQservice.insertMQMessage(message);
  267. } catch (Exception e) {
  268. //System.out.println("===========pay 201 插入返利到百胜失败==============");
  269. }
  270. //推送消息到微信
  271. DecimalFormat df = new DecimalFormat("0.00");
  272. String payMoney = df.format((float) or.getSalesYetAmount() / 100) + "元";
  273. try {
  274. sendMessageUtil.probationPaySuccess(
  275. ResultInfo.PAYSUCCESS,
  276. payMoney,
  277. orderItemList.get(0).getItemProductName() + "...",
  278. ResultInfo.sendRemark1,
  279. order.getSalesOpenid(),
  280. ResultInfo.ORDER_DETAIL + order.getSalesOrderid());
  281. } catch (Exception e) {
  282. System.out.println("推送支付成功消息失败!");
  283. }
  284. //System.out.println("===========pay 201 插入返利到百胜完成==============");
  285. try { //修改用户购买记录为已购买
  286. memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2);
  287. //更新用户绑定状态
  288. Member member = memberService.getMemberByUserOpenId(order.getSalesOpenid());
  289. if (member.getUserIsFlag() != null && member.getUserIsFlag() == 1) {
  290. member.setUserIsFlag(2);//终身绑定
  291. homeService.updateMemberIsFlagByOpenid(member);
  292. }
  293. QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getSalesOpenid());//为用户生成二维码
  294. inLongLogger.info("为用户-->" + order.getSalesOpenid() + ",生成二维码:" + qr.getQroceUrl());
  295. } catch (Exception e) {
  296. System.out.println("修改已购买状态和终身绑定失败!");
  297. e.printStackTrace();
  298. }
  299. }
  300. } else {
  301. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  302. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  303. }
  304. }else{
  305. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  306. }
  307. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  308. out.write(resXml.getBytes());
  309. out.flush();
  310. out.close();
  311. } catch (Exception e) {
  312. e.printStackTrace();
  313. }
  314. }
  315. /**
  316. * 销售订单支付回调方法 -- tooth订单返回
  317. */
  318. //@RequestMapping("/testOrderPayBack")
  319. public synchronized void testOrderPayBack(HttpServletRequest request,
  320. HttpServletResponse response, String orderId, String openId) throws IOException {
  321. String orderIdMD5 = orderId;
  322. if (true) {
  323. /*免费领取充电器支付邮费---start*/
  324. if (orderIdMD5.startsWith("mflq")) {
  325. ChargerReceive cr = new ChargerReceive();
  326. cr.setReceiveOrderId(orderIdMD5);
  327. cr.setReceiveStatus(2);
  328. cr.setReceiveTransactionId("");
  329. cr.setReceiveTransactionDate(new Date());
  330. Integer flag = chargReceiveService.updateByOrderId(cr);
  331. if (flag < 1) {
  332. System.out.println("免费领取充电器支付邮费回调修改记录失败!");
  333. }
  334. /*免费领取充电器支付邮费---end*/
  335. } else {
  336. Date nowDate = new Date();
  337. // 组装数据
  338. Order order = new Order();
  339. order.setSalesOrderid(orderIdMD5);
  340. order.setSalesStatus(2); // 已支付
  341. order.setSalesTransactionId(""); // 微信支付ID
  342. order.setSalesTransactionDate(new Date()); // 微信支付时间
  343. order.setSalesOpenid(openId);
  344. Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
  345. if (or.getSalesStatus() != 1) {
  346. return;
  347. }
  348. // 修改订单状态
  349. int count = cartService.updateOrderStatus(order);
  350. /*计算使用优惠券优惠的金额*/
  351. Integer couponAmount = 0;
  352. //修改优惠券状态
  353. order = cartService.selectOrderInfoById(order);
  354. String couponId = order.getCouponId();
  355. if (couponId != null && !couponId.equals("")) {
  356. CouponItem couponItem = new CouponItem();
  357. couponItem.setCouponItemId(couponId);
  358. couponItem.setCouponUseStatus(2);
  359. couponItem.setCouponUseDate(new Date());
  360. couponItemService.updateCouponItemById(couponItem);
  361. CouponItemDto couponItemDto = couponItemService.getCouponItemById(couponId);
  362. if (couponItemDto.getCouponType() == 1) { //按照金额
  363. couponAmount = couponItemDto.getCouponReduce() / 100;
  364. } else if (couponItemDto.getCouponType() == 2) { ////按照折扣
  365. couponAmount = or.getSalesAmount() - or.getSalesAmount() / (couponItemDto.getCouponReduce() / 100) / 100;
  366. }
  367. }
  368. /*-- 计算积分 ----*/
  369. List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(orderIdMD5);
  370. Integer allIntegral = 0; //总积分
  371. Integer allBrushAmount = 0; //牙刷总金额与优惠券相减 -- 未乘以3
  372. for (int i = 0; i < orderItemList.size(); i++) {
  373. OrderItem orderItem = orderItemList.get(i);
  374. Integer amount = orderItem.getItemProductDiscount() / 100; //商品优惠价
  375. if (orderItem.getItemProductType() == 100) { //类型为电动牙刷
  376. Integer integral = amount * (orderItem.getItemNum() * 3 - orderItem.getItemNum()); //计算牙刷*2的金额
  377. allIntegral += integral;
  378. } else {
  379. Integer integral = amount * (orderItem.getItemNum() * 3);
  380. allBrushAmount += integral;
  381. }
  382. }
  383. if (couponAmount > 0) { //有优惠券减去优惠券的金额 -- 先用牙刷总金额减去优惠券
  384. allBrushAmount += -couponAmount;
  385. }
  386. /**
  387. * start
  388. * 两种情况:
  389. * 1) 刷头金额低于抵扣金额时:支付金额*2;
  390. * 2) 刷头金额高于等于抵扣金额时:399*2
  391. */
  392. if(allBrushAmount < 0){ //刷头金额低于抵扣金额 ==> 牙刷金额*2 + (刷头金额 - 优惠券)*2
  393. allIntegral += allBrushAmount * 2; //牙刷减去(优惠券减去刷头的金额)
  394. }else{ //刷头金额高于等于抵扣金额
  395. //allIntegral += allBrushAmount * 3; //----- 删除
  396. }
  397. /*-----end-----*/
  398. ratFWLogger.error(this, "订单:" + orderIdMD5 + "订单使用优惠卷金额:" + couponAmount + "所得积分为:" + allIntegral);
  399. boolean flag = apparatusService.addStayIntegral(or.getSalesOpenid(), 3, allIntegral, or.getSalesOrderid(),null);
  400. ratFWLogger.info("积分是否入账:" + flag);
  401. /*----------计算积分-----------*/
  402. if (count < 1) {
  403. ratFWLogger.info("修改订单失败:" + flag);
  404. }
  405. // 给订单的回调修改状态
  406. try {
  407. MQMessage message = new MQMessage();
  408. message.setServiceToMessage(orderIdMD5);
  409. message.setServiceOtherMessage("");
  410. message.setServiceIsSend(2); // 没有推送的信息
  411. message.setServiceStatus(1); // 推送成功
  412. message.setServiceHandlerObjectName("cartServiceImpl");
  413. message.setServiceHandlerMethodName("supdateStateByOrderId");
  414. message.setServiceType(1);
  415. mQservice.insertMQMessage(message);
  416. } catch (Exception e) {
  417. // TODO: handle exception
  418. }
  419. // //推送消息到微信
  420. // DecimalFormat df = new DecimalFormat("0.00");
  421. // String payMoney = df.format((float) or.getSalesYetAmount() / 100) + "元";
  422. // try {
  423. // sendMessageUtil.probationPaySuccess(
  424. // ResultInfo.PAYSUCCESS,
  425. // payMoney,
  426. // orderItemList.get(0).getItemProductName() + "...",
  427. // ResultInfo.sendRemark1,
  428. // order.getSalesOpenid(),
  429. // ResultInfo.ORDER_DETAIL + order.getSalesOrderid());
  430. // } catch (Exception e) {
  431. // System.out.println("推送支付成功消息失败!");
  432. // }
  433. //System.out.println("===========pay 201 插入返利到百胜完成==============");
  434. // try { //修改用户购买记录为已购买
  435. // memberService.updateIsBaughtByOpenid(openId, 2);
  436. // //更新用户绑定状态
  437. // Member member = memberService.getMemberByUserOpenId(order.getSalesOpenid());
  438. // if (member.getUserIsFlag() != null && member.getUserIsFlag() == 1) {
  439. // member.setUserIsFlag(2);//终身绑定
  440. // homeService.updateMemberIsFlagByOpenid(member);
  441. // }
  442. // QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getSalesOpenid());//为用户生成二维码
  443. // inLongLogger.info("为用户-->" + order.getSalesOpenid() + ",生成二维码:" + qr.getQroceUrl());
  444. // } catch (Exception e) {
  445. // System.out.println("修改已购买状态和终身绑定失败!");
  446. // e.printStackTrace();
  447. // }
  448. }
  449. }
  450. }
  451. /**
  452. * 解析xml片段为Map
  453. * @param xml
  454. * @return
  455. */
  456. @SuppressWarnings({"unchecked"})
  457. private Map<String, String> parseXmlToList2(String xml) {
  458. Map<String, String> retMap = new HashMap<String, String>();
  459. try {
  460. StringReader read = new StringReader(xml);
  461. // 创建新的输入源SAX 解析器将使用 InputSource 对象来确定如何读取 XML 输入
  462. InputSource source = new InputSource(read);
  463. // 创建一个新的SAXBuilder
  464. SAXBuilder sb = new SAXBuilder();
  465. // 通过输入源构造一个Document
  466. Document doc = (Document) sb.build(source);
  467. Element root = doc.getRootElement();// 指向根节点
  468. List<Element> es = root.getChildren();
  469. if (es != null && es.size() != 0) {
  470. for (Element element : es) {
  471. retMap.put(element.getName(), element.getValue());
  472. }
  473. }
  474. } catch (Exception e) {
  475. e.printStackTrace();
  476. }
  477. return retMap;
  478. }
  479. //封装参数
  480. public WxPayResult setWxPayResultObj(WxPayResult wpr ,Map<String, String> m){
  481. //解析参数
  482. wpr.setAppid(m.get("appid").toString());
  483. wpr.setBankType(m.get("bank_type").toString());
  484. wpr.setCashFee(m.get("cash_fee").toString());
  485. wpr.setFeeType(m.get("fee_type").toString());
  486. wpr.setIsSubscribe(m.get("is_subscribe").toString());
  487. wpr.setMchId(m.get("mch_id").toString());
  488. wpr.setNonceStr(m.get("nonce_str").toString());
  489. wpr.setOpenid(m.get("openid").toString());
  490. wpr.setOutTradeNo(m.get("out_trade_no").toString());
  491. wpr.setAttach(m.get("attach").toString());
  492. wpr.setResultCode(m.get("result_code").toString());
  493. wpr.setReturnCode(m.get("return_code").toString());
  494. wpr.setSign(m.get("sign").toString());
  495. wpr.setTimeEnd(m.get("time_end").toString());
  496. wpr.setTotalFee(m.get("total_fee").toString());
  497. wpr.setTradeType(m.get("trade_type").toString());
  498. wpr.setTransactionId(m.get("transaction_id").toString());
  499. return wpr;
  500. }
  501. /**
  502. * 试用订单支付回调方法
  503. */
  504. @RequestMapping("/probationOrderPayBack")
  505. public synchronized void probationOrderPayBack(HttpServletRequest request,
  506. HttpServletResponse response) throws IOException {
  507. String inputLine;
  508. String notityXml = "";
  509. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  510. try {
  511. //获取XML参数
  512. while ((inputLine = request.getReader().readLine()) != null) {
  513. notityXml += inputLine;
  514. }
  515. request.getReader().close();
  516. //解析XML格式的数据
  517. Map<String, String> m = parseXmlToList2(notityXml);
  518. WxPayResult wpr = new WxPayResult();
  519. wpr=setWxPayResultObj(wpr,m);
  520. //判断
  521. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  522. //resXml:返回给微信服务器的数据
  523. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  524. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  525. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  526. // 组装数据
  527. ProbationOrder order = new ProbationOrder();
  528. order.setProbationOrderid(orderIdMD5);
  529. order.setProbationStatus(5);// 已支付
  530. order.setProbationTransactionId(wpr.getTransactionId());// 微信支付ID
  531. order.setProbationTransactionTime(new Date());// 微信支付时间
  532. order.setProbationOpenid(wpr.getOpenid());
  533. ProbationOrderDto orderDto = probationShopOrderService.selectProbationOrderByOrderId(orderIdMD5);
  534. /*计算保存用户订单备注*/
  535. if(orderDto != null && orderDto.getProbationEndTime() != null){
  536. /*
  537. * 1.试用结束时间减去当前时间,为试用剩余时间
  538. * 2.试用总天数(30)减去试用剩余时间,为实际已经试用天数(不含暂停天数)
  539. * 3.判断实际已经试用天数 符合最早的则奖励
  540. */
  541. long remainingTime = DateTimeUtil.getDiffTimeMinutes(new Date(), orderDto.getProbationEndTime());
  542. long pastTime = 21 * 24 *60 - remainingTime;
  543. List< ProbationAwardRelu> list = probationShopOrderService.selectProbationAwardRelu();
  544. for (ProbationAwardRelu awardRelu : list) {
  545. if((int)pastTime + 1 < awardRelu.getAwardNum().intValue()){
  546. order.setProbationUserRemark(awardRelu.getAwardInfo());
  547. break;
  548. }
  549. }
  550. }
  551. // 修改订单状态 及前台备注
  552. boolean flag = adminProbationOrderService.updateProbationOrderStatus(order);
  553. try { //修改用户购买记录为已购买
  554. memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2);
  555. //更新用户绑定状态
  556. Member member = memberService.getMemberByUserOpenId(order.getProbationOpenid());
  557. if (member.getUserIsFlag()!= null && member.getUserIsFlag() == 1) {
  558. member.setUserIsFlag(2);//终身绑定
  559. homeService.updateMemberIsFlagByOpenid(member);
  560. }
  561. try {
  562. QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getProbationOpenid());//为用户生成二维码
  563. inLongLogger.info("为用户-->" + order.getProbationOpenid() + ",生成二维码:" + qr.getQroceUrl());
  564. } catch (Exception e) {
  565. System.out.println("为用户生成二维码失败!");
  566. }
  567. } catch (Exception e) {
  568. System.out.println("修改已购买状态失败!");
  569. e.printStackTrace();
  570. }
  571. try {
  572. Member member = memberService.getMemberByUserOpenId(order.getProbationOpenid()); // 当前用户
  573. probationShopOrderService.insertSalesOrder(orderIdMD5, member.getUserId());
  574. } catch (Exception e) {
  575. System.out.println("试用订单转存到订单表出错!");
  576. }
  577. double money = orderDto.getProbationYetAmount().intValue() / 100;
  578. try {
  579. sendMessageUtil.probationPaySuccess(
  580. ResultInfo.PAYSUCCESS,
  581. money + "元",
  582. orderDto.getProductName(),
  583. ResultInfo.PAYSUCCESSFOOT,
  584. order.getProbationOpenid(),
  585. ResultInfo.TRY_ORDER_DETAIL + "?orderId=" + orderIdMD5);
  586. } catch (Exception e) {
  587. System.out.println("推送支付成功消息失败!");
  588. }
  589. if (!flag) {
  590. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  591. }
  592. } else {
  593. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  594. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  595. }
  596. }else{
  597. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  598. }
  599. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  600. out.write(resXml.getBytes());
  601. out.flush();
  602. out.close();
  603. } catch (Exception e) {
  604. e.printStackTrace();
  605. }
  606. }
  607. /**
  608. * 销售订单支付回调方法
  609. */
  610. @RequestMapping("/leaseOrderPayBack")
  611. public void leaseOrderPayBack(HttpServletRequest request,
  612. HttpServletResponse response) throws IOException {
  613. synchronized (lock) {
  614. String inputLine;
  615. String notityXml = "";
  616. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  617. try {
  618. //获取XML参数
  619. while ((inputLine = request.getReader().readLine()) != null) {
  620. notityXml += inputLine;
  621. }
  622. request.getReader().close();
  623. //解析XML格式的数据
  624. Map<String, String> m = parseXmlToList2(notityXml);
  625. WxPayResult wpr = new WxPayResult();
  626. wpr=setWxPayResultObj(wpr,m);
  627. //判断
  628. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  629. //resXml:返回给微信服务器的数据
  630. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  631. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  632. //System.out.println("===========pay 117==============");
  633. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  634. Date nowDate = new Date();
  635. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  636. // 组装订单数据
  637. LeaseOrder order = new LeaseOrder();
  638. order.setOrderId(orderIdMD5);
  639. order.setOrderStatus(2); // 已支付
  640. order.setOrderTransactionId(wpr.getTransactionId()); // 微信支付ID
  641. order.setOrderTransactionDate(new Date()); // 微信支付时间
  642. order.setOrderOpenid(wpr.getOpenid());
  643. // 产生安全的code
  644. String code = adminUtils.byte2hex(adminUtils.createRandomByte());
  645. try {
  646. code = NameUtils.getConfig("MACHINE_CODE") + adminUtils.byte2hex(adminUtils.createRandomByte()).substring(0, 10);
  647. } catch (Exception e) {
  648. code = NameUtils.getConfig("MACHINE_CODE") + UUID.randomUUID().toString().replaceAll("-", "").substring(0, 10);
  649. }
  650. order.setOrderInitCode(code);
  651. order.setOrderCodeState(1);
  652. //查询购买后机器的初始水量
  653. ShopSystemRule ShopSystemRule = cartService.getReluByRid(211);
  654. //组装机器数据
  655. Machine machine = new Machine();
  656. machine.setMachineOrderId(orderIdMD5);
  657. machine.setMachineOpenid(order.getOrderOpenid());
  658. machine.setMachineDeviceId(order.getOrderTransactionId());
  659. machine.setMachineSurplusWater(ShopSystemRule.getRuleNum().intValue());
  660. machine.setMachineConnectState(2);
  661. machine.setMachineInitState(2);
  662. machine.setMachineState(2);
  663. machine.setMachineInitCode(code);
  664. // 修改订单状态即添加激活码
  665. int count = leaseOrderService.updateLeaseOrderInfo(order,machine);
  666. //System.out.println("===========pay 132 修改订单状态==============");
  667. if (count < 1) {
  668. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  669. }
  670. //System.out.println("===========pay 182 插入返利到mq=============="+count);
  671. //rebackServices.loadSingleOrderReward(order);
  672. //查询订单的收货人和押金
  673. LeaseOrder leaseOrder = leaseOrderService.selectDepositByOrderId(orderIdMD5);
  674. //发送短信
  675. // try{
  676. // codeService.sendLeaseOrderToUser(leaseOrder.getOrderAddressTel(),
  677. // format.format(nowDate), leaseOrder.getOrderDeposit(), ShopSystemRule.getRuleNum().intValue());
  678. // } catch (Exception e) {
  679. // inLongLogger.info("为订单-->" + order.getOrderId() + ",:" + "发送短信失败");
  680. // }
  681. //添加到返利表
  682. //rebackServices.loadSingleOrderReward(order);
  683. // 给百胜推送信息
  684. try {
  685. MQMessage message = new MQMessage();
  686. message.setServiceToMessage(orderIdMD5);
  687. message.setServiceOtherMessage("efast.trade.new.add");
  688. message.setServiceIsSend(2); // 没有推送的信息
  689. message.setServiceStatus(1); // 推送成功
  690. message.setServiceType(1); // 添加订单信息
  691. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  692. message.setServiceHandlerMethodName("addOrderInfoToEfast");
  693. mQservice.insertMQMessage(message);
  694. } catch (Exception e) {
  695. //System.out.println("===========pay 201 插入返利到百胜失败==============");
  696. }
  697. //System.out.println("===========pay 201 插入返利到百胜完成==============");
  698. try { //修改用户购买记录为已购买
  699. memberService.updateIsBaughtByOpenid(wpr.getOpenid(), 2);
  700. //更新用户绑定状态
  701. Member member = memberService.getMemberByUserOpenId(order.getOrderId());
  702. if (member.getUserIsFlag()!= null && member.getUserIsFlag() == 1) {
  703. member.setUserIsFlag(2);//终身绑定
  704. homeService.updateMemberIsFlagByOpenid(member);
  705. }
  706. QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(order.getOrderId());//为用户生成二维码
  707. inLongLogger.info("为用户-->" + order.getOrderId() + ",生成二维码:" + qr.getQroceUrl());
  708. } catch (Exception e) {
  709. System.out.println("修改已购买状态和终身绑定失败!");
  710. e.printStackTrace();
  711. }
  712. } else {
  713. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  714. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  715. }
  716. }else{
  717. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  718. }
  719. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  720. out.write(resXml.getBytes());
  721. out.flush();
  722. out.close();
  723. } catch (Exception e) {
  724. e.printStackTrace();
  725. }
  726. }
  727. }
  728. /**
  729. * 付费代理订单支付回调方法
  730. * 2017年2月17日
  731. * @author muzx
  732. */
  733. @RequestMapping("/agent_order_pay_back")
  734. public synchronized void agentOrderPayBack(HttpServletRequest request,
  735. HttpServletResponse response) throws IOException {
  736. String inputLine;
  737. String notityXml = "";
  738. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  739. try {
  740. //获取XML参数
  741. while ((inputLine = request.getReader().readLine()) != null) {
  742. notityXml += inputLine;
  743. }
  744. request.getReader().close();
  745. //解析XML格式的数据
  746. Map<String, String> m = parseXmlToList2(notityXml);
  747. WxPayResult wpr = new WxPayResult();
  748. wpr=setWxPayResultObj(wpr,m);
  749. //判断
  750. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  751. //resXml:返回给微信服务器的数据
  752. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  753. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  754. inLongLogger.info(this, "orderIdMD5--->>" + orderIdMD5);
  755. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  756. // 组装数据
  757. AgentPayLogs payLogs = new AgentPayLogs();
  758. //单号格式:AOID000_ + 支付记录id + "_" + 代理商物流记录id + ("_" + 推荐人物流记录id)<若无推荐人则无此项>
  759. String[] ids = StrUtils.strToArr(orderIdMD5, "_");
  760. payLogs.setPayId(Integer.parseInt(ids[1]));
  761. payLogs.setPayTransactionId(wpr.getTransactionId());// 微信支付ID
  762. payLogs.setPayTransactionDate(new Date());// 微信支付时间
  763. payLogs.setPayStatus(2);
  764. // 修改支付状态
  765. boolean flag1 = agentService.updatePayLogsById(payLogs);
  766. //修改当前代理商和推荐人物流记录状态
  767. Integer agentId1 = Integer.parseInt(ids[2]);
  768. Integer agentId2 = ids.length > 3 ? Integer.parseInt(ids[3]) : null;
  769. boolean flag2 = cardService.saveCardAndMachine(1, wpr.getOpenid(), agentId1, agentId2);
  770. try {
  771. //推送百胜
  772. AgentMachine agentMachine = agentMachineService.selectAgentMachine(Integer.parseInt(ids[2]));
  773. efastOrderService.giftCard(agentMachine.getAgentMachineAddressInfo(), "ZS1111111_" + agentMachine.getAgentMachineId(), agentMachine.getAgentMachineColorId(),
  774. agentMachine.getAgentMachineAddressName(), agentMachine.getAgentMachineAddressTel(), agentMachine.getAgentMachineOpenId());
  775. } catch (Exception e) {
  776. inLongLogger.info(this, "推送百胜失败!");
  777. e.printStackTrace();
  778. }
  779. Member member = memberService.getMemberByUserOpenId(wpr.getOpenid());
  780. AgentInfo agentInfo = agentService.selectAgentByOpenId(member.getUserOpenid());
  781. //有推荐人 则推荐人推送消息
  782. if(agentId2 != null){
  783. try {
  784. //从规则表中获取:付费代理商支付金额
  785. ShopSystemRule shopSystemRule1 = systemService.selectOneShopRuleById(224);
  786. int money = shopSystemRule1.getRuleNum().intValue();
  787. if (agentInfo !=null && StringUtils.isNotEmpty(agentInfo.getAgentReferrerOpenid())) {
  788. sendMessageUtil.prizeReceivePush(
  789. "您好,您成功推荐一位代理商,详情为:",
  790. URLDecoder.decode(member.getUserNickname(), "UTF-8"),
  791. "Watero水时代",
  792. (money / 100) + "元",
  793. DateTimeUtil.format(new Date()),
  794. "美国watero净饮水一体机一台",
  795. "请点击完善收货地址并领取奖励。",
  796. agentInfo.getAgentReferrerOpenid(),
  797. ResultInfo.AGENT_REFERRER_MACHINE_PAGE+"?agentMachineId=" + agentId2
  798. );
  799. }
  800. } catch (Exception e) {
  801. inLongLogger.info(this, "给推荐人推送消息失败!");
  802. e.printStackTrace();
  803. }
  804. }
  805. if (!(flag1 && flag2)) {
  806. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  807. }
  808. } else {
  809. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  810. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  811. }
  812. }else{
  813. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  814. }
  815. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  816. out.write(resXml.getBytes());
  817. out.flush();
  818. out.close();
  819. } catch (Exception e) {
  820. e.printStackTrace();
  821. }
  822. }
  823. /**
  824. * 付费代理订商续费支付回调方法
  825. * 2017年2月17日
  826. * @author LJK
  827. */
  828. @RequestMapping("/agent_renewal_pay_back")
  829. public synchronized void agentRenewalPayBack(HttpServletRequest request,
  830. HttpServletResponse response) throws IOException {
  831. String inputLine;
  832. String notityXml = "";
  833. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  834. try {
  835. //获取XML参数
  836. while ((inputLine = request.getReader().readLine()) != null) {
  837. notityXml += inputLine;
  838. }
  839. request.getReader().close();
  840. //解析XML格式的数据
  841. Map<String, String> m = parseXmlToList2(notityXml);
  842. WxPayResult wpr = new WxPayResult();
  843. wpr=setWxPayResultObj(wpr,m);
  844. //判断
  845. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  846. //resXml:返回给微信服务器的数据
  847. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  848. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  849. System.out.println("orderIdMD5--------------->" + orderIdMD5);
  850. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  851. // 组装数据
  852. AgentPayLogs payLogs = new AgentPayLogs();
  853. //单号格式:AOID000_ + 支付记录id + "_" + 代理商物流记录id + ("_" + 推荐人物流记录id)<若无推荐人则无此项>
  854. String[] ids = StrUtils.strToArr(orderIdMD5, "_");
  855. payLogs.setPayId(Integer.parseInt(ids[1]));
  856. payLogs.setPayTransactionId(wpr.getTransactionId());// 微信支付ID
  857. payLogs.setPayTransactionDate(new Date());// 微信支付时间
  858. // 修改支付状态
  859. boolean flag1 = agentService.updatePayLogsById(payLogs);
  860. //修改当前代理商和推荐人物流记录状态
  861. Integer agentId1 = Integer.parseInt(ids[2]);
  862. //Integer agentId2 = ids.length > 3 ? Integer.parseInt(ids[3]) : null;
  863. AgentInfo agentInfo = agentService.selectAgentByOpenId(wpr.getOpenid());
  864. int agentType = 1;
  865. if(agentInfo.getAgentIsHudredAgent() == 1){
  866. agentType = 2;
  867. }
  868. boolean flag2 = cardService.saveCardAndMachine(agentType, wpr.getOpenid(), agentId1, null);
  869. try {
  870. //推送百胜
  871. AgentMachine agentMachine = agentMachineService.selectAgentMachine(Integer.parseInt(ids[2]));
  872. efastOrderService.giftCard(agentMachine.getAgentMachineAddressInfo(), "ZS1111111_" + agentMachine.getAgentMachineId(), agentMachine.getAgentMachineColorId(),
  873. agentMachine.getAgentMachineAddressName(), agentMachine.getAgentMachineAddressTel(), agentMachine.getAgentMachineOpenId());
  874. } catch (Exception e) {
  875. System.out.println("推送百胜失败!");
  876. }
  877. if (!(flag1 && flag2)) {
  878. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  879. }
  880. } else {
  881. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  882. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  883. }
  884. }else{
  885. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  886. }
  887. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  888. out.write(resXml.getBytes());
  889. out.flush();
  890. out.close();
  891. } catch (Exception e) {
  892. e.printStackTrace();
  893. }
  894. }
  895. /**
  896. * 租赁申请回调
  897. * @param request
  898. * @param response
  899. * @author 献
  900. * @Time 2017年3月16日
  901. */
  902. @RequestMapping("/rent_appply")
  903. public void rentApplyCallback(HttpServletRequest request,
  904. HttpServletResponse response) {
  905. String inputLine;
  906. String notityXml = "";
  907. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  908. try {
  909. //获取XML参数
  910. while ((inputLine = request.getReader().readLine()) != null) {
  911. notityXml += inputLine;
  912. }
  913. request.getReader().close();
  914. Map<String, String> m = parseXmlToList2(notityXml);
  915. WxPayResult wpr = new WxPayResult();
  916. wpr=setWxPayResultObj(wpr,m);
  917. //判断
  918. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  919. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  920. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  921. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  922. RentApply apply = new RentApply();
  923. apply.setApplyId(Integer.parseInt(orderIdMD5.replace("DJ00000000", "")));
  924. apply.setApplyPayMoney(Integer.parseInt(wpr.getTotalFee()));
  925. leaseOrderService.updateApply(apply);
  926. } else {
  927. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  928. }
  929. }else{
  930. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  931. }
  932. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  933. out.write(resXml.getBytes());
  934. out.flush();
  935. out.close();
  936. } catch (Exception e) {
  937. }
  938. }
  939. /**
  940. * 采购商品订单回调
  941. * @param request
  942. * @param response
  943. */
  944. @RequestMapping("/agentPurchaseOrderPayBack")
  945. public synchronized void agentPurchaseOrderPayBack(HttpServletRequest request, HttpServletResponse response)throws IOException {
  946. String inputLine;
  947. String notityXml = "";
  948. String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  949. try {
  950. //获取XML参数
  951. while ((inputLine = request.getReader().readLine()) != null) {
  952. notityXml += inputLine;
  953. }
  954. request.getReader().close();
  955. //解析XML格式的数据
  956. Map<String, String> m = parseXmlToList2(notityXml);
  957. WxPayResult wpr = new WxPayResult();
  958. wpr=setWxPayResultObj(wpr,m);
  959. //判断
  960. if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
  961. //resXml:返回给微信服务器的数据
  962. resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
  963. String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
  964. //System.out.println("===========pay 117==============");
  965. if (orderIdMD5.equals(wpr.getOutTradeNo())) {
  966. Date nowDate = new Date();
  967. // 组装数据
  968. AgentOrder agentOrder = new AgentOrder();
  969. agentOrder.setAgentStatus(OrderUtil.ORDERSTAUTS_PAID); // 已支付
  970. agentOrder.setAgentOrderid(orderIdMD5); //订单id
  971. agentOrder.setAgentTransactionId(wpr.getTransactionId()); // 微信支付ID
  972. agentOrder.setAgentTransactionDate(new Date()); // 微信支付时间
  973. //order.setSalesOpenid(wpr.getOpenid());
  974. // 修改订单状态
  975. int count = agentPurchaseOrderService.updateAgentPurchaseOrder(agentOrder);
  976. if (count < 1) {
  977. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  978. }
  979. //System.out.println("===========pay 168 快速插入=============="+count);
  980. // 给订单的回调修改状态
  981. try {
  982. MQMessage message = new MQMessage();
  983. message.setServiceToMessage(orderIdMD5);
  984. message.setServiceOtherMessage(wpr.getTransactionId());
  985. message.setServiceIsSend(2); // 没有推送的信息
  986. message.setServiceStatus(1); // 推送成功
  987. message.setServiceHandlerObjectName("cartServiceImpl");
  988. message.setServiceHandlerMethodName("supdateStateByOrderId");
  989. message.setServiceType(1);
  990. mQservice.insertMQMessage(message);
  991. } catch (Exception e) {
  992. // TODO: handle exception
  993. }
  994. //System.out.println("===========pay 201 插入返利到百胜=============="+count);
  995. // 给百胜推送信息
  996. try {
  997. MQMessage message = new MQMessage();
  998. message.setServiceToMessage(orderIdMD5);
  999. message.setServiceOtherMessage("efast.trade.new.add");
  1000. message.setServiceIsSend(2); // 没有推送的信息
  1001. message.setServiceStatus(1); // 推送成功
  1002. message.setServiceType(1); // 添加订单信息
  1003. message.setServiceHandlerObjectName("efastOrderServiceImpl");
  1004. message.setServiceHandlerMethodName("addAgentOrderToEfast");
  1005. mQservice.insertMQMessage(message);
  1006. } catch (Exception e) {
  1007. //System.out.println("===========pay 201 插入返利到百胜失败==============");
  1008. }
  1009. //System.out.println("===========pay 201 插入返利到百胜完成==============");
  1010. } else {
  1011. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
  1012. ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
  1013. }
  1014. }else{
  1015. resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
  1016. }
  1017. BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
  1018. out.write(resXml.getBytes());
  1019. out.flush();
  1020. out.close();
  1021. } catch (Exception e) {
  1022. e.printStackTrace();
  1023. }
  1024. }
  1025. /**
  1026. * 随机生成一个密码
  1027. * @param len 密码总长度
  1028. * @param numLen 需要生成数字的总长度
  1029. * @return
  1030. */
  1031. public String getPassward(int len,int numLen) {
  1032. StringBuilder sb = new StringBuilder(len);
  1033. Random rnd = new Random();
  1034. int num = 0;
  1035. //除了数字以外的字母的总长度
  1036. if (len >= numLen) {
  1037. num = len - numLen;
  1038. }
  1039. if (num > 0) {
  1040. String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  1041. int j = 0;
  1042. while (j < num) {
  1043. //生成一个随机的大写字母
  1044. String letter = String.valueOf(chars.charAt((int)(Math.random() * 26)));
  1045. //该大写字母不能是O,I,L等字母,如果是O,I,L则继续生成并且不添加进sb字符串中
  1046. if (!"O".equals(letter) && !"I".equals(letter) && !"L".equals(letter)) {
  1047. sb.append(letter);
  1048. j++;
  1049. }
  1050. }
  1051. }
  1052. for (int i = 0; i < numLen; i++)
  1053. sb.append("0123456789".charAt(rnd.nextInt("0123456789".length())));
  1054. return sb.toString();
  1055. }
  1056. }