用户扫描带场景值二维码时,可能会推送以下两种事件。
·如果用户还未关注微信公众号,则用户可以关注微信公众号,关注后微信会将带场景值关注事件推送给开发者。
·如果用户已经关注微信公众号,则微信会将带场景值扫描事件推送给开发者。
1.用户未关注时
进行关注后的事件推送的XML数据格式如下。
<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684286</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[qrscene_1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1
sdlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>
上述数据的参数说明如表8-3所示。
表8-3 未关注时事件推送的参数说明
2.用户已关注时
事件推送的XML数据如下。
<xml>
<ToUserName><![CDATA[gh_45072270791c]]></ToUserName>
<FromUserName><![CDATA[o7Lp5t6n59DeX3U0C7Kric9qEx-Q]]></FromUserName>
<CreateTime>1389684184</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[SCAN]]></Event>
<EventKey><![CDATA[1000]]></EventKey>
<Ticket><![CDATA[gQHi8DoAAAAAAAAAASxodHRwOi8vd2VpeGluLnFxLmNvbS9xL0UweTNxNi1s
dlA3RklyRnNKbUFvAAIELdnUUgMEAAAAAA==]]></Ticket>
</xml>
上述数据的参数说明如表8-4所示。
表8-4 已关注时事件推送的参数说明
以下代码判定了扫描带参数二维码的两种情形。
1 private function receiveEvent($object)
2 {
3 $content = "";
4 switch ($object->Event)
5 {
6 case "subscribe":
7 $content = "欢迎关注 ";
8 if (isset($object->EventKey)){
9 $content.= "\n来自二维码场景 ".$object->EventKey;
10 }
11 break;
12 case "SCAN":
13 $content = "扫描二维码场景 ".$object->EventKey;
14 break;
15 default:
16 break;
17
18 }
19 $result = $this->transmitText($object, $content);
20 return $result;
21 }