|
@@ -0,0 +1,523 @@
|
|
|
|
+package com.iamberry.rst.service.wechat;
|
|
|
|
+
|
|
|
|
+import com.iamberry.app.tool.log.RatFWLogger;
|
|
|
|
+import com.iamberry.rst.faces.wechat.*;
|
|
|
|
+import com.iamberry.wechat.core.entity.member.Member;
|
|
|
|
+import com.iamberry.wechat.core.entity.wx.*;
|
|
|
|
+import com.iamberry.wechat.tools.*;
|
|
|
|
+import net.sf.json.JSONObject;
|
|
|
|
+import org.apache.commons.lang3.StringEscapeUtils;
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
+
|
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
|
+import java.net.URLEncoder;
|
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
|
+import java.util.Date;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * description : wechat handler的核心服务类
|
|
|
|
+ * @author 何秀刚
|
|
|
|
+ * create date:2016年3月10日
|
|
|
|
+ */
|
|
|
|
+@Service
|
|
|
|
+public class WeChatServiceImpl implements WeChatService {
|
|
|
|
+ @Autowired
|
|
|
|
+ private KeyWordService keyWordService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private RatFWLogger inLongLogger;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ImageTextInfoService imageTextInfoService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private MenuKeySetService menuKeySetService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private ImageTextMoreService imageTextMoreService;
|
|
|
|
+ @Autowired
|
|
|
|
+ private HomeService homeService;
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 处理微信发来的请求
|
|
|
|
+ * @param FromUserName
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @Override
|
|
|
|
+ public String processRequest(String FromUserName, String ToUserName, String MsgType, String CreateTime, String Content, String Event, String Ticket, String EventKey) {
|
|
|
|
+ // 创建Map,防止错误
|
|
|
|
+ Map<String, String> requestMap = new HashMap<String, String>();
|
|
|
|
+ requestMap.put("FromUserName", FromUserName);
|
|
|
|
+ requestMap.put("ToUserName", ToUserName);
|
|
|
|
+ requestMap.put("MsgType", MsgType);
|
|
|
|
+ requestMap.put("CreateTime", CreateTime);
|
|
|
|
+ requestMap.put("Content", Content);
|
|
|
|
+ requestMap.put("Event", Event);
|
|
|
|
+ requestMap.put("Ticket", Ticket);
|
|
|
|
+ requestMap.put("EventKey", EventKey);
|
|
|
|
+
|
|
|
|
+ String respMessage = null;
|
|
|
|
+ String fromUserName = null;// 发送方帐号(open_id)
|
|
|
|
+ String toUserName = null;// 公众帐号
|
|
|
|
+ long createTime = 0L;// 时间
|
|
|
|
+ String msgType = null;// 消息类型
|
|
|
|
+ try {
|
|
|
|
+ // 默认返回的文本消息内容
|
|
|
|
+ String respContent = "";
|
|
|
|
+ // 解析参数
|
|
|
|
+ fromUserName = requestMap.get("FromUserName");
|
|
|
|
+ toUserName = requestMap.get("ToUserName");
|
|
|
|
+ msgType = requestMap.get("MsgType");
|
|
|
|
+ createTime = new Date().getTime();
|
|
|
|
+
|
|
|
|
+ // 准备返回给微信服务器的文本消息对象
|
|
|
|
+ TextMessage textMessage = new TextMessage();
|
|
|
|
+ textMessage.setCreateTime(createTime);
|
|
|
|
+ textMessage.setToUserName(fromUserName);
|
|
|
|
+ textMessage.setFromUserName(toUserName);
|
|
|
|
+ textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
|
|
|
|
+
|
|
|
|
+ //多客服处理
|
|
|
|
+ String intxml = "<xml>"+
|
|
|
|
+ "<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
|
|
|
|
+ "<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
|
|
|
|
+ "<CreateTime>" + createTime + "</CreateTime>" +
|
|
|
|
+ "<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
|
|
|
|
+ /*
|
|
|
|
+ * 各种消息处理
|
|
|
|
+ */
|
|
|
|
+ if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)){ //文本消息
|
|
|
|
+ String content = requestMap.get("Content").trim();//去空格
|
|
|
|
+ if(!(content != null && !"".equals(content))) { // 消息为空的处理
|
|
|
|
+ respContent = ResultInfo.messageIsNullResponseText;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if(QQFace.isQqFace(content)){// QQ表情的处理
|
|
|
|
+ String xml = "<xml>"+
|
|
|
|
+ "<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
|
|
|
|
+ "<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
|
|
|
|
+ "<CreateTime>" + createTime + "</CreateTime>" +
|
|
|
|
+ "<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
|
|
|
|
+ return xml;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (content.startsWith(NameUtils.getConfig("PLACE_CODE_PREFIX"))) {// 激活码为“CODE”开头 则为代理商绑定
|
|
|
|
+ content = StringUtils.trim(content);
|
|
|
|
+ //respContent = bulidPlace(content, fromUserName);
|
|
|
|
+ } else {
|
|
|
|
+ // 文本类型的消息处理
|
|
|
|
+ Status status = messageHandler(content, requestMap, fromUserName, toUserName, createTime+"");
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return respContent = status.getCountext();
|
|
|
|
+ } else {
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ } else if(msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)){// 图片消息
|
|
|
|
+ //转发到多客服系统
|
|
|
|
+ return intxml;
|
|
|
|
+ } else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {// 地理位置消息
|
|
|
|
+ // 解析出地理位置消息
|
|
|
|
+ return intxml;
|
|
|
|
+ } else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {// 链接消息
|
|
|
|
+ return intxml;
|
|
|
|
+ } else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {// 音频消息
|
|
|
|
+ return intxml;
|
|
|
|
+ } else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送
|
|
|
|
+
|
|
|
|
+ String eventType = requestMap.get("Event");// 事件类型
|
|
|
|
+ String eventKey = requestMap.get("EventKey");
|
|
|
|
+ if(eventType.equals("SCAN")){
|
|
|
|
+ //扫描机器二维码返回跳转到完善信息页面
|
|
|
|
+ if (eventKey.indexOf(ResultInfo.barCodePrefix) != -1) {
|
|
|
|
+ Status status = scannQrcodeGiveGift(requestMap, fromUserName);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ } else {
|
|
|
|
+ // 已关注用户扫描二维码事件
|
|
|
|
+ int flag = subUserScannQrcodeEvent(requestMap, fromUserName);
|
|
|
|
+ if (flag == 1) {
|
|
|
|
+ /*Status status = getCouponImgText(requestMap);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();*/
|
|
|
|
+ respContent = ResultInfo.subDefaultResponseText;
|
|
|
|
+ } else if (flag == 0) {
|
|
|
|
+ respContent = ResultInfo.subDefaultResponseText;
|
|
|
|
+ } else if (flag == 4) {
|
|
|
|
+ respContent = "欢迎您关注美国watero!您已享受购买水机终身优惠价3280元(普通会员销售价3680元),并且购买即赠三年滤芯套装,快来购买吧!<a href=\"http://w.iamberry.com/watero/wechat/wxCart/goProductList\">点击购买</a>";
|
|
|
|
+ } else {
|
|
|
|
+ respContent = "欢迎您关注美国watero,恭喜您成为金牌会员。自己购买或者推荐朋友购买水机均将享受3280元优惠价,并免费赠送3年滤芯哦!点击菜单“分销中心-代理分销”可进入您的专属分销管理中心。";
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
|
|
|
|
+ // 订阅
|
|
|
|
+ if(requestMap.get("Ticket") != null){
|
|
|
|
+ //扫描机器二维码返回跳转到完善信息页面
|
|
|
|
+ if (eventKey.indexOf(ResultInfo.barCodePrefix) != -1) {
|
|
|
|
+ Status status = scannQrcodeSubGiveGift(requestMap, fromUserName);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ } else {
|
|
|
|
+ //未关注用户扫描二维码关注事件处理
|
|
|
|
+ Status status = scannQRcodeSub(requestMap, fromUserName);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ // 搜索公众号关注
|
|
|
|
+ Status status = queryWechatSub(fromUserName, requestMap);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ } else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
|
|
|
|
+ // 取消订阅
|
|
|
|
+
|
|
|
|
+ unSubScribe(fromUserName);
|
|
|
|
+ respContent = "Success";
|
|
|
|
+ } else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK) || eventType.equals("VIEW")) {
|
|
|
|
+ // 自定义菜单点击事件
|
|
|
|
+ Status status = clickWechatMenuEnent(requestMap);
|
|
|
|
+ if (status.isFlag()) {
|
|
|
|
+ return status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ respContent = status.getCountext();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 回复文本消息
|
|
|
|
+ textMessage.setContent(respContent);
|
|
|
|
+ respMessage = MessageUtil.textMessageToXml(textMessage);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ inLongLogger.debug(this, e.getMessage());
|
|
|
|
+ TextMessage textMessage = new TextMessage();
|
|
|
|
+ textMessage.setCreateTime(createTime);
|
|
|
|
+ textMessage.setToUserName(fromUserName);
|
|
|
|
+ textMessage.setFromUserName(toUserName);
|
|
|
|
+ textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
|
|
|
|
+ textMessage.setContent(ResultInfo.tryCatchDefaultResponseText);
|
|
|
|
+ respMessage = MessageUtil.textMessageToXml(textMessage);
|
|
|
|
+ }
|
|
|
|
+ return respMessage;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 扫码进入赠送礼品信息页面(已关注)
|
|
|
|
+ * @param requestMap
|
|
|
|
+ */
|
|
|
|
+ public Status scannQrcodeGiveGift(Map<String, String> requestMap, String fromUserName) {
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ String senceid = requestMap.get("EventKey");//场景值
|
|
|
|
+ senceid = senceid.replaceAll(ResultInfo.barCodePrefix,"");//替换标识前的字符串
|
|
|
|
+ String str = bindingMachine(senceid, fromUserName);
|
|
|
|
+ status.setCountext(str);
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 扫码进入赠送礼品信息页面(未关注)
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ */
|
|
|
|
+ public Status scannQrcodeSubGiveGift(Map<String, String> requestMap, String fromUserName) {
|
|
|
|
+ //赋值&更新数据
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ Member member = refreshUserInfo(fromUserName);
|
|
|
|
+ String senceid = requestMap.get("EventKey");//场景值
|
|
|
|
+ senceid = senceid.replaceAll(ResultInfo.barCodePrefix,"");//替换标识前的字符串
|
|
|
|
+ String str = bindingMachine(senceid.trim(), fromUserName);
|
|
|
|
+ status.setCountext(str);
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 上海wateroPF扫码绑定机器关系
|
|
|
|
+ * @param senceid //机器条形码
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public String bindingMachine(String senceid, String fromUserName) {
|
|
|
|
+ StringBuilder str = new StringBuilder();
|
|
|
|
+ String url = NameUtils.getConfig("rst_base_url") + senceid;
|
|
|
|
+ Map<String,String> params = new HashMap<String,String>();
|
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
+ try {
|
|
|
|
+ //查询rst订单信息
|
|
|
|
+ String resultJson = HttpClient431Util.doGet(params,url,null,null,null);
|
|
|
|
+ resultJson = StringEscapeUtils.unescapeJava(resultJson); // unicode
|
|
|
|
+ inLongLogger.info("==========================获取机器信息成功,返回值为:" + resultJson + "=========================");
|
|
|
|
+ JSONObject jsonObject = JSONObject.fromObject(resultJson);
|
|
|
|
+ if (jsonObject.getInt("resultCode") != 200) {
|
|
|
|
+ str.append("尊敬的美国WaterO用户您好。\n" +
|
|
|
|
+ "经检测,您的机器为正品,可放心使用。\n" +
|
|
|
|
+ "如有疑问,请联系官方客服 4008006692.");
|
|
|
|
+ return str.toString();
|
|
|
|
+ }
|
|
|
|
+ JSONObject jsonMessage = jsonObject.getJSONObject("message");
|
|
|
|
+ if (jsonMessage.getInt("isBeing") == 2) {
|
|
|
|
+ str.append("尊敬的美国WaterO用户您好。\n" +
|
|
|
|
+ "经检测,您的机器为正品,可放心使用。\n" +
|
|
|
|
+ "如有疑问,请联系官方客服 4008006692.");
|
|
|
|
+ return str.toString();
|
|
|
|
+ }
|
|
|
|
+ str.append("您的<");
|
|
|
|
+ str.append(jsonMessage.getString("productType"));
|
|
|
|
+ str.append(">为正品,生产日期为:");
|
|
|
|
+ str.append(format.format(new Date(jsonMessage.getLong("producedTime"))));
|
|
|
|
+ str.append("。请放心使用。");
|
|
|
|
+ return str.toString();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ inLongLogger.info("==========================获取机器信息失败,机器条形码为:" + senceid + "=========================");
|
|
|
|
+ str.append("尊敬的美国WaterO用户您好。\n" +
|
|
|
|
+ "经检测,您的机器为正品,可放心使用。\n" +
|
|
|
|
+ "如有疑问,请联系官方客服 4008006692.");
|
|
|
|
+ return str.toString();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 已关注用户扫描二维码事件
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ public int subUserScannQrcodeEvent(Map<String, String> requestMap, String fromUserName) throws Exception {
|
|
|
|
+ String senceid = requestMap.get("EventKey");//已经关注用户扫描二维码触发事件:获取二维码场景值
|
|
|
|
+ Member member = refreshUserInfo(fromUserName);
|
|
|
|
+ // 是否更新数据
|
|
|
|
+ //boolean isNew = false;
|
|
|
|
+ //没绑关系、没有来源、上线是代理商时的id为空、没有微代理层关系 时, 则可以绑定用户关系
|
|
|
|
+// if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
|
|
|
|
+// isNew = true;
|
|
|
|
+// }
|
|
|
|
+ /* QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
|
|
|
|
+ inLongLogger.info("为用户-->" + fromUserName + ",生成二维码:" + qr.getQroceUrl());*/
|
|
|
|
+ return 1; //为用户绑定关系
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 未关注用户扫描二维码关注
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ * @return
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ public Status scannQRcodeSub(Map<String, String> requestMap, String fromUserName) throws Exception {
|
|
|
|
+ // 解析场景值
|
|
|
|
+ String senceid = requestMap.get("EventKey");//场景值
|
|
|
|
+ //赋值&更新数据
|
|
|
|
+ Member member = refreshUserInfo(fromUserName);
|
|
|
|
+ // 是否更新数据
|
|
|
|
+ boolean isNew = false;
|
|
|
|
+
|
|
|
|
+ if (member.getUserIsFlag() != null && member.getUserIsFlag().intValue() == 1) {
|
|
|
|
+ isNew = true;
|
|
|
|
+ }
|
|
|
|
+ int isMessage = 1; //buildRelation(member, senceid, isNew);
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ if (isMessage == 1) {//成功绑定关系 则推送优惠券图文
|
|
|
|
+ /*status = getCouponImgText(requestMap);*/
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ status.setCountext(ResultInfo.subDefaultResponseText);
|
|
|
|
+ }else if(isMessage == 0){
|
|
|
|
+ /* 用在分享二维码页面 从未关注公众号的用户B,通过点击用户A分享的二维码,关系就已经绑定,但是仍需要推送优惠券图文
|
|
|
|
+ * 故 判断A初始从未关注,而关系已经绑定,则推送优惠券 */
|
|
|
|
+ /*if(oldStatus == 1){
|
|
|
|
+ status = getCouponImgText(requestMap);
|
|
|
|
+ }else{
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ status.setCountext(ResultInfo.subDefaultResponseText);
|
|
|
|
+ }*/
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ status.setCountext(ResultInfo.subDefaultResponseText);
|
|
|
|
+ } else if (isMessage == 4) {
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ status.setCountext("欢迎您关注美国watero!您已享受购买水机终身优惠价3280元(普通会员销售价3680元),并且购买即赠三年滤芯套装,快来购买吧!<a href=\"http://w.iamberry.com/watero/wechat/wxCart/goProductList\">点击购买</a>");
|
|
|
|
+ } else{
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ status.setCountext("欢迎您关注美国watero,恭喜您成为金牌会员。自己购买或者推荐朋友购买水机均将享受3280元优惠价,并免费赠送3年滤芯哦!点击菜单“分销中心-代理分销”可进入您的专属分销管理中心。");
|
|
|
|
+ }
|
|
|
|
+ /*QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
|
|
|
|
+ inLongLogger.info("为用户-->" + fromUserName + ",生成二维码:" + qr.getQroceUrl());*/
|
|
|
|
+ //返回数据
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 用户自己搜索微信公众号关注
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @return
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ public Status queryWechatSub(String fromUserName, Map<String, String> requestMap) throws Exception {
|
|
|
|
+ //赋值&更新数据
|
|
|
|
+ refreshUserInfo(fromUserName);
|
|
|
|
+ //memberDao.updateUserFlagByOpenId(fromUserName); // 绑定用户关系
|
|
|
|
+ /*QrcodeResult qr = temporaryQrcodeService.applyTempQrcode(fromUserName);//为用户生成二维码
|
|
|
|
+ if(qr != null ){
|
|
|
|
+ inLongLogger.info("为用户-->" + fromUserName + ",生成二维结果成功!");
|
|
|
|
+ }*/
|
|
|
|
+
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ String respContent = ResultInfo.subDefaultResponseText;
|
|
|
|
+ status.setCountext(respContent);
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 更新微信用户信息
|
|
|
|
+ * 2016年11月17日
|
|
|
|
+ */
|
|
|
|
+ private Member refreshUserInfo(String openId){
|
|
|
|
+ JSONObject jsonObject = WeixinUtil.getUserInfo(openId);
|
|
|
|
+ String sex = jsonObject.getString("sex");//值为1时是男性,值为2时是女性,值为0时是未知
|
|
|
|
+ String city = jsonObject.getString("city");
|
|
|
|
+ String country = jsonObject.getString("country");
|
|
|
|
+ String province = jsonObject.getString("province");
|
|
|
|
+ String nickname = jsonObject.getString("nickname");
|
|
|
|
+ String headimgurl = jsonObject.getString("headimgurl");
|
|
|
|
+ try {
|
|
|
|
+ nickname = URLEncoder.encode(jsonObject.getString("nickname"), "UTF-8");
|
|
|
|
+ } catch (UnsupportedEncodingException e) {
|
|
|
|
+ nickname = "";
|
|
|
|
+ inLongLogger.error(this, e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ Member member = homeService.selectMemberInfoByOpenId(openId);
|
|
|
|
+ //赋值&更新会员数据
|
|
|
|
+ if (member != null && member.getUserId() != null) {
|
|
|
|
+ member.setUserOpenid(openId);
|
|
|
|
+ member.setUserNickname(nickname);
|
|
|
|
+ member.setUserSex(Integer.parseInt(sex));
|
|
|
|
+ member.setUserAddr(country+"-"+province+"-"+city);
|
|
|
|
+ member.setUserHead(headimgurl);
|
|
|
|
+ //userIsBought 暂存旧的关注状态
|
|
|
|
+ member.setUserIsBought(member.getUserStatus() == null ? 1 : member.getUserStatus());
|
|
|
|
+ member.setUserStatus(2); // 已关注
|
|
|
|
+ homeService.updateWechatMemberInfoByByOpenid(member);
|
|
|
|
+ } else {
|
|
|
|
+ member = new Member();
|
|
|
|
+ member.setUserNickname(nickname);
|
|
|
|
+ member.setUserSex(Integer.parseInt(sex));
|
|
|
|
+ member.setUserAddr(country+"-"+province+"-"+city);
|
|
|
|
+ member.setUserHead(headimgurl);
|
|
|
|
+ member.setUserStatus(2); // 已关注
|
|
|
|
+ member.setUserOpenid(openId);
|
|
|
|
+ member.setUserIsBought(1);
|
|
|
|
+ member.setUserIsFlag(1);
|
|
|
|
+ homeService.insertMemberInfo(member);
|
|
|
|
+ }
|
|
|
|
+ return member;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 用户取消关注时的事件
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ */
|
|
|
|
+ public void unSubScribe(String fromUserName) {
|
|
|
|
+ try {
|
|
|
|
+ // 更新用户状态
|
|
|
|
+ homeService.updateMemberStatusByOpenId(fromUserName);
|
|
|
|
+ // 更新渠道二维码信息,如果有
|
|
|
|
+ // qrcodeService.updateQRcodeStatusByUserOpenid(fromUserName);
|
|
|
|
+ // 待确认,是否微代理一旦取消关注就自动回收微代理的资格?
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ inLongLogger.error(this, e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 自定义菜单点击事件
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @return
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ public Status clickWechatMenuEnent(Map<String, String> requestMap) throws Exception {
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ // 事件KEY值,与创建自定义菜单时指定的KEY值对应
|
|
|
|
+ String eventKey = requestMap.get("EventKey").trim();
|
|
|
|
+ //保存消息记录
|
|
|
|
+ MenuKeySet menuKeySet = menuKeySetService.selectByPubNoAndKeyWord(NameUtils.getConfig("pubNo"), eventKey);
|
|
|
|
+ String respContent = ResultInfo.subDefaultResponseText;
|
|
|
|
+ if(menuKeySet != null){
|
|
|
|
+ if("1".equals(menuKeySet.getReType())){ //文本
|
|
|
|
+ respContent = menuKeySet.getRefText();
|
|
|
|
+ }else if("2".equals(menuKeySet.getReType())){//图文
|
|
|
|
+ List<ImageTextMore> imagetextMoreList = null;
|
|
|
|
+ ImageTextInfo imageTextInfo = imageTextInfoService.findImageTextInfoById(Long.parseLong(menuKeySet.getRefImageTextId()));
|
|
|
|
+ if(imageTextInfo != null) {
|
|
|
|
+ //判断是否多图文
|
|
|
|
+ if("2".equals(imageTextInfo.getImageTextType())){
|
|
|
|
+ imagetextMoreList = imageTextMoreService.findImageTextmore(imageTextInfo.getImageTextNo());
|
|
|
|
+ }
|
|
|
|
+ status.setFlag(true);
|
|
|
|
+ respContent = MessageManager.getImageTextInfo(requestMap, imageTextInfo, imagetextMoreList);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ status.setCountext(respContent);
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /***
|
|
|
|
+ * 消息处理
|
|
|
|
+ * @param content
|
|
|
|
+ * @param requestMap
|
|
|
|
+ * @param fromUserName
|
|
|
|
+ * @param toUserName
|
|
|
|
+ * @param createTime
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public Status messageHandler(String content, Map<String, String> requestMap, String fromUserName, String toUserName, String createTime) {
|
|
|
|
+ Status status = new Status();
|
|
|
|
+ status.setCountext(ResultInfo.messageDefaultResponseText);
|
|
|
|
+ status.setFlag(true);
|
|
|
|
+ KeyWord keyword = keyWordService.getByKeyWord(content);//是否命中关键字
|
|
|
|
+ if(keyword != null) {//判断是否存在关键字回复
|
|
|
|
+ if("1".equals(keyword.getReType())) {//文本
|
|
|
|
+ status.setCountext(keyword.getRefText());
|
|
|
|
+ status.setFlag(false);
|
|
|
|
+ } else if("2".equals(keyword.getReType())){//图文
|
|
|
|
+ List<ImageTextMore> imagetextMoreList = null;
|
|
|
|
+ ImageTextInfo imageTextInfo = imageTextInfoService.findImageTextInfoById(keyword.getRefImageTextId());
|
|
|
|
+ if(imageTextInfo != null) {//判断是否为多图文
|
|
|
|
+ if("2".equals(imageTextInfo.getImageTextType())){//判断是否多图文
|
|
|
|
+ imagetextMoreList = imageTextMoreService.findImageTextmore(imageTextInfo.getImageTextNo());
|
|
|
|
+ }
|
|
|
|
+ try {
|
|
|
|
+ String s = MessageManager.getImageTextInfo(requestMap, imageTextInfo, imagetextMoreList);
|
|
|
|
+ status.setCountext(s);
|
|
|
|
+ status.setFlag(true);
|
|
|
|
+ return status;
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ } else { // 如果没有命中关键字,直接接入到客服
|
|
|
|
+ String xml = "<xml>"+
|
|
|
|
+ "<ToUserName><![CDATA[" + fromUserName + "]]></ToUserName>" +
|
|
|
|
+ "<FromUserName><![CDATA[" + toUserName + "]]></FromUserName>" +
|
|
|
|
+ "<CreateTime>" + createTime + "</CreateTime>" +
|
|
|
|
+ "<MsgType><![CDATA[transfer_customer_service]]></MsgType></xml>";
|
|
|
|
+ status.setCountext(xml);
|
|
|
|
+ status.setFlag(true);
|
|
|
|
+ }
|
|
|
|
+ return status;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+}
|