前面我们实践了微信公众号自定义创建菜单的开发,
示例:
$menu = ‘{
“button”:[
{
“type” : “click”,
“name”: “济南美食”,
“key” : “V1001_JINAN_FOOD”
},
{
“type” :”click”,
“name”:”济南美景”,
“key” :”V1002_JINAN_SENERY”
},
{
“name” :”商务合作”,
“sub_button”:[
{
“type”:”view”,
“name”:”联系我们”,
“url”: “http://tools.libaocai.com/about”
}
]
}
]
}’;
里面的V1001_JINAN_FOOD 和V1002_JINAN_SENERY 是我们定义的事件key。
在自定义菜单创建生效以后,用户点击济南美景、济南美食,触发的click事件,会推送给开发者,开发者就会接收到来自腾讯服务器推送过来的click事件,根据实际情况进行开发处理。
click事件xml代码:
<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>
其中的EVENT 就是事件类型,例如CLICK,
EVENTKey 就是事件KEY值,与自定义菜单接口中的KEY值对应。
在wx_sample.php我们需要对接收的消息进行处理,主要是function responseMsg.
例如
public function responseMsg() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; if (!empty($postStr)){ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if($postObj->MsgType=='event'){ if($postObj->Event == 'CLICK'){ if($postObj->EventKey == 'V1001_JINAN_FOOD '){ $contentStr = "济南美食"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; } else if($postObj->EventKey == 'V1002_JINAN_SENERY '){ $contentStr = "济南美景"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $contentStr); echo $resultStr; } } } }else { echo "success"; exit; } }
补充说明
这里只是简单的处理回复单文本消息。
转载请注明:苏demo的别样人生 » 微信自定义菜单的click事件推送