/** * 数据库操作类(示例,需根据实际情况调整) * 实际项目中请替换为你的数据库连接和查询方法 */ class db { /** * 执行SQL查询(参数化查询防注入) * @param string $sql SQL语句 * @param array $params 参数数组 * @return mixed 成功返回结果,失败返回false */ public static function query($sql, $params = []) { // 实际项目中替换为你的数据库查询方法,例如: // return mysqli_query($conn, $sql); 或使用 PDO // 这里仅作占位,返回true表示执行成功 return true; } /** * 获取单行数据(模拟) * @param mixed $result 查询结果资源 * @return array|false 一行数据或false */ public static function fetch_one($result) { // 实际项目中应解析 $result 并返回一行,例如: // return mysqli_fetch_assoc($result); // 这里返回模拟数据 return ['id' => 1, 'name' => '示例用户']; } /** * 查询单行数据(带参数) * @param string $sql SQL语句 * @param array $params 参数数组 * @return array|false 一行数据或false */ public static function queryone($sql, $params = []) { // 实际项目中应执行查询并返回一行,例如: // $stmt = $pdo->prepare($sql); $stmt->execute($params); return $stmt->fetch(PDO::FETCH_ASSOC); // 这里返回模拟数据 return ['id' => 1, 'name' => '示例用户']; } /** * 查询多行数据(带参数) * @param string $sql SQL语句 * @param array $params 参数数组 * @return array 多行数据数组 */ public static function querylist($sql, $params = []) { // 实际项目中应执行查询并返回多行,例如: // $stmt = $pdo->prepare($sql); $stmt->execute($params); return $stmt->fetchAll(PDO::FETCH_ASSOC); // 这里返回空数组,表示无数据 return []; } /** * 插入数据 * @param string $table 表名 * @param array $data 数据数组 * @return int|false 插入ID或false */ public static function insert($table, $data) { // 实际项目中应执行插入并返回ID return 1; } /** * 更新数据 * @param string $table 表名 * @param array $data 数据数组 * @param string $where 条件 * @return bool 是否成功 */ public static function update($table, $data, $where) { // 实际项目中应执行更新 return true; } } /** * 微信授权接口 - 完整修复版 * 适用:认证服务号 + 微信内浏览器 */ class WechatAuth { // 配置信息(请修改为你的实际配置) private static $config = [ 'app_id' => 'wxc755311e3571de9e', 'app_secret' => 'cc28a60ed33841111e81617c2fb1df55', // 授权回调域名列表(必须与微信公众平台配置一致) 'allowed_domains' => ['www.yigermall.com', 'yigermall.com'], 'default_redirect' => 'https://www.yigermall.com/payment/Wxpay_gz/example/' ]; /** * 获取微信授权链接(最终修复版) */ public static function get_authorize_url($redirect_uri, $state, $scope = 'snsapi_userinfo') { $app_id = self::$config['app_id']; if (empty($app_id) || empty($redirect_uri)) { die('参数错误'); } // ✅ 修复:验证redirect_uri域名是否在允许列表中 $parsed_uri = parse_url($redirect_uri); if (!isset($parsed_uri['host']) || !in_array($parsed_uri['host'], self::$config['allowed_domains'])) { die('redirect_uri 域名不在授权范围内'); } // ✅ 修复:不强制替换域名,使用原始redirect_uri(但必须合法) $redirect_uri_encoded = urlencode($redirect_uri); // 服务号正确接口 $url = "https://open.weixin.qq.com/connect/oauth2/authorize" . "?appid={$app_id}" . "&redirect_uri={$redirect_uri_encoded}" . "&response_type=code" . "&scope={$scope}" . "&state={$state}#wechat_redirect"; header("Location: {$url}"); exit; } /** * 获取授权token */ public static function get_access_token($code) { $app_id = self::$config['app_id']; $app_secret = self::$config['app_secret']; if (empty($app_id) || empty($app_secret) || empty($code)) { return false; } $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token" . "?appid={$app_id}" . "&secret={$app_secret}" . "&code={$code}" . "&grant_type=authorization_code"; $token_data = self::http($token_url, 'GET', '', array(), false); if ($token_data[0] == 200) { $result = json_decode($token_data[1], TRUE); if (isset($result['errcode']) && $result['errcode'] != 0) { return false; } return $result; } return false; } /** * 获取授权后的微信用户信息 */ public static function get_user_info($access_token, $open_id) { if (empty($access_token) || empty($open_id)) { return false; } $info_url = "https://api.weixin.qq.com/sns/userinfo" . "?access_token={$access_token}" . "&openid={$open_id}" . "&lang=zh_CN"; $info_data = self::http($info_url, 'GET', '', array(), false); if ($info_data[0] == 200) { $result = json_decode($info_data[1], TRUE); if (isset($result['errcode']) && $result['errcode'] != 0) { return false; } return $result; } return false; } /** * 获取客户端真实IP */ public static function login_ip() { $ip = ''; if (!empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], 'unknown')) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], 'unknown')) { $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $ip = trim($ips[0]); } elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } return filter_var($ip, FILTER_VALIDATE_IP) ? $ip : ''; } /** * 数字格式化 */ public static function dl_findNumc($str) { return is_numeric($str) ? intval($str) : 0; } /** * 微信登录核心逻辑 */ public static function user_login($code) { $token_data = self::get_access_token($code); if (empty($token_data['access_token']) || empty($token_data['openid'])) { echo "登录授权失败"; return false; } $user_info = self::get_user_info($token_data['access_token'], $token_data['openid']); if (empty($user_info['openid'])) { echo "获取用户信息失败"; return false; } // 查询用户是否存在 $member_u = db::queryone("SELECT count(*) as num FROM `users` WHERE `user_name` = ?", [$user_info['openid']]); if ($member_u['num'] < 1 && !empty($user_info['openid'])) { $user_into = array(); if (!empty($_COOKIE["dl"])) { $user_into['sd_uid'] = self::dl_findNumc($_COOKIE["dl"]); } $user_into['class'] = 2; $user_into['regtime'] = time(); $user_into['regip'] = self::login_ip(); $user_into['user_name'] = $user_info['openid']; $user_into['nickname'] = htmlspecialchars($user_info['nickname'], ENT_QUOTES); $user_into['headimgurl']= $user_info['headimgurl']; $user_into['pools'] = 'admin'; $user_into['integral'] = 0; $user_into['groups'] = 'admin_test'; // 积分系统配置 $jf_sys_on = 0; $jf_sys_fwci = 0; $jf_sys_yqci = 0; $jf_sys_yqzc = 0; $jf_reg_jf = 0; $jf_sys = db::querylist("SELECT * FROM `system` WHERE `class` = 4"); foreach ($jf_sys as $var_sy) { switch ($var_sy['name']) { case 'tjex_on': $jf_sys_on = self::dl_findNumc($var_sy['config']); break; case 'tjex_fwci': $jf_sys_fwci = self::dl_findNumc($var_sy['config']); break; case 'tjex_yqci': $jf_sys_yqci = self::dl_findNumc($var_sy['config']); break; case 'tjex_yqzc': $jf_sys_yqzc = self::dl_findNumc($var_sy['config']); break; case 'reg_jf': $jf_reg_jf = self::dl_findNumc($var_sy['config']); break; } } $star_time = time() - 8400; $client_ip = self::login_ip(); $sql_count = "SELECT count(*) as csum FROM `ffsm_jflog` WHERE `type`=101 AND `ip` = ? AND `time` > ?"; $jklog_count = db::queryone($sql_count, array($client_ip, $star_time)); if (!empty($_COOKIE['dl']) && $jf_sys_on == 1 && $jklog_count['csum'] < $jf_sys_yqci) { $data = array(); $data['uid'] = self::dl_findNumc($_COOKIE['dl']); $data['ext'] = $jf_sys_yqzc; $data['type'] = 101; $data['class']= 2; $data['ip'] = $client_ip; $data['time'] = time(); db::insert('ffsm_jflog', $data); db::update( "users", ['integral' => '`integral` + ?'], "WHERE `uid` = ? LIMIT 1", [$data['ext'], $data['uid']] ); } $reg_uid = db::insert('users', $user_into); if ($reg_uid && $jf_reg_jf > 0) { $data_reg = array(); $data_reg['uid'] = $reg_uid; $data_reg['ext'] = $jf_reg_jf; $data_reg['type'] = 103; $data_reg['class']= 2; $data_reg['ip'] = $client_ip; $data_reg['time'] = time(); db::insert('ffsm_jflog', $data_reg); db::update( "users", ['integral' => '`integral` + ?'], "WHERE `uid` = ? LIMIT 1", [$data_reg['ext'], $data_reg['uid']] ); } } $expire = time() + 60 * 60 * 24 * 30; setcookie("user_name", $user_info['openid'], $expire, '/'); setcookie("usermore", 1, $expire, '/'); return true; } /** * CURL请求 */ public static function http($url, $method, $postfields = null, $headers = array(), $debug = false) { $ci = curl_init(); curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ci, CURLOPT_TIMEOUT, 30); curl_setopt($ci, CURLOPT_RETURNTRANSFER, true); switch ($method) { case 'POST': curl_setopt($ci, CURLOPT_POST, true); if (!empty($postfields)) { curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); } break; case 'GET': curl_setopt($ci, CURLOPT_HTTPGET, true); break; } curl_setopt($ci, CURLOPT_URL, $url); curl_setopt($ci, CURLOPT_HTTPHEADER, $headers); curl_setopt($ci, CURLINFO_HEADER_OUT, true); $response = curl_exec($ci); $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); curl_close($ci); return array($http_code, $response); } } /** * 示例使用(可选) * 在实际项目中,你需要在回调页面调用这些方法 */ // 示例:获取授权URL // WechatAuth::get_authorize_url('https://www.yigermall.com/wx_callback.php', 'state123'); // 示例:处理回调 // if (isset($_GET['code'])) { // WechatAuth::user_login($_GET['code']); // } 宝宝起名_为宝宝起一个好名字-灵机妙算在线起名

宝宝起名

我的测算
八字精批
  • 宝宝姓氏
  • 宝宝性别
    未出生
  • 出生日期
已为23285408人测算起名查看历史订单 >
宝宝起名 宝宝起名 宝宝起名 宝宝起名 宝宝起名

遗子千金,不如教子一艺

教子一艺,不如赐子佳名

有好名,才能脱颖而出,一名惊人

好的名字 差的名字
点灯还愿

热门推荐

热门测算