php生成微信小程序二维码

//生成小程序二维码,$mem_id是二维码带的参数,拿过去写上自己的appid和秘钥就能用
        public function ceshihtml($mem_id)
        {
            $APPID ="";//小程序appid
            $APPSECRET = "";//小程序秘钥
            $access_token=$this->checkAuth($APPID,$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'] =$access_token;
            $_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);
                // var_dump($json);
                $_SESSION['access_token'] =$json['access_token'];
                $_SESSION['expires_in'] = time()+7100;
                $ACCESS_TOKEN =$json["access_token"];
            }
            else{
                $ACCESS_TOKEN = $_SESSION["access_token"];
            }
            //构建请求二维码参数
            //path是扫描二维码跳转的小程序路径,可以带参数?id=xxx,透明底色'is_hyaline'=>true
            //width是二维码宽度
            $qcode ="https://api.weixin.qq.com/wxa/getwxacode?access_token=".$ACCESS_TOKEN;//生成圆形二维码
           // $qcode ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=$ACCESS_TOKEN";//生成方形二维码
            $param = json_encode(array("path"=>"pages/index/index?p_id={$mem_id}","width"=> 150));
    
            //POST参数
            $result = $this->httpRequest($qcode,$param,"POST");
            //生成二维码
            $filename= 'userqrcode/'.$mem_id . time() . '.png';
            $ret = file_put_contents($filename, $result, true);
            return $filename;
            //下面是加密
            // $base64_image ="data:image/jpeg;base64,".base64_encode($result );
            // echo $base64_image;
            // return view($this->tmplDir . '.' . 'ceshihtml', $this->data);
    }
    //把请求发送到微信服务器换取二维码
    public 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;
    }
        //获取access_token
        public function checkAuth($appid,$appsecret){
        $url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$appsecret;
        $result = $this->http_get($url);
        if ($result){
        $json = json_decode($result,true);
        if (!$json || isset($json['errcode'])) {
            return false;
        }
            return $json['access_token'];
        }
            return false;
        }
        
        /**
        * GET 请求
        * @param string $url
        */
        private function http_get($url){
        $oCurl = curl_init();
        if(stripos($url,"https://")!==FALSE){
            curl_setopt($oCurl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($oCurl, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($oCurl, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1
        }
            curl_setopt($oCurl, CURLOPT_URL, $url);
            curl_setopt($oCurl, CURLOPT_RETURNTRANSFER, 1 );
            $sContent = curl_exec($oCurl);
            $aStatus = curl_getinfo($oCurl);
            curl_close($oCurl);
            if(intval($aStatus["http_code"])==200){
                return $sContent;
            }else{
        return false;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值