微信公眾平台----帶參數二維碼生成和掃描事件


摘要: 賬號管理----生成帶參數的二維碼 消息管理----接收消息----接收事件推送

為了滿足用戶渠道推廣分析和用戶帳號綁定等場景的需要,公眾平台提供了生成帶參數二維碼的接口。使用該接口可以獲得多個帶不同場景值的二維碼,用戶掃描后,公眾號可以接收到事件推送。

目前有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. 如果用戶已經關注公眾號,在用戶掃描后會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。


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');    
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM