From 8b2191df2f7d94aa299bd43dcbe97c94e5a61bbd Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期三, 20 十一月 2019 14:53:34 +0800
Subject: [PATCH] RocketMQ的消息整改

---
 fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java |  182 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 181 insertions(+), 1 deletions(-)

diff --git a/fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java b/fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
index 8eafe03..8984c2a 100644
--- a/fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
+++ b/fanli/src/main/java/com/yeshi/fanli/controller/CallBackController.java
@@ -1,12 +1,49 @@
 package com.yeshi.fanli.controller;
 
+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;
+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 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;
 
 /**
- * 鎺堟潈鍥炶皟
+ * 
  * 
  * @author Administrator
  *
@@ -14,6 +51,20 @@
 @Controller
 @RequestMapping("client/v1/callback")
 public class CallBackController {
+	@Resource
+	private ConfigService configService;
+
+	@Resource
+	private PushService pushService;
+
+	@Resource
+	private MsgDeviceReadStateService msgDeviceReadStateService;
+
+	@Resource(name = "producer")
+	private Producer producer;
+
+	@Resource
+	private BanLiShopOrderService banLiShopOrderService;
 
 	/**
 	 * 瀹㈡湇娑堟伅鍥炶皟
@@ -25,4 +76,133 @@
 
 	}
 
+	/**
+	 * 缇庢唇娑堟伅鍥炶皟
+	 * 
+	 * @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("璁惧鏍囪瘑");
+			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 {
+		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");
+	}
+
+	@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();
+					}
+				}
+			}
+	}
+
 }

--
Gitblit v1.8.0