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!
推薦閱讀:
- PHP CURLFile函數模擬實現文件上傳示例詳解
- 小程序上傳文件至雲存儲的實現
- python代碼實現掃碼關註公眾號登錄的實戰
- 淺談PHP模擬發送POST請求之curl基本使用
- PHP對京東聯盟CPS的API調用