微信开发第五篇:点击菜单自动回复文本消息

一、用户点击事件,微信会发送XML格式的数据给我们的服务器,如下:
// 点击菜单拉取消息时的事件推送 推送XML数据包示例:

Select Code
1
2
3
4
5
6
7
8
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[CLICK]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>

更多事件类型见文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html

前面我们在index控制器的responseMsg方法中,接收到了微信服务器发送给我们服务器的信息,并且保存到服务器中。

数据如下:
接收信息

具体的格式如下:
接收信息XML

二、我们的服务器接收到XML信息后,获取事件Event和EventKey就可以写程序被动回复信息:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 获取事件类型
$event = $postObj->Event;

switch ($event) {
    case 'CLICK':
        // 用户点击后触发该事件
        $eventKey = $postObj->EventKey;

        switch ($eventKey) {
            case 'V1001_TODAY_MUSIC':
                $this->sendMsg('帮助菜单:回复A查看更多图文信息!');
                break;
        }


        break;
    
    default:
        # code...
        break;
}

click_event

click_event_case

纯文本消息发送函数:

Select Code
1
2
3
4
5
6
7
8
9
10
11
12
13
// 发送纯文本消息
public function sendMsg($str)
{
  $textTpl = '<xml>
  <ToUserName><![CDATA['.$this->fromUsername.']]></ToUserName>
  <FromUserName><![CDATA['.$this->toUsername .']]></FromUserName>
  <CreateTime>'.time().'</CreateTime>
  <MsgType><![CDATA[text]]></MsgType>
  <Content><![CDATA['.$str.']]></Content>
  </xml>';

  echo $textTpl;exit;
}

三、用户订阅事件,发送纯文本信息

Select Code
1
2
3
case 'subscribe':
    $this->sendMsg('你开心就好!');
    break;

click_event_case2