当有成员点击某应用相关菜单时,AWS PaaS会接收到该事件并传递给开发者的微信消息处理器。
1.由事件触发
//事件常量名,弹出系统拍照发图的事件推送
WechatConsts.EVENT_TYPE_PIC_SYSPHOTO
//事件常量名,弹出拍照或者相册发图的事件推送
WechatConsts.EVENT_TYPE_PIC_PHOTO_OR_ALBUM
//事件常量名,弹出微信相册发图器的事件推送
WechatConsts.EVENT_TYPE_PIC_WEIXIN
上述事件与开发者配置菜单时,选择的事件行为类型有关。图片或视频会以消息方式发给AWS PaaS的微信消息处理器
2.由接收到的消息类型识别
场景:用户拍一张名片,交给服务端做识别处理
微信将回调两次该接口,一次是通知触发了发送事件,另一次是将发送的图片以消息方式推送过来。
public class XXXProcessor implements WechatProcessor {
public WechatOutMessage handleMessage(WechatInMessage msg) {
if (msg.getEvent().equals(WechatConsts.EVENT_TYPE_PIC_SYSPHOTO)) {
System.out.println("收到一张名片扫描:" + msg.getFromUserName());
// 实际上图片文件并未包含在该信息,再等待微信接口callback一个图片消息
}
...
if (msg.getMsgType().equals(WechatConsts.MSG_TYPE_IMAGE)) {
System.out.println("测试拍照名片的图片消息到达");
Map<String, String> param = new HashMap<String, String>();
// 该key失效,仅用来演示测试
param.put("key", "******************");
param.put("lang", "chns");
param.put("image", new String(Base64.encode(UtilURL.getBytes(msg.getPicUrl()))));
String data = UtilURL.post("http://op.juhe.cn/hanvon/bcard/query", param);
// todo 你打算如何处理解析出来的联系人信息
// 把处理结果调试给开发者
System.out.println(data);
WechatOutTextMessage cardMsg = new WechatOutTextMessage(msg);
cardMsg.setContent(data);
return cardMsg;
}
}
}
结果示例
收到一张名片拍照:abc
测试拍照名片的图片消息到达
{
"reason": "successed",
"result": {
"rotatedAngle": null,
"name": [
"王**"
],
"title": [
"总经理"
],
"tel": [
"04272616****"
],
"mobile": [],
"fax": [
"04272616****"
],
"email": [
"****@jzjrw.com"
],
"comp": [
"盘锦市****责任有限公司"
],
"dept": [],
"degree": [],
"addr": [
"盘锦市兴隆区人才大厦"
],
"post": [],
"mbox": [],
"htel": [],
"web": [
"http://www.****.com"
],
"im": [],
"numOther": [],
"other": [],
"extTel": []
},
"error_code": 0
}