• 微信config


    <?php
    class share{
    
        private $wxuser = '';
        public $error = array();
    
        function __construct($wxuser) {
            $this->wxuser = $wxuser;    
        }
    
        public function getSgin($access_token) 
        {
            //$wxuser = getCache('wx_'.$this->_mid.'_user');
            $filename = PIGCMS_PATH.'upload/token/share_wxinfo.php';
            
            //var_dump($wxuser);die;
            if (!file_exists($wxuser)) {
                if (empty($wxuser) || !isset($wxuser['appid'])) {
                $wxuser1 = array(
                    'appid' => $this->wxuser['appid'],
                    'appsecret' => $this->wxuser['appSecret'],
                    'share_ticket' => '',
                    'share_dated' => 0
                );
                $str="<?php 
     return ".var_export($wxuser1,true).';';
                file_put_contents($filename,$str);
               }
            }
            $wxuser = include $filename;
            //var_dump($wxuser);die;
            $now = time();
            if($wxuser['share_ticket'] == '' || (file_exists($wxuser) && (time()-filemtime($wxuser) > 5000))){
                //echo 1;die;
                $ticketData = $this->getTicket($access_token);
                if ($ticketData['errcode'] > 0) {
                    $errorarr['ticket_error'] = array('errcode' => $ticketData['errcode'], 'errmsg' => $ticketData['errmsg']);
                } else {
                    $wxuser1['share_ticket'] = $ticketData['ticket'];
                    $wxuser1['share_dated'] = $now + $ticketData['expires_in'];
    
                    file_put_contents($wxuser,$str);
                    $str="<?php 
     return ".var_export($wxuser1,true).';';
                    file_put_contents($filename,$str);
                    //setCache('wx_'.$this->_mid.'_user', $wxuser);
                    $ticket = $ticketData['ticket'];
                }
            } else {
                $ticket = $wxuser['share_ticket'];
            }
            $url = "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
            //echo $url;die;
            $sign_data = $this->addSign($ticket, $url);
            return $sign_data;
        }
    
    
        public function addSign($ticket, $url) {
            $timestamp = time();
            $nonceStr = rand(100000, 999999);
            $array = array(
                "noncestr" => $nonceStr,
                "jsapi_ticket" => $ticket,
                "timestamp" => $timestamp,
                "url" => $url,
            );
            
            ksort($array);
            $signPars = '';
            
            foreach ($array as $k => $v) {
                if ("" != $v && "sign" != $k) {
                    if ($signPars == '') {
                        $signPars .= $k . "=" . $v;
                    } else {
                        $signPars .= "&" . $k . "=" . $v;
                    }
                }
            }
            
            $result = array(
                'appId' => $this->wxuser['appid'],
                'timestamp' => $timestamp,
                'nonceStr' => $nonceStr,
                'url' => $url,
                'signature' => SHA1($signPars),
            );
            
            return $result;
        }
    
        public function getToken()
        {
            //getToken
              $filename = PIGCMS_PATH.'/upload/token/accesstoken';
           // echo $filename;die;
            if(!file_exists($filename) || (file_exists($filename) && (time()-filemtime($filename)) > 5000)){
              //1.url地址
              $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->wxuser['appid'].'&secret='.$this->wxuser['appSecret'];
              //2.判断是否为post请求
              //3.发送请求
              $content = $this->post($url);
              //4.处理返回值
              //返回数据格式为json,php不可以直接操作json格式,需要json_decode转化一下
              $content = json_decode($content);
              $access_token = $content->access_token;
              //把access_token保存到文件
              file_put_contents($filename, $access_token);
            }
            //如果没有过期,那么就去读取缓存文件里的access_token
            else{
              $access_token = file_get_contents($filename);
            }
            //把access_token返回
              return $access_token;
        }
    
     public function post($url)
     {
        // 创建curl对象
        $ch = curl_init ();
        // 配置这个对象
        curl_setopt ($ch, CURLOPT_URL, $url);  // 请求的URL地址
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在
    
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);  // 返回接口的结果,而不是输出
    
        // 发出请求
        $data = curl_exec ( $ch );
        if(curl_errno($ch))
        {
            return 'error'.curl_error($ch);
        }
        // 关闭对象
        curl_close ( $ch );
        // 返回数据
        return $data;
        }
    
         public function getTicket($token) {
            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $token . "&type=jsapi";
            return $this->https_request($url);
        }
        
    
         protected function https_request($url, $data = null,$noprocess=false) {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
            curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0");
            $header = array("Accept-Charset: utf-8");
            curl_setopt($curl, CURLOPT_URL, $url);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
            //curl_setopt($curl, CURLOPT_SSLVERSION, 3);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header); /* * *$header 必须是一个数组** */
            curl_setopt($curl, CURLOPT_HEADER, FALSE);
            curl_setopt($curl, CURLINFO_HEADER_OUT, true);
            if (!empty($data)) {
                curl_setopt($curl, CURLOPT_POST, 1);
                curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            }
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            $output = curl_exec($curl);
            if($noprocess) return $output;
            $errorno = curl_errno($curl);
            if ($errorno) {
                return array('curl' => false, 'errorno' => $errorno);
            } else {
                $res = json_decode($output, 1);
                if ($res['errcode']) {
                    return array('errcode' => $res['errcode'], 'errmsg' => $res['errmsg']);
                } else {
                    return $res;
                }
            }
            curl_close($curl);
        }
    }
  • 相关阅读:
    js开发笔记
    安全相关开发笔记
    常用.NET库使用总结
    Windows使用总结
    .NET Web开发笔记
    Unity插件使用总结
    WinForm开发笔记
    C#开发笔记
    iTunes使用总结
    Mac使用总结
  • 原文地址:https://www.cnblogs.com/lujiang/p/8397985.html
Copyright © 2020-2023  润新知