摘要: 賬號管理----生成帶參數的二維碼 消息管理----接收消息----接收事件推送
為了滿足用戶渠道推廣分析和用戶帳號綁定等場景的需要,公眾平台提供了生成帶參數二維碼的接口。使用該接口可以獲得多個帶不同場景值的二維碼,用戶掃描后,公眾號可以接收到事件推送。
目前有2種類型的二維碼:
1、臨時二維碼,是有過期時間的,最長可以設置為在二維碼生成后的30天(即2592000秒)后過期,但能夠生成較多數量。臨時二維碼主要用於帳號綁定等不要求二維碼永久保存的業務場景。 2、永久二維碼,是無過期時間的,但數量較少(目前為最多10萬個)。永久二維碼主要用於適用於帳號綁定、用戶來源統計等場景。
獲取帶參數的二維碼的過程包括兩步,首先創建二維碼ticket,然后憑借ticket到指定URL換取二維碼。
創建二維碼ticket
每次創建二維碼ticket需要提供一個開發者自行設定的參數(scene_id),分別介紹臨時二維碼和永久二維碼的創建二維碼ticket過程。
臨時二維碼請求說明:
http請求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST數據格式:json POST數據例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}
永久二維碼請求說明:
http請求方式: POST URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKENPOST數據格式:json POST數據例子:{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": 123}}} 或者也可以使用以下POST數據創建字符串形式的二維碼參數: {"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": "123"}}}
參數說明:
返回參數說明:
永久二維碼只返回ticket和url,臨時二維碼只返回ticket,expire_seconds和url
通過ticket換取二維碼
獲取二維碼ticket后,開發者可用ticket換取二維碼圖片。請注意,本接口無須登錄態即可調用。
請求說明
HTTP GET請求(請使用https協議)https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET提醒:TICKET記得進行UrlEncode
返回說明
ticket正確情況下,http 返回碼是200,是一張圖片,可以直接展示或者下載。
錯誤情況下(如ticket非法)返回HTTP錯誤碼404。
示例代碼:
$vipLogic = D('Vip','Logic'); $userinfo = session('userinfo'); $vip = $vipLogic->where(array('openid'=>$userinfo['openid']))->field('sceneid,id')->find(); $count = $vipLogic->where(array('sceneid'=>array('neq',0)))->count(); $sceneid = $count+1; //設定場景值 if($vip != null && $vip['sceneid'] == 0){ //用戶關注了該公眾號 但是還未生成自己的二維碼 $data = array( //需要POST傳輸的數據 'action_name' => 'QR_LIMIT_SCENE', 'action_info' => array( 'scene' => array( 'scene_id' => $sceneid, ), ), ); $dir = './Public/Wechat/qrcode/'.$userinfo['openid'].'.jpg'; //二維碼存放路徑 if(!file_exists($dir)){ //二維碼不存在 則生成二維碼 $ticket = $this -> getTicket($data); $vipLogic -> where(array('openid'=>$userinfo['openid'])) -> save(array('sceneid'=>$sceneid)); $url = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.$ticket['ticket']; //通過ticket換取二維碼 $img = file_get_contents($url); $dir = './Public/Wechat/qrcode/'.$userinfo['openid'].'.jpg'; if(!empty($img)){ @file_put_contents($dir,$img); } } } public function getTicket($data){ $access_token = $this -> getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$access_token; $res = $this -> httpdata($url, $data); return $res; } /** * http帶參數請求 * @date: 2015-1-31 * @author: 明 * @return: */ public function httpdata($url,$data){ $data = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $status = curl_exec($ch); curl_close($ch); $res = json_decode($status,true); return $res; }
掃描帶參數二維碼事件
用戶掃描帶場景值二維碼時,可能推送以下兩種事件:
-
如果用戶還未關注公眾號,則用戶可以關注公眾號,關注后微信會將帶場景值關注事件推送給開發者。
-
如果用戶已經關注公眾號,在用戶掃描后會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。
1. 用戶未關注時,進行關注后的事件推送
參數說明:
2. 用戶已關注時的事件推送
參數說明:
示例代碼:在獲取關注事件加入功能代碼
$key = explode('_', $eventkey) ; if($key[1]!=null){ //邀請我的人 $vipLogic = D('Vip','Logic'); $vip = $vipLogic->where(array('sceneid'=>$key[1]))->field('id,openid')->find(); //我 $openid = session('openid'); }