|
@@ -14,11 +14,13 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import com.iamberry.wechat.core.entity.ResultMsg;
|
|
|
import com.iamberry.wechat.core.entity.order.OrderItem;
|
|
|
+import com.iamberry.wechat.face.coupon.WelfareService;
|
|
|
import com.iamberry.wechat.tools.ResultInfo;
|
|
|
import com.iamberry.wechat.tools.SendMessageUtil;
|
|
|
import org.jdom.Document;
|
|
|
import org.jdom.Element;
|
|
|
import org.jdom.input.SAXBuilder;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Controller;
|
|
|
import org.springframework.web.bind.annotation.RequestMapping;
|
|
@@ -60,19 +62,13 @@ public class ResponseWechatPayHandler {
|
|
|
@Autowired
|
|
|
private RatFWLogger ratFWLogger;
|
|
|
|
|
|
- private Object lock = new Object();
|
|
|
+ private final Object lock = new Object();
|
|
|
|
|
|
@Autowired
|
|
|
private CartService cartService;
|
|
|
|
|
|
@Autowired
|
|
|
private PlaceOrderService placeOrderService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private PlaceInfoService placeInfoService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private MemberService memberService;
|
|
|
|
|
|
@Autowired
|
|
|
private SendMessageUtil sendMessageUtil;
|
|
@@ -84,10 +80,7 @@ public class ResponseWechatPayHandler {
|
|
|
private MQServiceProxy mQservice;
|
|
|
|
|
|
@Autowired
|
|
|
- private RebackServices rebackServices;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private QrcodeService qrcodeService; //二维码处理
|
|
|
+ private WelfareService welfareService;
|
|
|
|
|
|
@Autowired
|
|
|
CashLogService cashLogService;
|
|
@@ -103,150 +96,90 @@ public class ResponseWechatPayHandler {
|
|
|
HttpServletResponse response) throws IOException {
|
|
|
synchronized (lock) {
|
|
|
String inputLine;
|
|
|
- String notityXml = "";
|
|
|
+ StringBuilder notityXml = new StringBuilder();
|
|
|
String resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
|
|
|
try {
|
|
|
//获取XML参数
|
|
|
while ((inputLine = request.getReader().readLine()) != null) {
|
|
|
- notityXml += inputLine;
|
|
|
+ notityXml.append(inputLine);
|
|
|
}
|
|
|
request.getReader().close();
|
|
|
- //解析XML格式的数据
|
|
|
- Map m = parseXmlToList2(notityXml);
|
|
|
+ // 解析XML格式的数据
|
|
|
+ Map m = parseXmlToList2(notityXml.toString());
|
|
|
WxPayResult wpr = new WxPayResult();
|
|
|
- wpr=setWxPayResultObj(wpr,m);
|
|
|
- //判断
|
|
|
- if("SUCCESS".equalsIgnoreCase(wpr.getResultCode())){
|
|
|
- //resXml:返回给微信服务器的数据
|
|
|
- resXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
|
|
|
- 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());
|
|
|
-
|
|
|
- Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
|
|
|
- if(or.getSalesStatus() != 1){
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
|
|
|
-
|
|
|
- // 修改订单状态
|
|
|
- int count = cartService.updateOrderStatus(order);
|
|
|
-
|
|
|
-//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 = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
|
|
|
- }
|
|
|
-//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) {
|
|
|
- }
|
|
|
-
|
|
|
- //推送消息到微信
|
|
|
- DecimalFormat df=new DecimalFormat("0.00");
|
|
|
- String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
|
|
|
- try {
|
|
|
- sendMessageUtil.probationPaySuccess(
|
|
|
- ResultInfo.PAYSUCCESS,
|
|
|
- orderItemList.get(0).getItemProductName()+"...",
|
|
|
- or.getSalesOrderid(),
|
|
|
- payMoney,
|
|
|
- ResultInfo.sendRemark1,
|
|
|
- order.getSalesOpenid(),
|
|
|
- ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
|
|
|
- } catch (Exception e) {
|
|
|
- System.out.println("推送支付成功消息失败!");
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- //给父节点推送返利消息
|
|
|
-// rewardsMessage(member,orderIdMD5);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- } else {
|
|
|
- resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>";
|
|
|
- ratFWLogger.error(this, "订单:" + orderIdMD5 + "支付成功,但是没有通过校验!");
|
|
|
- }
|
|
|
- }else{
|
|
|
- resXml = "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文为空]]></return_msg></xml>";
|
|
|
+ wpr = setWxPayResultObj(wpr,m);
|
|
|
+ // 判断微信返回的内容是否为SUCCESS
|
|
|
+ assert "SUCCESS".equalsIgnoreCase(wpr.getResultCode());
|
|
|
+ // 验证数据
|
|
|
+ String orderIdMD5 = StaticInfo.orderIdMD5.decrypt(wpr.getAttach());
|
|
|
+ assert orderIdMD5.equals(wpr.getOutTradeNo());
|
|
|
+ // 组装数据
|
|
|
+ Date nowDate = new Date();
|
|
|
+ Order order = new Order();
|
|
|
+ order.setSalesOrderid(orderIdMD5);
|
|
|
+ order.setSalesStatus(2);
|
|
|
+ order.setSalesTransactionId(wpr.getTransactionId());
|
|
|
+ order.setSalesTransactionDate(nowDate);
|
|
|
+ order.setSalesOpenid(wpr.getOpenid());
|
|
|
+ Order or = adminOrderService.getShopOrderByOrderId(orderIdMD5);
|
|
|
+ assert or.getSalesStatus() == 1;
|
|
|
+ List<OrderItem> orderItemList = adminOrderService.getShopOrderItemByOrderId(or.getSalesOrderid());
|
|
|
+ // 修改订单状态
|
|
|
+ int count = cartService.updateOrderStatus(order);
|
|
|
+ // 修改优惠券状态
|
|
|
+ order=cartService.selectOrderInfoById(order);
|
|
|
+ String couponId=order.getCouponId();
|
|
|
+ if (couponId!=null && !"".equals(couponId)) {
|
|
|
+ welfareService.useCoupon(wpr.getOpenid(), orderIdMD5, couponId);
|
|
|
+ }
|
|
|
+ assert count >= 1;
|
|
|
+ // 给订单的回调修改状态
|
|
|
+ {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ // 给RST推送信息
|
|
|
+ {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //推送消息到微信
|
|
|
+ {
|
|
|
+ DecimalFormat df=new DecimalFormat("0.00");
|
|
|
+ String payMoney = df.format((float)or.getSalesYetAmount()/100) + "元";
|
|
|
+ sendMessageUtil.probationPaySuccess(
|
|
|
+ ResultInfo.PAYSUCCESS,
|
|
|
+ orderItemList.get(0).getItemProductName()+"...",
|
|
|
+ or.getSalesOrderid(),
|
|
|
+ payMoney,
|
|
|
+ ResultInfo.sendRemark1,
|
|
|
+ order.getSalesOpenid(),
|
|
|
+ ResultInfo.ORDER_DETAIL+order.getSalesOrderid());
|
|
|
}
|
|
|
BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
|
|
|
out.write(resXml.getBytes());
|
|
|
out.flush();
|
|
|
out.close();
|
|
|
} catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
|
|
|
+ out.write("<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[报文有误]]></return_msg></xml>".getBytes());
|
|
|
+ out.flush();
|
|
|
+ out.close();
|
|
|
+ LoggerFactory.getLogger(this.getClass()).error("", e);
|
|
|
}
|
|
|
}
|
|
|
}
|