<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta id="viewport" name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,viewport-fit=cover,user-scalable=0;">
    <meta content="telephone=no" name="format-detection">
    <style>
        body {
            overflow: hidden;
            background: #fff;
        }
        .warning {
            width: 80px;
            height: 80px;
            margin: 30px auto 15px;
        }
        .warning img {
            width: 85px;
            height: 85px;
        }
        .warntext {
            width: 80%;
            margin: 0 auto;
            text-align: center; 
            font-size: 20px;
            font-weight: bold;
        }
    </style>
</head>

<body>
    
    <script>
        document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
            WeixinJSBridge.call('hideOptionMenu');
        });
    </script>
    
    <?php
    
        // 获取访问令牌的函数
        function getAccessToken($corpid, $corpsecret) {
            
            $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret";
            $response = file_get_contents($url);
            $data = json_decode($response, true);
            if(isset($data['access_token'])) {
                
                return $data['access_token'];
            } else {
                
                // 处理错误
                return false;
            }
        }
        
        // 从数组中检索访问令牌的函数
        function getCachedAccessToken() {
            
            if(file_exists('../../access_token.php')) {
                
                include '../../access_token.php';
                return $access_token_data['access_token'];
            } else {
                
                // 如果文件不存在，返回空字符串
                return '';
            }
        }
        
        // 检查访问令牌是否过期的函数
        function isAccessTokenExpired() {
            
            if(file_exists('../../access_token.php')) {
                
                include '../../access_token.php';
                return $access_token_data['expires_at'] < time();
            } else {
                
                // 如果文件不存在，返回 true 表示过期
                return true;
            }
        }
        
        // 将访问令牌保存到数组中的函数
        function saveAccessToken($access_token) {
            
            $access_token_data = array(
                'access_token' => $access_token, // 设置访问令牌
                'expires_at' => time() + 7200 // 设置过期时间为2小时后
            );
            file_put_contents('../../access_token.php', '<?php $access_token_data = ' . var_export($access_token_data, true) . ';');
        }
        
        // 你的企业微信API凭证
        // 链接数据库读取配置信息
        // 数据库配置
    	include '../../../../console/Db.php';
    
    	// 实例化类
    	$db = new DB_API($config);
    	
        // 获取配置信息
        $getConfig = $db->set_table('ylb_ChatroomPayConfig')->find(['id' => 1]);
        
        if($getConfig) {
            
            // 获取成功
            $corpid = $getConfig['qywx_Appid']; // 企业微信企业id
            $corpsecret = $getConfig['qywx_Secret']; // 企业微信应用Secret
        }else {
            
            // 获取配置失败
            echo warnInfo('温馨提示', '无法获取到网页授权配置！');
            exit;
        }
        
        // 检查访问令牌是否过期或未缓存
        if(isAccessTokenExpired()) {
            
            // 从企业微信 API 获取新的访问令牌
            $access_token = getAccessToken($corpid, $corpsecret);
            if($access_token) {
                
                // 将访问令牌保存到数组中
                saveAccessToken($access_token);
            } else {
                
                // 错误
                echo warnInfo('温馨提示', '获取access_token失败，请检查你配置的Appid和Secret！');
                exit;
            }
        }
        
        // 获取用户信息
        function getUserInfo($access_token, $code) {
            $url = "https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo?access_token=$access_token&code=$code";
            $response = file_get_contents($url);
            $data = json_decode($response, true);
            return $data;
        }
        
        // userid转换为openid
        function userIdChangeOpenId($access_token, $userid) {
            
            // 请求地址
            $url = "https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=$access_token";
            
            // 请求数据
            $data = json_encode([
                "userid" => $userid
            ]);
            
            // 初始化cURL
            $ch = curl_init();
            
            // 设置cURL选项
            curl_setopt($ch, CURLOPT_URL, $url); // 设置请求地址
            curl_setopt($ch, CURLOPT_POST, 1); // 设置POST请求
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 结果返回为字符串
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); // 设置请求头
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置请求数据
            
            // 执行请求并获取结果
            $response = curl_exec($ch);
           
            // 检查请求是否成功
            if (curl_errno($ch)) {
                echo 'cURL Error: ' . curl_error($ch);
            }
            
            // 关闭cURL会话
            curl_close($ch);
            
            // 返回结果
            return json_decode($response)->openid;
        }
        
        // 提醒信息
        function warnInfo($title,$warnText){
            
            return '
            <title>'.$title.'</title>
            <div class="warning">
                <img src="../../../../static/img/warn.png" />
            </div>
            <p class="warntext">'.$warnText.'</p>';
        }
        
        // 从数组中检索访问令牌
        $access_token = getCachedAccessToken();
        
        // code
        $code = $_GET['code'];
        
        // chatroom_id
        $chatroom_id = $_GET['state'];
        
        // 用户信息
        $userInfo = getUserInfo($access_token, $code);
        
        if($userInfo['errcode'] == 0) {
            
            // 判断当前是userid还是openid
            if($userInfo['userid']) {
                
                // userid
                $userid = $userInfo['userid'];
                
                // userid转换为openid
                $openid = userIdChangeOpenId($access_token, $userid);
            }else {
                
                // openid
                $openid = $userInfo['openid'];
            }
            
            // 确保这两个参数都获取成功
            if($openid && $chatroom_id) {
                
                // 将获取到的openid设置到SESSION
                session_start();
                $_SESSION["payuser_openid"] = $openid;
                
                // 跳回去
                header('Location:return.php?openid='.$openid.'&crid='.$chatroom_id);
            }else {
                
                // 缺少参数
                echo '<title>温馨提示</title>';
                echo warnInfo('温馨提示', '网页授权发生错误！代码位置：common/../qr/Auth_return.php 第232行');
            }
        }else {
            
            // 错误
            echo '<title>温馨提示</title>';
            echo warnInfo('温馨提示', '发生错误，错误信息：' . $userInfo['errmsg']);
        }
        
    ?>
</body>

</html>
    