admin
2019-11-23 486e22c57ca8a1e2dc6877b539e2f3add67250f1
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
@@ -3,8 +3,11 @@
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.security.SignatureException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Resource;
import javax.crypto.Mac;
@@ -14,11 +17,28 @@
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.yeshi.utils.wx.WXUtil;
import com.aliyun.openservices.ons.api.Message;
import com.aliyun.openservices.ons.api.Producer;
import com.google.gson.Gson;
import com.yeshi.fanli.dto.mq.order.OrderTopicTagEnum;
import com.yeshi.fanli.dto.mq.order.body.BanLiShopOrderMQMsg;
import com.yeshi.fanli.dto.push.PushContentDTO;
import com.yeshi.fanli.entity.bus.msg.MsgDeviceReadState;
import com.yeshi.fanli.entity.config.push.PushMsgFactory;
import com.yeshi.fanli.entity.shop.BanLiShopOrder;
import com.yeshi.fanli.exception.push.PushException;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import com.yeshi.fanli.service.inter.push.PushService;
import com.yeshi.fanli.service.inter.shop.BanLiShopOrderService;
import com.yeshi.fanli.util.StringUtil;
import com.yeshi.fanli.util.rocketmq.MQMsgBodyFactory;
import com.yeshi.fanli.util.rocketmq.MQTopicName;
import com.yeshi.fanli.util.shop.BanLiShopOrderUtil;
import com.yeshi.fanli.util.wx.BanLiShopWXPayUtil;
import net.sf.json.JSONObject;
@@ -35,7 +55,16 @@
   private ConfigService configService;
   @Resource
   private PushService pushService;
   @Resource
   private MsgDeviceReadStateService msgDeviceReadStateService;
   @Resource(name = "producer")
   private Producer producer;
   @Resource
   private BanLiShopOrderService banLiShopOrderService;
   /**
    * 客服消息回调
@@ -71,7 +100,7 @@
      } catch (IOException e) {
         e.printStackTrace();
      }
      LogHelper.test("美洽:body----" + sb.toString());
      String sign = "";
@@ -97,11 +126,22 @@
         else if (contentType.equalsIgnoreCase("audio"))
            msg = "[语音]";
         String customizedId = json.optJSONObject("customizedData").optString("设备标识");
         String uid = json.optJSONObject("customizedData").optString("用户ID");
         msgDeviceReadStateService.addUnreadDeviceMsg(MsgDeviceReadState.TYPE_KEFU, customizedId,
               "android".equalsIgnoreCase(deviceOS) ? 1 : 2, 1, msg, new Date());
         if (!StringUtil.isNullOrEmpty(uid))// 推送客服消息
         {
            PushContentDTO dto = PushMsgFactory.createMsgKefu();
            try {
               pushService.pushZNX(Long.parseLong(uid), dto.getTitle(), dto.getContent(), null, null);
            } catch (NumberFormatException e) {
               e.printStackTrace();
            } catch (PushException e) {
               e.printStackTrace();
            }
         }
      }
   }
   public String sign(String raw_body) throws java.security.SignatureException {
@@ -126,4 +166,43 @@
      out.print("success");
   }
   @RequestMapping(value = "vip")
   public void VIP(PrintWriter out) {
      out.print("success");
   }
   @RequestMapping(value = "banlishop/pay")
   public void banLiShopPay(HttpServletRequest request, PrintWriter out) {
      Map<String, String> map = WXUtil.parseXML(request);
      JSONObject json = JSONObject.fromObject(map);
      LogHelper.test("商城微信支付回调:" + json.toString());
      String sign = map.get("sign");
      map.remove("sign");
      boolean isSuccess = BanLiShopWXPayUtil.signIsRight(map, sign);
      if (isSuccess)
         if (map.get("return_code").equalsIgnoreCase("SUCCESS")
               && map.get("result_code").equalsIgnoreCase("SUCCESS")) {
            // 商户订单号
            String wxPayOrderNo = map.get("out_trade_no");
            // 订单号
            String orderNo = BanLiShopOrderUtil.getOrderNoFromWXPayOrderNo(wxPayOrderNo);
            if (!StringUtil.isNullOrEmpty(orderNo)) {
               BanLiShopOrder order = banLiShopOrderService.selectByOrderNo(orderNo);
               if (order != null) {// 支付成功消息推送
                  BanLiShopOrderMQMsg msg = new BanLiShopOrderMQMsg(order.getId(), order.getUid(),
                        new BigDecimal(map.get("total_fee")).multiply(new BigDecimal("0.01")));
                  Message message =MQMsgBodyFactory.create(MQTopicName.TOPIC_ORDER,
                        OrderTopicTagEnum.banLiShopOrderPaid, msg);
                  producer.send(message);
                  Map<String, String> returnMap = new HashMap<>();
                  returnMap.put("return_code", "SUCCESS");
                  returnMap.put("return_msg", "OK");
                  out.print(WXUtil.loadWXMessage(returnMap));
                  out.close();
               }
            }
         }
   }
}