WxController.java
5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package com.w1hd.zzhnc.controller.wx;
import java.io.PrintWriter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.theyeasy.weixin.service.WxOpenMpService;
import org.theyeasy.weixin.service.WxOpenService;
import org.theyeasy.weixin.util.WXBizMsgCrypt;
import org.theyeasy.weixin.util.WxMessageUtil;
import com.w1hd.zzhnc.controller.pc.BaseController;
import com.w1hd.zzhnc.service.FansService;
import com.w1hd.zzhnc.service.SysWxauthorizeService;
import com.w1hd.zzhnc.util.CommonUtil;
import com.w1hd.zzhnc.vo.Vo_msg;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
@Controller
@RequestMapping("/wx")
public class WxController extends BaseController {
@Autowired
WxOpenService wxOpenService;
WxOpenMpService WxOpenMpService;
@Autowired
SysWxauthorizeService sysWxauthorizeService;
@Autowired
FansService fansService;
/*
* 授权回调,获取授权公众号
*/
@RequestMapping(value = "getAuthAuthorization", method = RequestMethod.POST)
@ResponseBody
public Vo_msg getAuthAuthorization(HttpServletRequest request, @RequestParam(value = "auth_code") String auth_code, @RequestParam(value = "merchantId", required = true) Integer merchantId) {
try {
String msg = wxOpenService.getApiGetAuthorizerInfo(auth_code, merchantId);
return new Vo_msg(0, "", msg);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return new Vo_msg(-1, "", e.getLocalizedMessage());
}
}
private final static String COMPONENT_VERIFY_TICKET = "component_verify_ticket";
// 接收微信每十分钟推送一次的授权ticket
@RequestMapping(value = "authorize")
public void acceptAuthrizeTicket(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "msg_signature") String msg_signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce) throws Exception {
try {
System.out.println("收到ticket推送:signature=" + msg_signature + " timestamp=" + timestamp + " nonce=" + nonce);
String data = WxMessageUtil.readStrFromInputStream(request);
Map<String, String> map = WxMessageUtil.parseXml(data);
String appid = map.get("AppId");
String encrypt = map.get("Encrypt");
String openToken = wxOpenService.getWxOpenConfigStorage().getToken();
String aseKey = wxOpenService.getWxOpenConfigStorage().getAesKey();
System.out.println("openToken=" + openToken + " aseKey=" + aseKey);
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(openToken, aseKey, appid);
// 得到解密后的消息内容
String decrpytMsg = wxBizMsgCrypt.decryptMsg(msg_signature, timestamp, nonce, encrypt);
Map<String, String> decryptMap = WxMessageUtil.parseXml(decrpytMsg);
if (null != decryptMap && decryptMap.containsKey("InfoType")) {
if (COMPONENT_VERIFY_TICKET.equals(decryptMap.get("InfoType").toLowerCase())) {
String verifyTicket = decryptMap.get("ComponentVerifyTicket");
CommonUtil.sendWeiXinTicket(appid, verifyTicket); // 发送到托管服务器
wxOpenService.getWxOpenConfigStorage().updateComponentVerifyTicket(verifyTicket);// 更新本地缓存变量
}
}
PrintWriter writer = response.getWriter();
writer.print("success");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// 接收公众号的事件消息
@RequestMapping(value = "/{APPID}/msg")
public void msg(HttpServletRequest request, HttpServletResponse response, @PathVariable("APPID") String appid, @RequestParam(value = "msg_signature") String msg_signature, @RequestParam(value = "timestamp") String timestamp, @RequestParam(value = "nonce") String nonce) throws Exception {
response.setCharacterEncoding("utf-8");
String msg = "success";
try {
String data = WxMessageUtil.readStrFromInputStream(request);
Map<String, String> map = WxMessageUtil.parseXml(data);
String encrypt = map.get("Encrypt");
String openToken = wxOpenService.getWxOpenConfigStorage().getToken();
String aseKey = wxOpenService.getWxOpenConfigStorage().getAesKey();
String openAppId = wxOpenService.getWxOpenConfigStorage().getAppId();
WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(openToken, aseKey, openAppId);
try {
wxOpenService.getWxMpService(appid);
} catch (Exception e) {
wxOpenService.initWxMpService(appid, "");// 注册
}
String decrypt = wxBizMsgCrypt.decryptMsg(msg_signature, timestamp, nonce, encrypt);
WxMpXmlMessage inMessage = WxMpXmlMessage.fromXml(decrypt);
WxMpXmlOutMessage outMessage = wxOpenService.route(inMessage, appid);
if (null != outMessage) msg = wxBizMsgCrypt.encryptMsg(outMessage.toXml(), timestamp, nonce);
} catch (Exception e) {
e.printStackTrace();
}
PrintWriter writer = response.getWriter();
writer.print(msg);
writer.close();
}
//红包中奖页面
@RequestMapping(value = "/redpackage")
public ModelAndView redpackage(String mny) {
ModelAndView mv = new ModelAndView("/weixin/redpackage");
mv.addObject("mny", mny);
return mv;
}
}