首頁 >後端開發 >php教程 >PHP產生微信二維碼實例

PHP產生微信二維碼實例

小云云
小云云原創
2018-03-20 14:15:2010005瀏覽

透過後台介面可以取得小程式任意頁面的二維碼,掃描該二維碼可以直接進入小程式對應的頁面。官方推薦產生並使用小程式碼,它具有更好的辨識度。目前有3個介面可以產生小程式碼,開發者可以依照自己的需求選擇合適的介面。

介面A: 適用於需要的碼數量較少的業務場景介面位址:

https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN

參數如下:

注意:透過此介面產生的小程式碼,永久有效,數量限制請參閱文末說明,請謹慎使用。使用者掃描該碼進入小程式後,將直接進入 path 對應的頁面。

介面B:適用於所需的碼數量極多,或僅暫時使用的業務場景:

https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN

參數如下:

注意:透過此介面產生的小程式碼,永久有效,數量暫無限制。使用者掃描該碼進入小程式後,開發者需在對應頁面取得的碼中 scene 欄位的值,再做處理邏輯。使用以下程式碼可以取得到二維碼中的 scene 欄位的值。偵錯階段可以使用開發工具的條件編譯自訂參數scene=xxxx 進行模擬,開發工具模擬時的scene 的參數值需要進行urlencode

// 这是首页的 js
Page({
  onLoad: function(options) {
    // options 中的 scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
    var scene = decodeURIComponent(options.scene)
  }
})


介面C:適用於需要的碼數量較少的業務場景:

https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN

參數如下:

注意:透過此介面產生的小程式二維碼,永久有效,數量限制請參閱文末說明,請謹慎使用。使用者掃描該碼進入小程式後,將直接進入 path 對應的頁面。

這幾個介面POST 參數需要轉換成 json 字串,不支援 form 表單提交。介面A加上介面C,總共產生的碼數量限制為100,000,請謹慎呼叫。
這裡以介面B為例,講一下產生二維碼圖片並儲存本機伺服器:
1. 取得access_token
access_token 是全域唯一介面呼叫憑證,開發者呼叫各介面時都需使用access_token,需妥善保存。做過微信開發和公眾號開發,這都是最基本的,這裡獲取方法跟公眾號獲取access_token 一模一樣,方法見: 獲取微信基礎接口憑證Access_token

#2.生成二維碼

/**
 * 生成小程序二维码
 * @param  string $qr_path 		存储路径,相对于程序根目录(例如:/Public/Qrcode/)
 * @param  string $filename 	存储的图片名称(例如:aaa.png)
 * @param  string $scene 		二维码场景值
 * @param  string $page 		二维码跳转页面
 * @param  string $expires_in 	二维码有效时间
 * @return [type]         [description]
 */
function create_qrcode($qr_path,$filename,$scene,$page='',$expires_in=7200){
	
	if(empty($qr_path)) return array('status'=>0,'info'=>'缺少存储路径'); 
	if(empty($filename)) return array('status'=>0,'info'=>'请确定存储的图片名称'); 
	if(empty($scene)) return array('status'=>0,'info'=>'缺少二维码场景值'); 
	
	if(!is_dir('.'.$qr_path)){								//	./Public/Qrcode/
		mkdir(iconv("GBK","UTF-8",'.'.$qr_path),0777,true); 
	}
	$file = $qr_path.$filename;								//	 /Public/Qrcode/aaa.png
	$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
	$fileUrl = $protocol.$_SERVER['HTTP_HOST'].$file;		//	 http://yourhost/Public/Qrcode/aaa.png
	$savePath = '.'.$file;									//	 ./Public/Qrcode/aaa.png
	if(file_exists($savePath)){
		//当前时间-文件创建时间<过期时间
		if( (time()-filemtime($savePath)) < $expires_in ) return array(&#39;status&#39;=>1,&#39;info&#39;=>$fileUrl); 
	}
	
	$accessToken = &#39;xxxxxxxxxxxxxxxxxxxxxx&#39;; 				// 获取到的 access_token
	$url = &#39;https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=&#39;.$accessToken;
	$qrcode = array(
		&#39;scene&#39;			=> $scene,
		&#39;width&#39;			=> 200,
		&#39;page&#39;			=> $page,
		&#39;auto_color&#39;	=> true
	);
	$result = request($url,true,&#39;POST&#39;,json_encode($qrcode));
	$errcode = json_decode($result,true)[&#39;errcode&#39;];
	$errmsg = json_decode($result,true)[&#39;errmsg&#39;];
	if($errcode) return array(&#39;status&#39;=>0,&#39;info&#39;=>$errmsg); 
	$res = file_put_contents($savePath,$result);			//	将获取到的二维码图片流保存成图片文件

	if($res===false) return array(&#39;status&#39;=>0,&#39;info&#39;=>&#39;生成二维码失败&#39;); 
	return array(&#39;status&#39;=>1,&#39;info&#39;=>$fileUrl); 			//返回本地图片地址
}

相關推薦:

nodejs超簡單產生二維碼方法

##JS將連結產生二維碼並轉為圖片的方法

JS產生二維碼#

以上是PHP產生微信二維碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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