Force.com微信开发系列用户消息处理
文本消息XML数据包示例
1348831860 1234567890123456
数据包结构说明
通过Debug Logs监控用法发送数据
在Force.com里可以很容易的观察到微信用户发送来的XML数据信息,为此进入Force.com后台Setup页面后在左侧导航条的Logs下方找到Debug Logs,点击进入后,点击右侧Monitored Users旁的New按钮,如下图所示:
在接下来的画面中将可以选择你想监控哪个用户和Force.com服务器之间的交互,在搜寻画面中可以点击放大镜查找所有用户,其中Site.com使用类似于“Site Guest User…”类似的匿名账户,选择好后的示意界面如下:
此时若通过关注了此微信公开账号的微信用户发送任意文本到此账号后,刷新Debug Logs监控页面及可以在下方看到新增了相应的日志:
点击进去既可以看到日志里有我们发送的文本的XML数据包:
这种日志也可以帮助到后续的调试。
创建用户消息处理方法
接下来我们打开之前创建的WeChatRestController类,在里面添加如下方法来响应用户数据包
@HttpPost global static void doPost(){ //存储XML各节点数据变量 String toUserName = ''; String fromUserName = ''; String msgType = ''; String content = ''; //获取XML数据包 RestRequest req = RestContext.request; RestResponse res = RestContext.response; string strMsg = req.requestBody.toString(); XmlStreamReader reader = new XmlStreamReader(strMsg); //解析XML数据包,Force.com这块的处理能力并不强,简单的结构也需要较多代码来解析 while(reader.hasNext()){ if(reader.getLocalName() == 'ToUserName'){ reader.next(); if(String.isNotBlank(reader.getText())){ toUserName = reader.getText(); } } else if(reader.getLocalName() == 'FromUserName'){ reader.next(); if(String.isNotBlank(reader.getText())){ fromUserName = reader.getText(); } } else if(reader.getLocalName() == 'MsgType'){ reader.next(); if(String.isNotBlank(reader.getText())){ msgType = reader.getText(); } } else if(reader.getLocalName() == 'Content'){ reader.next(); if(String.isNotBlank(reader.getText())){ content = reader.getText(); } } reader.next(); } }
上述代码 完成了对用户发送过来数据XML包的解析,接下来我们按照http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E8%A2%AB%E5%8A%A8%E5%93%8D%E5%BA%94%E6%B6%88%E6%81%AF说明,组织好回复给用户的文本消息数据,这里的回复数据也是XML结构,和发送过来的文本消息XML数据结构基本一致,详情请参看链接里腾讯公司的详细介绍。下面的代码将自动发送当前的日期时间给用户,在前面代码的While循环后添加如下代码:
Datetime dt = System.now(); String returnDT = dt.format('EEEE, MMMM d, yyyy'); String replyMSG = '<xml><ToUserName><![CDATA[{0}]]></ToUserName><FromUserName><![CDATA[{1}]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[{2}]]></Content></xml>'; String[] arguments = new String[]{fromUserName, toUserName, rtnMsg}; String formattedReplyMSG = String.format(replyMSG, arguments); RestContext.response.addHeader('Content-Type', 'text/plain'); RestContext.response.responseBody = Blob.valueOf(rtnMsg);
前面代码需要略微提醒下的是第3行的ToUserName参数和FromUserName参数和普通微信用户发送来的消息XML数据包是反过来的。
保存代码,此时普通用户发送任何消息到此公众账号都能很快收到当前的时间信息。
更多Force.com微信开发系列用户消息处理相关文章请关注PHP中文网!
上一篇: 微信支付开发 JS API支付
下一篇: 小程序必须和公众号名字一样吗
推荐阅读
-
C#开发微信门户及应用(2) 微信消息处理和应答
-
微信开发中使用通用函数处理,以重定向的方式实现用户身份信息的获取并转回原来页面
-
C#开发微信门户及应用(21)-微信企业号的消息和事件的接收处理及解密
-
微信公众号开发:消息处理
-
微信公众号开发C#系列-6、消息管理-普通消息接受处理
-
微信程序开发系列教程(三)使用微信API给微信用户发文本消息
-
【微信公众平台开发】利用客服接口向用户发送网页授权的消息
-
微信开发中使用通用函数处理,以重定向的方式实现用户身份信息的获取并转回原来页面
-
C#开发微信门户及应用(二)之微信消息处理和应答的图文代码教程
-
微信公众平台 - php开发微信公众号,用户发送消息后,公众号没响应,怎么调试呢?