yujian
2019-07-23 c76ad0e79b95c0bceed8a0234211f2c7f0168b14
fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
@@ -1,12 +1,29 @@
package com.yeshi.fanli.controller;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.SignatureException;
import java.util.Date;
import javax.annotation.Resource;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.yeshi.fanli.entity.bus.msg.MsgDeviceReadState;
import com.yeshi.fanli.log.LogHelper;
import com.yeshi.fanli.service.inter.config.ConfigService;
import com.yeshi.fanli.service.inter.msg.MsgDeviceReadStateService;
import net.sf.json.JSONObject;
/**
 * 授权回调
 *
 * 
 * @author Administrator
 *
@@ -14,6 +31,11 @@
@Controller
@RequestMapping("client/v1/callback")
public class CallBackController {
   @Resource
   private ConfigService configService;
   @Resource
   private MsgDeviceReadStateService msgDeviceReadStateService;
   /**
    * 客服消息回调
@@ -25,4 +47,83 @@
   }
   /**
    * 美洽消息回调
    *
    * @param response
    */
   @RequestMapping(value = "meiQia")
   public void meiQia(HttpServletRequest request, HttpServletResponse response) {
      String auth = request.getHeader("Authorization");
      String queryString = request.getQueryString();
      LogHelper.test("美洽:queryString-" + queryString + "-auth:" + auth);
      BufferedReader br = null;
      StringBuilder sb = new StringBuilder("");
      try {
         br = request.getReader();
         String str;
         while ((str = br.readLine()) != null) {
            sb.append(str);
         }
         br.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
      LogHelper.test("美洽:body----" + sb.toString());
      String sign = "";
      try {
         sign = sign(sb.toString());
      } catch (SignatureException e) {
         e.printStackTrace();
      }
      if (!auth.equalsIgnoreCase(sign)) {
         LogHelper.test("美洽回调签名错误");
         return;
      }
      JSONObject json = JSONObject.fromObject(sb.toString());
      String msg = "";
      if (json != null) {
         String deviceOS = json.optString("deviceOS");
         String contentType = json.optString("contentType");
         if (contentType.equalsIgnoreCase("text"))
            msg = json.optString("content");
         else if (contentType.equalsIgnoreCase("photo"))
            msg = "[图片]";
         else if (contentType.equalsIgnoreCase("audio"))
            msg = "[语音]";
         String customizedId = json.optJSONObject("customizedData").optString("设备标识");
         msgDeviceReadStateService.addUnreadDeviceMsg(MsgDeviceReadState.TYPE_KEFU, customizedId,
               "android".equalsIgnoreCase(deviceOS) ? 1 : 2, 1, msg, new Date());
      }
   }
   public String sign(String raw_body) throws java.security.SignatureException {
      String key = "$2a$12$uC3EG/zSaSI37KKOgt1IgetDRHJY6Q2zEVDBr0DeWcwQbGNU7pewy";
      String result = "";
      try {
         SecretKeySpec signingKey = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA1");
         Mac mac = Mac.getInstance("HmacSHA1");
         mac.init(signingKey);
         byte[] rawHmac = mac.doFinal(raw_body.getBytes("UTF-8"));
         byte[] hexBytes = new org.apache.commons.codec.binary.Hex().encode(rawHmac);
         result = org.apache.commons.codec.binary.Base64.encodeBase64String(hexBytes).trim();
      } catch (Exception e) {
         throw new SignatureException("Failed to generate HMAC : " + e.getMessage());
      }
      return "meiqia_sign:" + result;
   }
   @RequestMapping(value = "test")
   public void test(PrintWriter out) {
      configService.getConfig(1L);
      out.print("success");
   }
}