InMsgParser.java
25.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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
/**
* Copyright (c) 2011-2014, James Zhan 詹波 (jfinal@126.com).
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.jfinal.weixin.sdk.msg;
import java.util.ArrayList;
import java.util.List;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import com.jfinal.kit.LogKit;
import com.jfinal.kit.StrKit;
import com.jfinal.weixin.iot.msg.InEquDataMsg;
import com.jfinal.weixin.iot.msg.InEqubindEvent;
import com.jfinal.weixin.sdk.msg.in.InImageMsg;
import com.jfinal.weixin.sdk.msg.in.InLinkMsg;
import com.jfinal.weixin.sdk.msg.in.InLocationMsg;
import com.jfinal.weixin.sdk.msg.in.InMsg;
import com.jfinal.weixin.sdk.msg.in.InNotDefinedMsg;
import com.jfinal.weixin.sdk.msg.in.InShortVideoMsg;
import com.jfinal.weixin.sdk.msg.in.InTextMsg;
import com.jfinal.weixin.sdk.msg.in.InVideoMsg;
import com.jfinal.weixin.sdk.msg.in.InVoiceMsg;
import com.jfinal.weixin.sdk.msg.in.card.InCardPassCheckEvent;
import com.jfinal.weixin.sdk.msg.in.card.InCardPayOrderEvent;
import com.jfinal.weixin.sdk.msg.in.card.InCardSkuRemindEvent;
import com.jfinal.weixin.sdk.msg.in.card.InMerChantOrderEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUpdateMemberCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserConsumeCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserGetCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserGiftingCardEvent;
import com.jfinal.weixin.sdk.msg.in.card.InUserPayFromCardEvent;
import com.jfinal.weixin.sdk.msg.in.event.InCustomEvent;
import com.jfinal.weixin.sdk.msg.in.event.InFollowEvent;
import com.jfinal.weixin.sdk.msg.in.event.InLocationEvent;
import com.jfinal.weixin.sdk.msg.in.event.InMassEvent;
import com.jfinal.weixin.sdk.msg.in.event.InMenuEvent;
import com.jfinal.weixin.sdk.msg.in.event.InNotDefinedEvent;
import com.jfinal.weixin.sdk.msg.in.event.InPoiCheckNotifyEvent;
import com.jfinal.weixin.sdk.msg.in.event.InQrCodeEvent;
import com.jfinal.weixin.sdk.msg.in.event.InShakearoundUserShakeEvent;
import com.jfinal.weixin.sdk.msg.in.event.InShakearoundUserShakeEvent.AroundBeacon;
import com.jfinal.weixin.sdk.msg.in.event.InTemplateMsgEvent;
import com.jfinal.weixin.sdk.msg.in.event.InVerifyFailEvent;
import com.jfinal.weixin.sdk.msg.in.event.InVerifySuccessEvent;
import com.jfinal.weixin.sdk.msg.in.event.InWifiEvent;
import com.jfinal.weixin.sdk.msg.in.event.ScanCodeInfo;
import com.jfinal.weixin.sdk.msg.in.speech_recognition.InSpeechRecognitionResults;
import com.jfinal.weixin.sdk.utils.XmlHelper;
public class InMsgParser {
private InMsgParser() {}
/**
* 从 xml 中解析出各类消息与事件
* @param xml xml字符串
* @return {InMsg}
*/
public static InMsg parse(String xml) {
XmlHelper xmlHelper = XmlHelper.of(xml);
return doParse(xmlHelper);
}
/**
* 消息类型
* 1:text 文本消息
* 2:image 图片消息
* 3:voice 语音消息
* 4:video 视频消息
* shortvideo 小视频消息
* 5:location 地址位置消息
* 6:link 链接消息
* 7:event 事件
*/
private static InMsg doParse(XmlHelper xmlHelper) {
String toUserName = xmlHelper.getString("//ToUserName");
String fromUserName = xmlHelper.getString("//FromUserName");
Integer createTime = xmlHelper.getNumber("//CreateTime").intValue();
String msgType = xmlHelper.getString("//MsgType");
if ("text".equals(msgType))
return parseInTextMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("image".equals(msgType))
return parseInImageMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("voice".equals(msgType))
return parseInVoiceMsgAndInSpeechRecognitionResults(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("video".equals(msgType))
return parseInVideoMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("shortvideo".equals(msgType)) //支持小视频
return parseInShortVideoMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("location".equals(msgType))
return parseInLocationMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("link".equals(msgType))
return parseInLinkMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
if ("event".equals(msgType))
return parseInEvent(xmlHelper, toUserName, fromUserName, createTime, msgType);
if (InEqubindEvent.DEVICE_EVENT.equals(msgType)) //微信硬件 绑定和解绑事件
return parseInDeviceEvent(xmlHelper, toUserName, fromUserName, createTime, msgType);
if (InEquDataMsg.DEVICE_TEXT.equals(msgType)) //微信硬件 接收数据
return parseInDeviceData(xmlHelper, toUserName, fromUserName, createTime, msgType);
LogKit.error("无法识别的消息类型 " + msgType + ",请查阅微信公众平台开发文档");
return parseInNotDefinedMsg(xmlHelper, toUserName, fromUserName, createTime, msgType);
}
private static InMsg parseInNotDefinedMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InNotDefinedMsg msg = new InNotDefinedMsg(toUserName, fromUserName, createTime, msgType);
msg.setXmlHelper(xmlHelper);
return msg;
}
private static InMsg parseInTextMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InTextMsg msg = new InTextMsg(toUserName, fromUserName, createTime, msgType);
msg.setContent(xmlHelper.getString("//Content"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInImageMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InImageMsg msg = new InImageMsg(toUserName, fromUserName, createTime, msgType);
msg.setPicUrl(xmlHelper.getString("//PicUrl"));
msg.setMediaId(xmlHelper.getString("//MediaId"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInVoiceMsgAndInSpeechRecognitionResults(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
String recognition = xmlHelper.getString("//Recognition");
String mediaId = xmlHelper.getString("//MediaId");
String format = xmlHelper.getString("//Format");
String msgId = xmlHelper.getString("//MsgId");
if (StrKit.isBlank(recognition)) {
InVoiceMsg msg = new InVoiceMsg(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(mediaId);
msg.setFormat(format);
msg.setMsgId(msgId);
return msg;
} else {
InSpeechRecognitionResults msg = new InSpeechRecognitionResults(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(mediaId);
msg.setFormat(format);
msg.setMsgId(msgId);
// 与 InVoiceMsg 唯一的不同之处
msg.setRecognition(recognition);
return msg;
}
}
private static InMsg parseInVideoMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InVideoMsg msg = new InVideoMsg(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(xmlHelper.getString("//MediaId"));
msg.setThumbMediaId(xmlHelper.getString("//ThumbMediaId"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInShortVideoMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InShortVideoMsg msg = new InShortVideoMsg(toUserName, fromUserName, createTime, msgType);
msg.setMediaId(xmlHelper.getString("//MediaId"));
msg.setThumbMediaId(xmlHelper.getString("//ThumbMediaId"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInLocationMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InLocationMsg msg = new InLocationMsg(toUserName, fromUserName, createTime, msgType);
msg.setLocation_X(xmlHelper.getString("//Location_X"));
msg.setLocation_Y(xmlHelper.getString("//Location_Y"));
msg.setScale(xmlHelper.getString("//Scale"));
msg.setLabel(xmlHelper.getString("//Label"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
private static InMsg parseInLinkMsg(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InLinkMsg msg = new InLinkMsg(toUserName, fromUserName, createTime, msgType);
msg.setTitle(xmlHelper.getString("//Title"));
msg.setDescription(xmlHelper.getString("//Description"));
msg.setUrl(xmlHelper.getString("//Url"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
//微信硬件 绑定和解绑事件 MsgType 为 device_event,Event 取值为 bind/unbind,bind 表示绑定设备,unbind 表示解除绑定。
private static InMsg parseInDeviceEvent(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
String event = xmlHelper.getString("//Event");
InEqubindEvent e = new InEqubindEvent(toUserName, fromUserName, createTime, msgType, event);
e.setDeviceID(xmlHelper.getString("//DeviceID"));
e.setDeviceType(xmlHelper.getString("//DeviceType"));
e.setOpenID(xmlHelper.getString("//OpenID"));
e.setSessionID(xmlHelper.getString("//SessionID"));
return e;
}
//微信硬件传来数据
private static InMsg parseInDeviceData(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
InEquDataMsg msg = new InEquDataMsg(toUserName, fromUserName, createTime, msgType);
msg.setContent(xmlHelper.getString("//Content"));
msg.setDeviceID(xmlHelper.getString("//DeviceID"));
msg.setDeviceType(xmlHelper.getString("//DeviceType"));
msg.setOpenID(xmlHelper.getString("//OpenID"));
msg.setMsgId(xmlHelper.getString("//MsgId"));
return msg;
}
// 解析各种事件
private static InMsg parseInEvent(XmlHelper xmlHelper, String toUserName, String fromUserName, Integer createTime, String msgType) {
String event = xmlHelper.getString("//Event");
String eventKey = xmlHelper.getString("//EventKey");
/**
* 取消关注事件
* 注意:由于微信平台出现bug, unsubscribe 事件在有些时候居然多出了 eventKey 值,
* 多出来的eventKey值例如:last_trade_no_4003942001201604205023621558
* 所以 unsubscribe 与 subscribe 判断进行了拆分,并且将 unsubscribe
* 挪至最前面进行判断,以便消除微信平台 bug 的影响
*/
if ("unsubscribe".equals(event)) {
return new InFollowEvent(toUserName, fromUserName, createTime, event);
}
// 扫描带参数二维码事件之一 1: 用户未关注时,进行关注后的事件推送
String ticket = xmlHelper.getString("//Ticket");
if ("subscribe".equals(event) && StrKit.notBlank(eventKey) && eventKey.startsWith("qrscene_")) {
InQrCodeEvent e = new InQrCodeEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
e.setTicket(ticket);
return e;
}
// 扫描带参数二维码事件之二 2: 用户已关注时的事件推送
if ("SCAN".equals(event)) {
InQrCodeEvent e = new InQrCodeEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
e.setTicket(ticket);
return e;
}
/**
* 关注事件,包括二维码扫描关注。(二维码扫描关注事件与扫描带参数二维码事件是两回事,虽然事件类型同为 subscribe)
* 注意:由于微信平台出现bug, subscribe/unsubscribe 事件在有些时候居然多出了 eventKey 值,
* 所以注掉了对于 eventKey 的 isBlank 判断,并且将判断挪到了扫描带二维码事件之一的后面,以便
* 消除微信平台 bug 的影响
*/
if ("subscribe".equals(event) /*&& StrKit.isBlank(eventKey)*/) {
return new InFollowEvent(toUserName, fromUserName, createTime, event);
}
// 上报地理位置事件
if ("LOCATION".equals(event)) {
InLocationEvent e = new InLocationEvent(toUserName, fromUserName, createTime, event);
e.setLatitude(xmlHelper.getString("//Latitude"));
e.setLongitude(xmlHelper.getString("//Longitude"));
e.setPrecision(xmlHelper.getString("//Precision"));
return e;
}
// 自定义菜单事件之一 1:点击菜单拉取消息时的事件推送
if ("CLICK".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// 自定义菜单事件之二 2:点击菜单跳转链接时的事件推送
if ("VIEW".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// 扫码推事件 和 扫码推事件且弹出“消息接收中”提示框
if ("scancode_push".equals(event) || "scancode_waitmsg".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
String scanType = xmlHelper.getString("//ScanCodeInfo/ScanType");
String scanResult = xmlHelper.getString("//ScanCodeInfo/ScanResult");
e.setScanCodeInfo(new ScanCodeInfo(scanType, scanResult));
return e;
}
// 5. pic_sysphoto:弹出系统拍照发图,这个后台其实收不到该菜单的消息,点击它后,调用的是手机里面的照相机功能,而照相以后再发过来时,就收到的是一个图片消息了
if ("pic_sysphoto".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// pic_photo_or_album:弹出拍照或者相册发图
if ("pic_photo_or_album".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// pic_weixin:弹出微信相册发图器
if ("pic_weixin".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// location_select:弹出地理位置选择器
if ("location_select".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// media_id:下发消息(除文本消息)
if ("media_id".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// view_limited:跳转图文消息URL
if ("view_limited".equals(event)) {
InMenuEvent e = new InMenuEvent(toUserName, fromUserName, createTime, event);
e.setEventKey(eventKey);
return e;
}
// 模板消息是否送达成功通知事件
if ("TEMPLATESENDJOBFINISH".equals(event)) {
InTemplateMsgEvent e = new InTemplateMsgEvent(toUserName, fromUserName, createTime, event);
e.setMsgId(xmlHelper.getString("//MsgID"));
e.setStatus(xmlHelper.getString("//Status"));
return e;
}
// 群发任务结束时是否送达成功通知事件
if ("MASSSENDJOBFINISH".equals(event)) {
InMassEvent e = new InMassEvent(toUserName, fromUserName, createTime, event);
e.setMsgId(xmlHelper.getString("//MsgID"));
e.setStatus(xmlHelper.getString("//Status"));
e.setTotalCount(xmlHelper.getString("//TotalCount"));
e.setFilterCount(xmlHelper.getString("//FilterCount"));
e.setSentCount(xmlHelper.getString("//SentCount"));
e.setErrorCount(xmlHelper.getString("//ErrorCount"));
return e;
}
// 多客服接入会话事件
if ("kf_create_session".equals(event)) {
InCustomEvent e = new InCustomEvent(toUserName, fromUserName, createTime, event);
e.setKfAccount(xmlHelper.getString("//KfAccount"));
return e;
}
// 多客服关闭会话事件
if ("kf_close_session".equals(event)) {
InCustomEvent e = new InCustomEvent(toUserName, fromUserName, createTime, event);
e.setKfAccount(xmlHelper.getString("//KfAccount"));
return e;
}
// 多客服转接会话事件
if ("kf_switch_session".equals(event)) {
InCustomEvent e = new InCustomEvent(toUserName, fromUserName, createTime, event);
e.setKfAccount(xmlHelper.getString("//KfAccount"));
e.setToKfAccount(xmlHelper.getString("//ToKfAccount"));
return e;
}
// 微信摇一摇事件
if ("ShakearoundUserShake".equals(event)){
InShakearoundUserShakeEvent e = new InShakearoundUserShakeEvent(toUserName, fromUserName, createTime, msgType);
e.setEvent(event);
e.setUuid(xmlHelper.getString("//ChosenBeacon/Uuid"));
e.setMajor(xmlHelper.getNumber("//ChosenBeacon/Major").intValue());
e.setMinor(xmlHelper.getNumber("//ChosenBeacon/Minor").intValue());
e.setDistance(xmlHelper.getNumber("//ChosenBeacon/Distance").floatValue());
NodeList nodeList = xmlHelper.getNodeList("//AroundBeacons/AroundBeacon");
if (nodeList != null && nodeList.getLength() > 0) {
AroundBeacon aroundBeacon = null;
List<AroundBeacon> aroundBeacons = new ArrayList<AroundBeacon>();
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
aroundBeacon = new AroundBeacon();
aroundBeacon.setUuid(xmlHelper.getString(node, "Uuid"));
aroundBeacon.setMajor(xmlHelper.getNumber(node, "Major").intValue());
aroundBeacon.setMinor(xmlHelper.getNumber(node, "Minor").intValue());
aroundBeacon.setDistance(xmlHelper.getNumber(node, "Distance").floatValue());
aroundBeacons.add(aroundBeacon);
}
e.setAroundBeaconList(aroundBeacons);
}
return e;
}
// 资质认证成功 || 名称认证成功 || 年审通知 || 认证过期失效通知
if ("qualification_verify_success".equals(event) || "naming_verify_success".equals(event)
|| "annual_renew".equals(event) || "verify_expired".equals(event)) {
InVerifySuccessEvent e = new InVerifySuccessEvent(toUserName, fromUserName, createTime, event);
e.setExpiredTime(xmlHelper.getString("//expiredTime"));
return e;
}
// 资质认证失败 || 名称认证失败
if ("qualification_verify_fail".equals(event) || "naming_verify_fail".equals(event)) {
InVerifyFailEvent e = new InVerifyFailEvent(toUserName, fromUserName, createTime, event);
e.setFailTime(xmlHelper.getString("//failTime"));
e.setFailReason(xmlHelper.getString("//failReason"));
return e;
}
// 门店在审核事件消息 , update by unas at 2016-1-29,add event param
if ("poi_check_notify".equals(event)) {
InPoiCheckNotifyEvent e = new InPoiCheckNotifyEvent(toUserName, fromUserName, createTime, event);
e.setUniqId(xmlHelper.getString("//UniqId"));
e.setPoiId(xmlHelper.getString("//PoiId"));
e.setResult(xmlHelper.getString("//Result"));
e.setMsg(xmlHelper.getString("//Msg"));
return e;
}
// WIFI连网后下发消息 by unas at 2016-1-29
if ("WifiConnected".equals(event)) {
InWifiEvent e = new InWifiEvent(toUserName, fromUserName, createTime);
e.setConnectTime(xmlHelper.getString("//ConnectTime"));
e.setExpireTime(xmlHelper.getString("//ExpireTime"));
e.setVendorId(xmlHelper.getString("//VendorId"));
e.setDeviceNo(xmlHelper.getString("//DeviceNo"));
e.setShopId(xmlHelper.getString("//ShopId"));
return e;
}
if (InUserCardEvent.EVENT_USER_VIEW.equals(event)) {
InUserCardEvent e = new InUserCardEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
if (InUserCardEvent.EVENT_MEMBERCARD.equals(event)) {
InUserCardEvent e = new InUserCardEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
if (InUpdateMemberCardEvent.EVENT.equals(event)) {
InUpdateMemberCardEvent e = new InUpdateMemberCardEvent(toUserName, fromUserName, createTime);
e.setCardId(xmlHelper.getString("//CardId"));
e.setUserCardCode(xmlHelper.getString("//UserCardCode"));
e.setModifyBonus(xmlHelper.getString("//ModifyBonus"));
e.setModifyBalance(xmlHelper.getString("//ModifyBalance"));
return e;
}
if (InUserPayFromCardEvent.EVENT.equals(event)) {
InUserPayFromCardEvent e = new InUserPayFromCardEvent(toUserName, fromUserName, createTime);
e.setCardId(xmlHelper.getString("//CardId"));
e.setUserCardCode(xmlHelper.getString("//UserCardCode"));
e.setLocationId(xmlHelper.getString("//LocationId"));
e.setTransId(xmlHelper.getString("//TransId"));
e.setFee(xmlHelper.getString("//Fee"));
e.setOriginalFee(xmlHelper.getString("//OriginalFee"));
return e;
}
// 微信小店支付消息
if (InMerChantOrderEvent.EVENT.equals(event)) {
InMerChantOrderEvent e = new InMerChantOrderEvent(toUserName, fromUserName, createTime);
e.setOrderId(xmlHelper.getString("//OrderId"));
e.setOrderStatus(xmlHelper.getNumber("//OrderStatus").intValue());
e.setProductId(xmlHelper.getString("//ProductId"));
e.setSkuInfo(xmlHelper.getString("//SkuInfo"));
return e;
}
// 审核通过事件推送
if (InCardPassCheckEvent.EVENT_PASS.equals(event)) {
InCardPassCheckEvent e = new InCardPassCheckEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
// 审核未通过事件推送
if (InCardPassCheckEvent.EVENT_NOT_PASS.equals(event)) {
InCardPassCheckEvent e = new InCardPassCheckEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
// 券点流水详情事件
if (InCardPayOrderEvent.EVENT.equals(event)) {
InCardPayOrderEvent e = new InCardPayOrderEvent(toUserName, fromUserName, createTime);
e.parse(xmlHelper);
return e;
}
// 库存报警事件
if (InCardSkuRemindEvent.EVENT.equals(event)) {
InCardSkuRemindEvent e = new InCardSkuRemindEvent(toUserName, fromUserName, createTime);
e.parse(xmlHelper);
return e;
}
// 卡券核销事件推送
if (InUserConsumeCardEvent.EVENT.equals(event)) {
InUserConsumeCardEvent e = new InUserConsumeCardEvent(toUserName, fromUserName, createTime);
e.parse(xmlHelper);
return e;
}
// 卡券删除事件推送
if (InUserCardEvent.EVENT_USER_DEL.equals(event)) {
InUserCardEvent e = new InUserCardEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
// 从卡券进入公众号会话事件推送
if (InUserCardEvent.EVENT_USER_ENTER.equals(event)) {
InUserCardEvent e = new InUserCardEvent(toUserName, fromUserName, createTime, event);
e.parse(xmlHelper);
return e;
}
// 卡券领取事件推送
if (InUserGetCardEvent.EVENT.equals(event)) {
InUserGetCardEvent e = new InUserGetCardEvent(toUserName, fromUserName, createTime);
e.parse(xmlHelper);
return e;
}
// 卡券转赠事件推送
if (InUserGiftingCardEvent.EVENT.equals(event)) {
InUserGiftingCardEvent e = new InUserGiftingCardEvent(toUserName, fromUserName, createTime);
e.parse(xmlHelper);
return e;
}
LogKit.error("无法识别的事件类型" + event + ",请查阅微信公众平台开发文档");
InNotDefinedEvent e = new InNotDefinedEvent(toUserName, fromUserName, createTime, event);
e.setXmlHelper(xmlHelper);
return e;
}
}