接下来一个非常重要的就是生成带参数的二维码了,当用户还没关注公众账号时,用户会自动发送关注事件给公众账号。如果用户已经关注公众账号,则自动进入会话。创建二维码主要是两个关键的步骤,创建二维码ticket和换取二维码。创建二维码ticket是post请求,有临时二维码和永久二维码两种情况,临时url:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN,永久url:https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN而且post过去的是JSON数据,正确的JSON返回ticket,凭借这个“ticket”票去换取二维码图片。换取的url为GET请求,正确返回一张图片,包含图片的大小、类型、创建时间等。这图片在网页端可以直接显示。但如果返回给用户的话,直接返回是不正确的。因为这是图片,需要转换成图片的格式与用户交流。因为图片不是本地的,直接发送获取不到,这就需要先上传到服务器,上传图片包含类型以及media,上传多媒体文件也有大小限制,但一张二维码还是没有问题的。创建二维码函数如下
1 2 3 4 5 6 7 8 9 10
| private function createQRcode() { $ACCESS_TOKEN = $this->getACCESS_TOKEN(); $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$ACCESS_TOKEN; $postStr = ’{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}}’; $responseArray = $this->postRequest($url, $postStr); $ticket = $responseArray[’ticket’]; $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$ticket; return $url; }
|
整合一下,当用户发送一个消息给公众账号时,responseMsg()函数判断消息的类型$RX_TYPE = trim($postObj->MsgType);
从而进入不同的函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| switch ($RX_TYPE) { case "text": $resultStr = $this->receiveText($postObj); break; case "event": $resultStr = $this->receiveEvent($postObj); break; case "image": $resultStr = $this->receiveImage($postObj); break; case "location": $resultStr = $this->receiveLocation($postObj); break; case "voice": $resultStr = $this->receiveVoice($postObj); break; case "video": $resultStr = $this->receiveVideo($postObj); break; case "link": $resultStr = $this->receiveLink($postObj); break; default: $resultStr = "unknow msg type: ".$RX_TYPE; break; } echo $resultStr;
|
当接受文本时根据不同的关键字再执行不同的功能,
1 2 3 4 5 6 7 8 9
| private function receiveText($object) { $keyword = trim($object->Content); if($keyword == "菜单" || $keyword == "0" || $keyword == 0) { $contentStr = $this->responseMenu($object); } ... }
|
事件类型同样的,通过一个个函数进去,从而实现想要的结果。