這篇文章主要介紹了關於PHP產生帶參數的小程式的二維碼,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
小程式官方開放了3個建立二維碼的介面,其中有一個是產生二維碼的,還有一個是葵花狀的小程式碼,我這裡就用php產生二維碼。
首先要擷取Access_token
這個請求起來也是很容易的,開發文檔有請求介面:
要把自己的小程式的APPID和APPSECRET擷取到
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
access_token只有2小時有效期間,所以要緩衝最好,避免重複請求
構建請求參數
可以構建一個數組,然後轉成json資料賦給一個變數
$param = json_encode(array("path"=>"pages/index/index?id=123","width"=> 150));
然後POST資料發送到伺服器換取二維碼
完整代碼
<?phpheader('content-type:text/html;charset=utf-8');//配置APPID、APPSECRET$APPID = "APPID"; $APPSECRET = "APPSECRET"; //擷取access_token$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";//緩衝access_token session_start(); $_SESSION['access_token'] = ""; $_SESSION['expires_in'] = 0; $ACCESS_TOKEN = ""; if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in'])) { $json = httpRequest( $access_token ); $json = json_decode($json,true); // var_dump($json); $_SESSION['access_token'] = $json['access_token']; $_SESSION['expires_in'] = time()+7200; $ACCESS_TOKEN = $json["access_token"]; } else{ $ACCESS_TOKEN = $_SESSION["access_token"]; }//構建請求二維碼參數//path是掃描二維碼跳轉的小程式路徑,可以帶參數?id=xxx//width是二維碼寬度$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";$param = json_encode(array("path"=>"pages/index/index?id=123","width"=> 150));//POST參數$result = httpRequest( $qcode, $param,"POST");//產生二維碼file_put_contents("qrcode.png", $result);$base64_image ="data:image/jpeg;base64,".base64_encode( $result );//把請求發送到伺服器換取二維碼 function httpRequest($url, $data='', $method='GET'){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_AUTOREFERER, 1); if($method=='POST') { curl_setopt($curl, CURLOPT_POST, 1); if ($data != '') { curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } } curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); curl_close($curl); return $result; } ?>
使用方法:
1、建立qrcode.php
2、拷貝上面代碼進去
3、修改APPID和APPSECRET
4、訪問qrcode.php
即可產生一個帶參數的小程式二維碼
但是這個介面產生的是有LOGO的小程式二維碼。
我們想要產生一個簡簡單單的,無LOGO的小程式二維碼可以嗎?
官方的是沒有辦法的,但是我們可以用第三方的介面產生普通的二維碼的方式。
產生無LOGO二維碼步驟
1、先解碼,把剛才產生的小程式二維碼解碼,獲得URL
2、把獲得的URL用普通的二維碼產生介面產生普通的無LOGO的二維碼
1、解碼
解碼其實有很多的庫我這裡直接用了第三方的JSSDK解碼,免費的,需要申請介面和appid和appkey
<h2>產生無LOGO二維碼</h2><!DOCTYPE html><html> <head> <title>PHP產生小程式二維碼</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://cdn.bootcss.com/zepto/1.0rc1/zepto.min.js"></script> <script src="hprose.min.js"></script> <script src="md5.min.js"></script> </head> <body> <!--顯示二維碼--> <p id="show_test"></p> <p id="select_img" style="display:none;"> <input type="file" id="imgTest" type="file" accept=".gif,.jpg,.jpeg,.png"> <br/> <img src="" id="showImage" alt=""> </p> <a href="javascript:;" id="qrdecode">點擊產生無LOGO二維碼</a> <script> var get_timestamp = function(){ var timestamp =0; timestamp = Date.parse(new Date());// 擷取目前時間戳(以s為單位) timestamp = timestamp / 1000; return timestamp; }; //config,申請解碼介面:http://www.wwei.cn/,免費 var api_id = 'xxxxxxx';//改為您自己的 var api_key = 'xxxxxxxxx';//改為您自己的 var timestamp = get_timestamp(); var client = hprose.Client.create('http://hprose.wwei.cn/qrcode.html', ['qrencode','qrdecode']); //解碼 $("#qrdecode").click(function(){ var timestamp = get_timestamp(); var imgurl = '';//遠程圖片 var imgdata ='<?php echo $base64_image;?>';//本地圖片,直接調用產生的官方小程式二維碼,用於解碼 var signature = md5(api_key + timestamp + imgurl + imgdata); client.ready(function(qrcode) { qrcode.qrdecode(api_id,signature,timestamp,imgurl,imgdata) .then(function(result) { if(result.status !=1){ alert(result.msg); return ; } //產生無LOGO二維碼api介面 var qrcodeapi = "http://qr.liantu.com/api.php?text="; //拼接介面+解碼url並輸出為圖片 $("#show_test").html('<img src="'+qrcodeapi+result.data.raw_text+'"/>'); },function(e) { console.error(e); }); }, function(e) { console.error(e); }); }); </script> </body></html>
上面是通過js來實現的解碼,解碼還是調用了php產生的二維碼的一個圖片地址的
<?php echo $base64_image;?>
上面是調用本地圖片,所以需要結合php產生小程式二維碼的代碼使用這個解碼程式。
解碼後需要產生無LOGO的二維碼,這個我只需要調用一個介面就行。
介面:http://qr.liantu.com/api.php?...
然後拼接解碼後的url就可以產生一個二維碼了。
那麼產生小程式碼和產生無LOGO二維碼的代碼結合起來就是:
<?phpheader('content-type:text/html;charset=utf-8');//配置APPID、APPSECRET$APPID = "APPID"; $APPSECRET = "APPSECRET"; //擷取access_token$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$APPSECRET";//緩衝access_token session_start(); $_SESSION['access_token'] = ""; $_SESSION['expires_in'] = 0; $ACCESS_TOKEN = ""; if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in'])) { $json = httpRequest( $access_token ); $json = json_decode($json,true); // var_dump($json); $_SESSION['access_token'] = $json['access_token']; $_SESSION['expires_in'] = time()+7200; $ACCESS_TOKEN = $json["access_token"]; } else{ $ACCESS_TOKEN = $_SESSION["access_token"]; }//構建請求二維碼參數//path是掃描二維碼跳轉的小程式路徑,可以帶參數?id=xxx//width是二維碼寬度$qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";$param = json_encode(array("path"=>"pages/index/index?id=123","width"=> 150));//POST參數$result = httpRequest( $qcode, $param,"POST");//產生二維碼file_put_contents("qrcode.png", $result);$base64_image ="data:image/jpeg;base64,".base64_encode( $result );//把請求發送到伺服器換取二維碼 function httpRequest($url, $data='', $method='GET'){ $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_AUTOREFERER, 1); if($method=='POST') { curl_setopt($curl, CURLOPT_POST, 1); if ($data != '') { curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } } curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_HEADER, 0); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($curl); curl_close($curl); return $result; } ?><h2>產生小程式官方二維碼</h2><!-- 產生小程式官方二維碼 --><img src="<?php echo $base64_image;?>"/><br/><h2>產生無LOGO二維碼</h2><!-- 產生無LOGO二維碼 --><!DOCTYPE html><html> <head> <title>PHP產生小程式二維碼</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="https://cdn.bootcss.com/zepto/1.0rc1/zepto.min.js"></script> <script src="hprose.min.js"></script> <script src="md5.min.js"></script> </head> <body> <p id="show_test"><!--顯示資訊--></p> <p id="select_img" style="display:none;"> <input type="file" id="imgTest" type="file" accept=".gif,.jpg,.jpeg,.png"> <br/> <img src="" id="showImage" alt=""> </p> <a href="javascript:;" id="qrdecode">點擊產生無LOGO二維碼</a> <script> var get_timestamp = function(){ var timestamp =0; timestamp = Date.parse(new Date());// 擷取目前時間戳(以s為單位) timestamp = timestamp / 1000; return timestamp; }; //config,申請解碼介面:http://www.wwei.cn/,免費 var api_id = 'xxx';//改為您自己的 var api_key = 'xxx';//改為您自己的 (實際使用,建議在後台完成 signature 簽名,以防暴露 api_key ,或定期更改) var timestamp = get_timestamp(); var client = hprose.Client.create('http://hprose.wwei.cn/qrcode.html', ['qrencode','qrdecode']); //解碼 $("#qrdecode").click(function(){ var timestamp = get_timestamp(); var imgurl = '';//遠程圖片 var imgdata ='<?php echo $base64_image;?>';//本地圖片,直接調用產生的官方小程式二維碼,用於解碼 var signature = md5(api_key + timestamp + imgurl + imgdata); client.ready(function(qrcode) { qrcode.qrdecode(api_id,signature,timestamp,imgurl,imgdata) .then(function(result) { if(result.status !=1){ alert(result.msg); return ; } //產生無LOGO二維碼api介面 var qrcodeapi = "http://qr.liantu.com/api.php?text="; //拼接介面+解碼url並輸出為圖片 $("#show_test").html('<img src="'+qrcodeapi+result.data.raw_text+'"/>'); },function(e) { console.error(e); }); }, function(e) { console.error(e); }); }); </script> </body></html>
但是解碼需要用到的兩個js庫
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!