微信开放了2个扫码事件:
scancode_push:扫码推事件的事件推送
scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框的事件推送
我只需要第一个扫码事件
后台添加菜单时新增扫一扫选项,这个无关紧要:
<option value="0">菜单类型</option>
<option value="1" {if $wxmenu.wm_type ==1 } selected="selected" {/if}>click事件</option>
<option value="2" {if $wxmenu.wm_type ==2 } selected="selected" {/if}>url链接</option>
<option value="3" {if $wxmenu.wm_type ==3 } selected="selected" {/if}>扫一扫</option>
在构建菜单时就需要判断菜单类型,加入扫码事件:
elseif($v['wm_type'] == 3)
{
$type = "scancode_push"; //菜单类型为扫码
$key = $v['wm_key'];
$data.='{"type":"'.$type.'",';
$data.='"name":"'.$name.'",'; //菜单名称
$data.='"key":"'.$key.'"}'; //菜单key值
}
在获取微信推送的数据时,只需要判断事件类型是否为scancode_push,并获取到扫码结果就行了,扫码推送事件的xml数据包示例为:
推送XML数据包示例:
<xml><ToUserName><![CDATA[gh_e136c6e50636]]></ToUserName>
<FromUserName><![CDATA[oMgHVjngRipVsoxg6TuX3vz6glDg]]></FromUserName>
<CreateTime>1408090606</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[scancode_waitmsg]]></Event>
<EventKey><![CDATA[6]]></EventKey>
<ScanCodeInfo><ScanType><![CDATA[qrcode]]></ScanType>
<ScanResult><![CDATA[2]]></ScanResult>
</ScanCodeInfo>
</xml>
参数说明:
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | 消息类型,event |
Event | 事件类型,scancode_waitmsg |
EventKey | 事件KEY值,由开发者在创建菜单时设定 |
ScanCodeInfo | 扫描信息 |
ScanType | 扫描类型,一般是qrcode |
ScanResult | 扫描结果,即二维码对应的字符串信息 |
我们只需要获取到ScanResult并显示出来就可以了;
$msgEvent = $postObj->Event;
if($msgEvent == "scancode_push")
{
$res = $postObj->ScanCodeInfo->ScanResult;
echo $res;
exit;
}