添加后台代理代码
This commit is contained in:
209
codes/agent/game/api/tests/unit/check_session_config.php
Normal file
209
codes/agent/game/api/tests/unit/check_session_config.php
Normal file
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
/**
|
||||
* PHP Session配置检查和修复脚本
|
||||
* 用于排查session跨请求丢失的问题
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
echo "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Session配置检查</title>";
|
||||
echo "<style>body{font-family: Arial, sans-serif; margin: 20px;} .ok{color: green;} .warning{color: orange;} .error{color: red;} table{border-collapse: collapse; width: 100%;} th,td{border: 1px solid #ddd; padding: 8px; text-align: left;} th{background-color: #f2f2f2;}</style>";
|
||||
echo "</head><body>";
|
||||
echo "<h1>PHP Session配置检查</h1>";
|
||||
|
||||
// 启动session
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
echo "<h2>基本Session信息</h2>";
|
||||
echo "<table>";
|
||||
echo "<tr><th>项目</th><th>值</th><th>状态</th></tr>";
|
||||
echo "<tr><td>Session ID</td><td>" . session_id() . "</td><td class='ok'>正常</td></tr>";
|
||||
echo "<tr><td>Session 名称</td><td>" . session_name() . "</td><td class='ok'>正常</td></tr>";
|
||||
echo "<tr><td>Session 状态</td><td>" . session_status() . " (" .
|
||||
(session_status() == PHP_SESSION_DISABLED ? "已禁用" :
|
||||
(session_status() == PHP_SESSION_NONE ? "未启动" : "已启动")) . ")</td><td class='" .
|
||||
(session_status() == PHP_SESSION_ACTIVE ? "ok" : "error") . "'>" .
|
||||
(session_status() == PHP_SESSION_ACTIVE ? "正常" : "异常") . "</td></tr>";
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>Session配置检查</h2>";
|
||||
echo "<table>";
|
||||
echo "<tr><th>配置项</th><th>当前值</th><th>推荐值</th><th>状态</th><th>说明</th></tr>";
|
||||
|
||||
$configs = [
|
||||
'session.save_handler' => ['推荐' => 'files', '说明' => 'Session存储方式'],
|
||||
'session.save_path' => ['推荐' => '可写目录', '说明' => 'Session文件存储路径'],
|
||||
'session.use_cookies' => ['推荐' => '1', '说明' => '使用Cookie存储Session ID'],
|
||||
'session.use_only_cookies' => ['推荐' => '1', '说明' => '仅使用Cookie,不使用URL传递'],
|
||||
'session.cookie_lifetime' => ['推荐' => '0', '说明' => 'Cookie生命周期,0表示浏览器关闭时删除'],
|
||||
'session.cookie_path' => ['推荐' => '/', '说明' => 'Cookie作用路径'],
|
||||
'session.cookie_domain' => ['推荐' => '', '说明' => 'Cookie作用域名'],
|
||||
'session.cookie_secure' => ['推荐' => 'HTTPS时为1', '说明' => '仅在HTTPS下传输Cookie'],
|
||||
'session.cookie_httponly' => ['推荐' => '1', '说明' => '防止JS访问Cookie'],
|
||||
'session.gc_maxlifetime' => ['推荐' => '1440', '说明' => 'Session最大生存时间(秒)'],
|
||||
'session.gc_probability' => ['推荐' => '1', '说明' => '垃圾回收概率分子'],
|
||||
'session.gc_divisor' => ['推荐' => '100', '说明' => '垃圾回收概率分母']
|
||||
];
|
||||
|
||||
foreach ($configs as $config => $info) {
|
||||
$value = ini_get($config);
|
||||
$status = 'ok';
|
||||
$statusText = '正常';
|
||||
|
||||
// 特殊检查逻辑
|
||||
switch ($config) {
|
||||
case 'session.save_path':
|
||||
if (empty($value)) {
|
||||
$status = 'warning';
|
||||
$statusText = '使用默认路径';
|
||||
} elseif (!is_writable($value)) {
|
||||
$status = 'error';
|
||||
$statusText = '路径不可写';
|
||||
}
|
||||
break;
|
||||
case 'session.use_cookies':
|
||||
case 'session.use_only_cookies':
|
||||
case 'session.cookie_httponly':
|
||||
if ($value != '1') {
|
||||
$status = 'warning';
|
||||
$statusText = '建议启用';
|
||||
}
|
||||
break;
|
||||
case 'session.cookie_secure':
|
||||
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
|
||||
if ($isHttps && $value != '1') {
|
||||
$status = 'warning';
|
||||
$statusText = 'HTTPS环境建议启用';
|
||||
} elseif (!$isHttps && $value == '1') {
|
||||
$status = 'error';
|
||||
$statusText = 'HTTP环境不应启用';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
echo "<tr>";
|
||||
echo "<td>$config</td>";
|
||||
echo "<td>$value</td>";
|
||||
echo "<td>" . $info['推荐'] . "</td>";
|
||||
echo "<td class='$status'>$statusText</td>";
|
||||
echo "<td>" . $info['说明'] . "</td>";
|
||||
echo "</tr>";
|
||||
}
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>Session目录权限检查</h2>";
|
||||
$savePath = ini_get('session.save_path');
|
||||
if (empty($savePath)) {
|
||||
$savePath = sys_get_temp_dir();
|
||||
}
|
||||
|
||||
echo "<table>";
|
||||
echo "<tr><th>项目</th><th>值</th><th>状态</th></tr>";
|
||||
echo "<tr><td>Session保存路径</td><td>$savePath</td>";
|
||||
if (is_dir($savePath)) {
|
||||
echo "<td class='ok'>目录存在</td>";
|
||||
} else {
|
||||
echo "<td class='error'>目录不存在</td>";
|
||||
}
|
||||
echo "</tr>";
|
||||
|
||||
echo "<tr><td>目录可读</td><td>" . (is_readable($savePath) ? "是" : "否") . "</td>";
|
||||
echo "<td class='" . (is_readable($savePath) ? "ok" : "error") . "'>" . (is_readable($savePath) ? "正常" : "异常") . "</td></tr>";
|
||||
|
||||
echo "<tr><td>目录可写</td><td>" . (is_writable($savePath) ? "是" : "否") . "</td>";
|
||||
echo "<td class='" . (is_writable($savePath) ? "ok" : "error") . "'>" . (is_writable($savePath) ? "正常" : "异常") . "</td></tr>";
|
||||
|
||||
// 检查session文件
|
||||
$sessionFile = $savePath . '/sess_' . session_id();
|
||||
echo "<tr><td>Session文件</td><td>$sessionFile</td>";
|
||||
if (file_exists($sessionFile)) {
|
||||
echo "<td class='ok'>文件存在</td>";
|
||||
} else {
|
||||
echo "<td class='warning'>文件不存在</td>";
|
||||
}
|
||||
echo "</tr>";
|
||||
|
||||
if (file_exists($sessionFile)) {
|
||||
echo "<tr><td>Session文件大小</td><td>" . filesize($sessionFile) . " 字节</td><td class='ok'>正常</td></tr>";
|
||||
echo "<tr><td>Session文件修改时间</td><td>" . date('Y-m-d H:i:s', filemtime($sessionFile)) . "</td><td class='ok'>正常</td></tr>";
|
||||
}
|
||||
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>环境信息</h2>";
|
||||
echo "<table>";
|
||||
echo "<tr><th>项目</th><th>值</th></tr>";
|
||||
echo "<tr><td>PHP版本</td><td>" . PHP_VERSION . "</td></tr>";
|
||||
echo "<tr><td>操作系统</td><td>" . PHP_OS . "</td></tr>";
|
||||
echo "<tr><td>服务器软件</td><td>" . ($_SERVER['SERVER_SOFTWARE'] ?? '未知') . "</td></tr>";
|
||||
echo "<tr><td>文档根目录</td><td>" . ($_SERVER['DOCUMENT_ROOT'] ?? '未知') . "</td></tr>";
|
||||
echo "<tr><td>当前脚本</td><td>" . ($_SERVER['SCRIPT_NAME'] ?? '未知') . "</td></tr>";
|
||||
echo "<tr><td>请求方法</td><td>" . ($_SERVER['REQUEST_METHOD'] ?? '未知') . "</td></tr>";
|
||||
echo "<tr><td>User Agent</td><td>" . ($_SERVER['HTTP_USER_AGENT'] ?? '未知') . "</td></tr>";
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>Cookie信息</h2>";
|
||||
echo "<table>";
|
||||
echo "<tr><th>Cookie名</th><th>值</th></tr>";
|
||||
if (!empty($_COOKIE)) {
|
||||
foreach ($_COOKIE as $name => $value) {
|
||||
echo "<tr><td>$name</td><td>" . htmlspecialchars($value) . "</td></tr>";
|
||||
}
|
||||
} else {
|
||||
echo "<tr><td colspan='2'>没有Cookie</td></tr>";
|
||||
}
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>修复建议</h2>";
|
||||
echo "<div>";
|
||||
|
||||
// 检查常见问题并给出建议
|
||||
$hasIssues = false;
|
||||
|
||||
if (!is_writable($savePath)) {
|
||||
echo "<p class='error'>⚠️ Session保存目录不可写,需要修改目录权限</p>";
|
||||
$hasIssues = true;
|
||||
}
|
||||
|
||||
if (ini_get('session.use_cookies') != '1') {
|
||||
echo "<p class='warning'>⚠️ 建议启用 session.use_cookies</p>";
|
||||
$hasIssues = true;
|
||||
}
|
||||
|
||||
if (ini_get('session.use_only_cookies') != '1') {
|
||||
echo "<p class='warning'>⚠️ 建议启用 session.use_only_cookies</p>";
|
||||
$hasIssues = true;
|
||||
}
|
||||
|
||||
$isHttps = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') || $_SERVER['SERVER_PORT'] == 443;
|
||||
if ($isHttps && ini_get('session.cookie_secure') != '1') {
|
||||
echo "<p class='warning'>⚠️ HTTPS环境建议启用 session.cookie_secure</p>";
|
||||
$hasIssues = true;
|
||||
}
|
||||
|
||||
if (!$hasIssues) {
|
||||
echo "<p class='ok'>✅ 没有发现明显的配置问题</p>";
|
||||
}
|
||||
|
||||
echo "<h3>微信登录相关建议:</h3>";
|
||||
echo "<ul>";
|
||||
echo "<li>确保浏览器支持Cookie并已启用</li>";
|
||||
echo "<li>检查防火墙或代理是否阻止Cookie</li>";
|
||||
echo "<li>确保微信授权回调的域名与设置Session的域名一致</li>";
|
||||
echo "<li>检查服务器时间是否正确,避免Session过期</li>";
|
||||
echo "<li>在nginx/apache配置中确保正确传递Cookie</li>";
|
||||
echo "</ul>";
|
||||
echo "</div>";
|
||||
|
||||
echo "<h2>测试工具</h2>";
|
||||
echo "<p>";
|
||||
echo "<a href='test_session_persistence.php' target='_blank' style='margin-right: 10px; padding: 5px 10px; background: #007cba; color: white; text-decoration: none;'>Session持久化测试</a>";
|
||||
echo "<a href='test_weixin_session_flow.php' target='_blank' style='margin-right: 10px; padding: 5px 10px; background: #28a745; color: white; text-decoration: none;'>微信登录流程测试</a>";
|
||||
echo "<a href='debug_weixin.php' target='_blank' style='margin-right: 10px; padding: 5px 10px; background: #17a2b8; color: white; text-decoration: none;'>微信登录调试</a>";
|
||||
echo "</p>";
|
||||
|
||||
echo "</body></html>";
|
||||
?>
|
||||
102
codes/agent/game/api/tests/unit/test_curl_fix.php
Normal file
102
codes/agent/game/api/tests/unit/test_curl_fix.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
/**
|
||||
* 测试CURL CURLOPT_SAFE_UPLOAD修复
|
||||
* 模拟微信API调用,验证PHP8兼容性问题已解决
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
echo "=== CURL CURLOPT_SAFE_UPLOAD 修复测试 ===\n";
|
||||
|
||||
// 测试CURL基本功能
|
||||
if (!function_exists('curl_init')) {
|
||||
echo "❌ CURL扩展未安装\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
echo "✅ CURL扩展已安装\n";
|
||||
echo "PHP版本: " . PHP_VERSION . "\n";
|
||||
|
||||
// 测试CURLOPT_SAFE_UPLOAD常量是否还存在
|
||||
if (defined('CURLOPT_SAFE_UPLOAD')) {
|
||||
echo "⚠️ CURLOPT_SAFE_UPLOAD常量仍然存在\n";
|
||||
} else {
|
||||
echo "✅ CURLOPT_SAFE_UPLOAD常量已被移除(PHP8正常行为)\n";
|
||||
}
|
||||
|
||||
// 测试修复后的逻辑
|
||||
$ch = curl_init();
|
||||
echo "✅ curl_init() 成功\n";
|
||||
|
||||
try {
|
||||
// 模拟修复后的代码逻辑
|
||||
if (version_compare(phpversion(), '5.6') >= 0 && version_compare(phpversion(), '8.0') < 0) {
|
||||
echo "🔧 PHP版本 < 8.0,应该设置 CURLOPT_SAFE_UPLOAD\n";
|
||||
if (defined('CURLOPT_SAFE_UPLOAD')) {
|
||||
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
|
||||
echo "✅ 设置 CURLOPT_SAFE_UPLOAD = false 成功\n";
|
||||
}
|
||||
} else {
|
||||
echo "✅ PHP版本 >= 8.0,跳过 CURLOPT_SAFE_UPLOAD 设置(安全上传默认启用)\n";
|
||||
}
|
||||
|
||||
// 测试一个简单的HTTP请求
|
||||
curl_setopt($ch, CURLOPT_URL, "https://httpbin.org/get");
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
|
||||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
|
||||
|
||||
echo "🔄 测试HTTP请求...\n";
|
||||
$response = curl_exec($ch);
|
||||
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
||||
$error = curl_error($ch);
|
||||
|
||||
if ($response !== false && $httpCode == 200) {
|
||||
echo "✅ HTTP请求成功,状态码: $httpCode\n";
|
||||
echo "✅ CURL功能正常工作\n";
|
||||
} else {
|
||||
echo "⚠️ HTTP请求失败,状态码: $httpCode\n";
|
||||
if ($error) {
|
||||
echo "错误信息: $error\n";
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "❌ 测试失败: " . $e->getMessage() . "\n";
|
||||
} catch (ValueError $e) {
|
||||
echo "❌ PHP8 ValueError: " . $e->getMessage() . "\n";
|
||||
echo "这表明CURLOPT_SAFE_UPLOAD问题仍然存在\n";
|
||||
} finally {
|
||||
curl_close($ch);
|
||||
}
|
||||
|
||||
echo "\n=== 包含communication.func.php测试 ===\n";
|
||||
|
||||
// 测试实际的communication.func.php文件
|
||||
require_once __DIR__ . '/framework/function/communication.func.php';
|
||||
|
||||
try {
|
||||
echo "✅ communication.func.php 加载成功\n";
|
||||
|
||||
// 测试ihttp_get函数(这会触发CURLOPT_SAFE_UPLOAD相关代码)
|
||||
if (function_exists('ihttp_get')) {
|
||||
echo "🔄 测试ihttp_get函数...\n";
|
||||
$result = ihttp_get("https://httpbin.org/get");
|
||||
if ($result && is_array($result)) {
|
||||
echo "✅ ihttp_get 函数工作正常\n";
|
||||
} else {
|
||||
echo "⚠️ ihttp_get 函数返回异常\n";
|
||||
}
|
||||
} else {
|
||||
echo "❌ ihttp_get 函数不存在\n";
|
||||
}
|
||||
|
||||
} catch (Exception $e) {
|
||||
echo "❌ communication.func.php 测试失败: " . $e->getMessage() . "\n";
|
||||
} catch (ValueError $e) {
|
||||
echo "❌ communication.func.php PHP8 ValueError: " . $e->getMessage() . "\n";
|
||||
}
|
||||
|
||||
echo "\n=== 测试完成 ===\n";
|
||||
?>
|
||||
102
codes/agent/game/api/tests/unit/test_session_persistence.php
Normal file
102
codes/agent/game/api/tests/unit/test_session_persistence.php
Normal file
@@ -0,0 +1,102 @@
|
||||
<?php
|
||||
/**
|
||||
* 测试session跨请求持久化功能
|
||||
* 用于排查微信登录中session丢失问题
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
echo "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Session持久化测试</title></head><body>";
|
||||
echo "<h1>Session持久化测试</h1>";
|
||||
|
||||
// 启动session
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
echo "<h2>当前Session信息</h2>";
|
||||
echo "<p>Session ID: " . session_id() . "</p>";
|
||||
echo "<p>Session 名称: " . session_name() . "</p>";
|
||||
echo "<p>Session 状态: " . session_status() . "</p>";
|
||||
|
||||
// 检查是否有测试数据
|
||||
if (isset($_GET['action'])) {
|
||||
switch ($_GET['action']) {
|
||||
case 'set':
|
||||
// 设置测试数据
|
||||
$_SESSION['test_time'] = time();
|
||||
$_SESSION['test_data'] = 'Test session data - ' . date('Y-m-d H:i:s');
|
||||
$_SESSION['test_counter'] = isset($_SESSION['test_counter']) ? $_SESSION['test_counter'] + 1 : 1;
|
||||
echo "<p style='color: green;'>✅ Session数据已设置</p>";
|
||||
break;
|
||||
|
||||
case 'check':
|
||||
// 检查测试数据
|
||||
if (isset($_SESSION['test_time'])) {
|
||||
echo "<p style='color: green;'>✅ Session数据存在</p>";
|
||||
echo "<p>设置时间: " . date('Y-m-d H:i:s', $_SESSION['test_time']) . "</p>";
|
||||
echo "<p>测试数据: " . $_SESSION['test_data'] . "</p>";
|
||||
echo "<p>访问计数: " . $_SESSION['test_counter'] . "</p>";
|
||||
} else {
|
||||
echo "<p style='color: red;'>❌ Session数据不存在</p>";
|
||||
}
|
||||
break;
|
||||
|
||||
case 'clear':
|
||||
// 清除测试数据
|
||||
unset($_SESSION['test_time']);
|
||||
unset($_SESSION['test_data']);
|
||||
unset($_SESSION['test_counter']);
|
||||
echo "<p style='color: orange;'>🗑️ Session数据已清除</p>";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
echo "<h2>当前Session内容</h2>";
|
||||
echo "<pre>" . print_r($_SESSION, true) . "</pre>";
|
||||
|
||||
echo "<h2>PHP Session配置</h2>";
|
||||
echo "<table border='1' cellpadding='5'>";
|
||||
echo "<tr><th>配置项</th><th>值</th></tr>";
|
||||
echo "<tr><td>session.save_handler</td><td>" . ini_get('session.save_handler') . "</td></tr>";
|
||||
echo "<tr><td>session.save_path</td><td>" . ini_get('session.save_path') . "</td></tr>";
|
||||
echo "<tr><td>session.cookie_lifetime</td><td>" . ini_get('session.cookie_lifetime') . "</td></tr>";
|
||||
echo "<tr><td>session.cookie_path</td><td>" . ini_get('session.cookie_path') . "</td></tr>";
|
||||
echo "<tr><td>session.cookie_domain</td><td>" . ini_get('session.cookie_domain') . "</td></tr>";
|
||||
echo "<tr><td>session.cookie_secure</td><td>" . (ini_get('session.cookie_secure') ? 'Yes' : 'No') . "</td></tr>";
|
||||
echo "<tr><td>session.cookie_httponly</td><td>" . (ini_get('session.cookie_httponly') ? 'Yes' : 'No') . "</td></tr>";
|
||||
echo "<tr><td>session.use_cookies</td><td>" . (ini_get('session.use_cookies') ? 'Yes' : 'No') . "</td></tr>";
|
||||
echo "<tr><td>session.use_only_cookies</td><td>" . (ini_get('session.use_only_cookies') ? 'Yes' : 'No') . "</td></tr>";
|
||||
echo "</table>";
|
||||
|
||||
echo "<h2>HTTP头信息</h2>";
|
||||
echo "<pre>";
|
||||
foreach ($_SERVER as $key => $value) {
|
||||
if (strpos($key, 'HTTP_') === 0) {
|
||||
echo "$key: $value\n";
|
||||
}
|
||||
}
|
||||
echo "</pre>";
|
||||
|
||||
echo "<h2>Cookie信息</h2>";
|
||||
echo "<pre>" . print_r($_COOKIE, true) . "</pre>";
|
||||
|
||||
echo "<h2>操作</h2>";
|
||||
echo "<p>";
|
||||
echo "<a href='?action=set' style='margin-right: 10px; padding: 5px 10px; background: #007cba; color: white; text-decoration: none;'>设置Session数据</a>";
|
||||
echo "<a href='?action=check' style='margin-right: 10px; padding: 5px 10px; background: #28a745; color: white; text-decoration: none;'>检查Session数据</a>";
|
||||
echo "<a href='?action=clear' style='margin-right: 10px; padding: 5px 10px; background: #dc3545; color: white; text-decoration: none;'>清除Session数据</a>";
|
||||
echo "<a href='?' style='margin-right: 10px; padding: 5px 10px; background: #6c757d; color: white; text-decoration: none;'>刷新页面</a>";
|
||||
echo "</p>";
|
||||
|
||||
echo "<h2>跨请求测试</h2>";
|
||||
echo "<p>1. 点击「设置Session数据」</p>";
|
||||
echo "<p>2. 在新标签页中打开此页面</p>";
|
||||
echo "<p>3. 点击「检查Session数据」,看是否能读取到刚才设置的数据</p>";
|
||||
|
||||
echo "<h2>微信登录相关测试</h2>";
|
||||
echo "<p><a href='debug_weixin.php' target='_blank'>查看微信登录调试信息</a></p>";
|
||||
|
||||
echo "</body></html>";
|
||||
?>
|
||||
96
codes/agent/game/api/tests/unit/test_weixin_curl_fix.php
Normal file
96
codes/agent/game/api/tests/unit/test_weixin_curl_fix.php
Normal file
@@ -0,0 +1,96 @@
|
||||
<?php
|
||||
/**
|
||||
* 模拟微信登录回调测试
|
||||
* 测试CURLOPT_SAFE_UPLOAD修复后微信API调用是否正常
|
||||
*/
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 1);
|
||||
|
||||
echo "=== 微信登录回调CURL修复测试 ===\n";
|
||||
|
||||
// 模拟微信回调参数
|
||||
$_GET['code'] = '091qfQ0w3Lxnd530000gA0DiBo0qfQ0E';
|
||||
$_GET['state'] = 'ylsid-PHPSESSID';
|
||||
|
||||
// 启动session(必须在任何输出之前)
|
||||
if (session_status() == PHP_SESSION_NONE) {
|
||||
session_start();
|
||||
}
|
||||
|
||||
// 模拟session中的登录参数
|
||||
define('LOGINPARAMETER_CALLBACK', 'login_callback');
|
||||
$_SESSION[LOGINPARAMETER_CALLBACK] = json_encode([
|
||||
'scode' => 'test_scode_123',
|
||||
'app_id' => 1,
|
||||
'dev_key' => 'test_devkey',
|
||||
'market_key' => 'test_market',
|
||||
'return_url' => 'https://example.com/success',
|
||||
'return_parameter' => '',
|
||||
'fail_url' => 'https://example.com/error'
|
||||
]);
|
||||
|
||||
echo "✅ Session参数已设置\n";
|
||||
echo "Session ID: " . session_id() . "\n";
|
||||
|
||||
// 加载必要的文件
|
||||
try {
|
||||
require_once __DIR__ . '/source/login/common.php';
|
||||
echo "✅ common.php 加载成功\n";
|
||||
} catch (Exception $e) {
|
||||
echo "❌ 加载common.php失败: " . $e->getMessage() . "\n";
|
||||
}
|
||||
|
||||
// 测试微信API调用相关的CURL操作
|
||||
try {
|
||||
// 包含微信账户类
|
||||
if (file_exists(__DIR__ . '/framework/class/weixin.account.class.php')) {
|
||||
require_once __DIR__ . '/framework/class/weixin.account.class.php';
|
||||
echo "✅ 微信账户类加载成功\n";
|
||||
|
||||
// 测试创建微信账户对象
|
||||
$account = array();
|
||||
$account["key"] = 'test_appid';
|
||||
$account["secret"] = 'test_secret';
|
||||
|
||||
if (class_exists('WeiXinAccount')) {
|
||||
$weixin = new WeiXinAccount($account);
|
||||
echo "✅ 微信账户对象创建成功\n";
|
||||
|
||||
// 测试getOauthInfo方法(这会触发CURL调用)
|
||||
echo "🔄 测试微信OAuth信息获取...\n";
|
||||
|
||||
// 注意:这里会进行真实的网络请求,但由于使用测试参数,应该会返回错误,但不应该出现CURLOPT_SAFE_UPLOAD错误
|
||||
$oauth = $weixin->getOauthInfo($_GET['code']);
|
||||
|
||||
if (is_array($oauth)) {
|
||||
echo "✅ getOauthInfo 调用成功(返回数组)\n";
|
||||
if (isset($oauth['errcode'])) {
|
||||
echo "ℹ️ 返回错误码(预期,因为使用测试参数): " . $oauth['errcode'] . "\n";
|
||||
if (isset($oauth['errmsg'])) {
|
||||
echo "ℹ️ 错误信息: " . $oauth['errmsg'] . "\n";
|
||||
}
|
||||
}
|
||||
} else {
|
||||
echo "⚠️ getOauthInfo 返回非数组结果\n";
|
||||
}
|
||||
|
||||
} else {
|
||||
echo "❌ WeiXinAccount 类不存在\n";
|
||||
}
|
||||
} else {
|
||||
echo "❌ 微信账户类文件不存在\n";
|
||||
}
|
||||
|
||||
} catch (ValueError $e) {
|
||||
echo "❌ 发现PHP8 ValueError(CURLOPT_SAFE_UPLOAD问题): " . $e->getMessage() . "\n";
|
||||
echo "🔧 需要进一步检查CURL相关代码\n";
|
||||
} catch (Exception $e) {
|
||||
echo "⚠️ 其他异常: " . $e->getMessage() . "\n";
|
||||
} catch (Error $e) {
|
||||
echo "❌ PHP错误: " . $e->getMessage() . "\n";
|
||||
}
|
||||
|
||||
echo "\n=== 测试完成 ===\n";
|
||||
echo "如果没有看到 ValueError 关于 CURLOPT_SAFE_UPLOAD,说明修复成功\n";
|
||||
?>
|
||||
Reference in New Issue
Block a user