• 扫码跳转微信小程序(服务端微信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']	
    		}
    	}
    }
    
  • 相关阅读:
    【视频开发】EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端
    【视频开发】EasyIPCamera通过RTSP协议接入海康、大华等摄像机,摒弃私有SDK接入弊端
    【视频开发】RTSP SERVER(基于live555)详细设计
    【视频开发】RTSP SERVER(基于live555)详细设计
    【C/C++开发】C++编译指令#pragma pack的配对使用
    【C/C++开发】C++编译指令#pragma pack的配对使用
    【视频开发】【Live555】通过live555实现H264 RTSP直播
    【视频开发】【Live555】通过live555实现H264 RTSP直播
    【视频开发】【Live555】live555实现h264码流RTSP传输
    【视频开发】【Live555】live555实现h264码流RTSP传输
  • 原文地址:https://www.cnblogs.com/lin127/p/12881405.html
Copyright © 2020-2023  润新知