PHP實現生成二維碼的示例代碼

前言

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

1、目前有2種類型的二維碼

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

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

  • 如果用戶還未關註公眾號,則用戶可以關註公眾號,關註後微信會將帶場景值關註事件推送給開發者。
  • 如果用戶已經關註公眾號,在用戶掃描後會自動進入會話,微信也會將帶場景值掃描事件推送給開發者。

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

3、創建二維碼ticket

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

4、臨時二維碼請求說明

http請求方式: POST

URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST數據格式:json

POST數據例子:{"expire_seconds": 604800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": 123}}}

或者也可以使用以下POST數據創建字符串形式的二維碼參數:

{"expire_seconds": 604800, "action_name": "QR_STR_SCENE", "action_info": {"scene": {"scene_str": "test"}}}

5、永久二維碼請求說明

http請求方式: POST

URL: https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN

POST數據格式: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": "test"}}}

6、臨時二維碼和永久二維碼生成實現的代碼

       //臨時二維碼
    public function getQrls()
{
        $accessToken = $this->_getWxAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$accessToken}";
        $postArr =  [
            "action_name" => "QR_SCENE",
            "expire_seconds" => 604800,
            "action_info" => [
                'scene' => ['scene_id' => 2000],
              ],
           ];
 
        $postJson = json_encode($postArr);
        $res = $this->ch($url, 'post', 'json', $postJson);
 
        $ticket = $res['ticket'];
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);
 
        echo "<img src='".$url."'>";
 
    }
 
    //永久二維碼
    public function getQryj()
{
        $accessToken = $this->_getWxAccessToken();
        $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token={$accessToken}";
        $postArr =  [
            "action_name" => "QR_LIMIT_SCENE",
            "action_info" => [
                'scene' => ['scene_id' => 3000],
              ],
           ];
 
        $postJson = json_encode($postArr);
        $res = $this->ch($url, 'post', 'json', $postJson);
 
        $ticket = $res['ticket'];
        $url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".urlencode($ticket);
 
        echo "<img src='".$url."'>";
    }
     
    //url請求
    private function ch($url, $type='get', $res='json', $arr='')
{
 
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 
        if ($type == 'post') {
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $arr);
        }
 
        $cnt = curl_exec($ch);
        if (curl_errno($ch)) {
            return;
        }
 
        curl_close($ch);
 
        if ($res == 'json') {
            return json_decode($cnt, true);
        }
 
        return $cnt;
    }

生成臨時、永久二維碼的圖片這裡就不放瞭,感興趣的可以自己運行一下哈。

到此這篇關於PHP實現生成二維碼的示例代碼的文章就介紹到這瞭,更多相關PHP生成二維碼內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: