掃碼跳轉微信小程序(服務端微信API生成二維碼)


1、微信文檔地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html

2、PHP生成二維碼

session_start();
//配置APPID、APPSECRET
public $APPID = APPID ;
public $APPSECRET = APPSECRET;
	
public function createCode(){
	//獲取access_token
	$access_token = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->APPID."&secret=".$this->APPSECRET;
	$_SESSION['expires_in'] = 0;
	$ACCESS_TOKEN = "";
    	if(!isset($_SESSION['access_token']) || (isset($_SESSION['expires_in']) && time() > $_SESSION['expires_in'])) {
	      $json = $this->httpRequest( $access_token );
    	      $json = json_decode($json,true);
    	      $_SESSION['access_token'] = $json['access_token'];
    	      $_SESSION['expires_in'] = time()+7200;
    	      $ACCESS_TOKEN = $json["access_token"];
    	}else{
    	      $ACCESS_TOKEN =  $_SESSION["access_token"];
    	}
    	 
    	//構建請求二維碼參數
	//適用於需要的碼數量較少的業務場景。通過該接口生成的小程序碼,永久有效,有數量限制
    	// $qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";
	// $param = json_encode(array("path"=>"PackageTab1/orderDetails/orderDetails?order_no=200509101229710907","width"=> 150));
		 
		 
		 
	//適用於需要的碼數量極多的業務場景。通過該接口生成的小程序碼,永久有效,數量暫無限制
    	$qcode ="https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" . $ACCESS_TOKEN;
    	$param = json_encode(array("page"=>"PackageTab1/orderDetails/orderDetails","scene"=>"order_no=200509101229710907","width"=> 150));
    	//POST參數
    	$result = $this->httpRequest( $qcode, $param,"POST");
    	//生成二維碼
    	file_put_contents("./QRcodeImage/qrcode.png", $result);
    }
    
    //把請求發送到微信服務器換取二維碼
    function httpRequest($url, $data='', $method='GET', $aHeader=''){
        $curl = curl_init();
	//這是你想用PHP取回的URL地址。你也可以在用curl_init()函數初始化時設置這個選項。
        curl_setopt($curl, CURLOPT_URL, $url);
	//FALSE 禁止 cURL 驗證對等證書(peer's certificate)。
	//要驗證的交換證書可以在 CURLOPT_CAINFO 選項中設置,或在 CURLOPT_CAPATH中設置證書目錄
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
	//設置為 1 是檢查服務器SSL證書中是否存在一個公用名(common name)。
	// 譯者注:公用名(Common Name)一般來講就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)。 
	// 設置成 2,會檢查公用名是否存在,並且是否與提供的主機名匹配。 
	// 0 為不檢查名稱。 
	// 在生產環境中,這個值應該是 2(默認值)。
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
	//在HTTP請求中包含一個”user-agent”頭的字符串。
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
	//設置這個選項為一個非零值(象 “Location: “)的頭,服務器會把它當做HTTP頭的一部分發送(注意這是遞歸的,PHP將發送形如 “Location: “的頭)。
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
        if($method=='POST') {
	      //如果你想PHP去做一個正規的HTTP POST,設置這個選項為一個非零值。
	      //這個POST是普通的 application/x-www-from-urlencoded 類型,多數被HTML表單使用。
              curl_setopt($curl, CURLOPT_POST, 1);
            if ($data != '') {
		//全部數據使用HTTP協議中的 "POST" 操作來發送。 要發送文件,在文件名前面加上@前綴並使用完整路徑
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
        }
	if ($aHeader != '') {
		//設置 HTTP 頭字段的數組。格式: array('Content-type: text/plain', 'Content-length: 100')
		url_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
	}
	//允許 cURL 函數執行的最長秒數。
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
		
	// 	啟用時會將頭文件的信息作為數據流輸出。
	//參數為1表示輸出信息頭,為0表示不輸出
        curl_setopt($curl, CURLOPT_HEADER, 0);
		
	//將curl_exec()獲取的信息以字符串返回,而不是直接輸出。 
	//參數為1表示$html,為0表示echo $html
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $result = curl_exec($curl);
        curl_close($curl);
        return $result;
    }

3、微信小程序頁面獲取跳轉參數

onLoad(option) {
	console.log(option.scene)
	if(option.scene) {
		let qrUrl = decodeURIComponent(option.scene)
		let arrPara = qrUrl.split("&");
		let arr = [];
		let obj = {};
		for (var i in arrPara) {
			arr = arrPara[i].split("=");
			let name = arr[0]
			obj[name] = arr[1];
		}
		if (obj['order_no']) {
			this.order_no = obj['order_no']	
		}
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM