首頁 >後端開發 >php教程 >php微信產生微信公眾號二維碼掃描進入公眾號帶參數

php微信產生微信公眾號二維碼掃描進入公眾號帶參數

不言
不言原創
2018-05-09 12:02:005836瀏覽

這篇文章主要介紹了關於php微信產生微信公眾號二維碼掃描進入公眾號帶參數,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

為了滿足使用者管道推廣分析和使用者帳號綁定等場景的需要,公眾平台提供了產生參數二維碼的介面。使用此介面可獲得多個不同場景值的二維碼,使用者掃描後,公眾號可以接收到事件推送。

目前有2種類型的二維碼:

1、臨時二維碼,是有過期時間的,最長可以設定為在二維碼產生後的30天(即2592000秒)後過期,但能產生較多數量。臨時二維碼主要用於帳號綁定等不要求二維碼永久保存的業務場景
2、永久二維碼,是無過期時間的,但數量較少(目前為最多10萬個)。永久二維碼主要用於適用於帳號綁定、使用者來源統計等場景。

用戶掃描帶場景值二維碼時,可能推送以下兩種事件:

如果用戶還未關注公眾號,則用戶可以關注公眾號,關注後微信會將帶場景值關注事件推送給開發者。

如果使用者已經關注公眾號,在使用者掃描後會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。

取得帶有參數的二維碼的過程包括兩步,首先建立二維碼ticket,然後憑藉ticket到指定URL換取二維碼。

建立二維碼ticket

每次建立二維碼ticket需要提供一個開發者自行設定的參數(scene_id),分別介紹臨時二維碼和永久二維碼的建立二維碼ticket過程。

注意
 expire_seconds  該二維碼有效時間,以秒為單位。最大不超過2592000(即30天),此欄位如果不填,則預設有效期為30秒。
 action_name 二維碼類型,QR_SCENE為暫時的整數參數值,QR_STR_SCENE為暫時的字串參數值,QR_LIMIT_SCENE為永久的整數參數值,QR_LIMIT_STR_SCENE為永久的字串參數值
 action_info 二維碼詳細資料
 scene_id    場景值ID,暫時二維碼時為32位元非0整數,永久二維碼時最大值為100000(目前參數只支援1–100000)
scene_str   場景值ID(字串形式的ID),字串類型,長度限制為1到64

<?php
namespace app\api\model;
set_time_limit(30);
class WxQrcode{
    //构造方法
    static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";    
    static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";    
    static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?";    //生成二维码
    public function getEwm($fqid,$type = 1){
        $appid = &#39;你的appid&#39;;        $secret = &#39;你的secret&#39;;        
        $ACCESS_TOKEN = $this->getToken($appid,$secret);        
        $url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,$type);
        save_log(&#39;测试保存的路径&#39;.$url.&#39;fid&#39;.$fqid);        
        return $this->DownLoadQr($url,time());
    }    
    protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){
        $url = self::$qrcode_url.&#39;access_token=&#39;.$ACCESS_TOKEN;        
        if($type == 1){            
        //生成永久二维码
            $qrcode= &#39;{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_str": &#39;.$fqid.&#39;}}}&#39;;
        }else{            
        //生成临时二维码
            $qrcode = &#39;{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": &#39;.$fqid.&#39;}}}&#39;;
        }        $result = $this->http_post_data($url,$qrcode);        
        $oo = json_decode($result[1]);        
        if (empty($oo->ticket)){            
        return false;
        }        
        if(!$oo->ticket){            
        $this->ErrorLogger(&#39;getQrcodeurl falied. Error Info: getQrcodeurl get failed&#39;);            
        exit();
        }        $url = self::$qrcode_get_url.&#39;ticket=&#39;.$oo->ticket.&#39;&#39;;        
        return $url;
    }    
    protected function getToken($appid,$secret){
        $ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");        
        $ACCESS_TOKEN = json_decode($ACCESS_TOKEN);        
        $ACCESS_TOKEN = $ACCESS_TOKEN->access_token;        
        return $ACCESS_TOKEN;
    }    
    protected function http_post_data($url, $data_string) {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(                
        &#39;Content-Type: application/json; charset=utf-8&#39;,                
        &#39;Content-Length: &#39; . strlen($data_string))
        );
        ob_start();
        curl_exec($ch);        i
        f (curl_errno($ch)) {            
        $this->ErrorLogger(&#39;curl falied. Error Info: &#39;.curl_error($ch));
        }        
        $return_content = ob_get_contents();
        ob_end_clean();        
        $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);        
        return array($return_code, $return_content);
    }    //下载二维码到服务器
    protected function DownLoadQr($url,$filestring){
        if($url == ""){            
        return false;
        }        
        $filename = $filestring.rand(0,99999999999).&#39;.jpg&#39;;
        ob_start();
        readfile($url);        
        $img=ob_get_contents();
        ob_end_clean();        
        $size=strlen($img);        
        $fp2=fopen(&#39;static/qrcode/&#39;.$filename,"a");        
        if(fwrite($fp2,$img) === false){            
        $this->ErrorLogger(&#39;dolwload image falied. Error Info: 无法写入图片&#39;);            
        exit();
        }
        fclose($fp2);        
        return &#39;static/qrcode/&#39;.$filename;
    }    //错误日志
    private function ErrorLogger($errMsg){
        $logger = fopen(&#39;log.txt&#39;, &#39;a+&#39;);
        fwrite($logger, date(&#39;Y-m-d H:i:s&#39;)." Error Info : ".$errMsg."\r\n");
        fclose($logger);
    }

}

以上就是本篇文章的全部內容了,更多相關內容請關注PHP中文網。

相關推薦:

PHP微信開發之同步粉絲

#php微信公眾號開發,取得用戶微信個人資訊

以上是php微信產生微信公眾號二維碼掃描進入公眾號帶參數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn