最近需要使用挂机宝挂一个需要稳定在线的收钱快报软件,目的是监控支付宝的收款信息,然后回调给支付网站,及时处理业务。但是一切设置妥当以后,发现不回调,不应该是回调了,但是在几分钟以后。我觉得很纳闷,然后各种折腾也没有能解决,无意间发现挂机宝的系统时间与真实时间竟然相差了4分钟,导致收钱快报软件在四分钟以后才收到支付宝的支付信息,才处理回调信息。
好问题找到了,那就去解决,系统时间不对,我最先想到的办法就是同步网络时间,点击挂机宝右下角的时间==》点击日期和时间设置==》更改时区:选择(UTC+08:00)北京、重庆、香港特别行政区、乌鲁木齐==》点击设置界面的internet时间==》更改设置界面选择与internet时间服务器同步==》选择time.windows.com-》确定=》应用。大部分电脑到此一部,时间不正确的问题在这里就算解决了,(我这里使用的系统是挂机宝的系统,Windows Server 2008 R2,不管你的什么系统,设置方法都大同小异。)但是挂机宝的时间还是一样不对,还是差了4分钟。具体原因是什么,我不得知道,但是这个问题也不是不能解决。
既然更新时间服务器同步会差4分钟,那我就取消与internet时间服务器同步,手动修改时间,在原来的基础上增加4分钟,好问题解决。收钱快报的回调正常了,但是新的问题也出现了,每次重启挂机宝以后,时间又会被打回原型,依旧差了4分钟。
既然知道问题所在没解决起来就容易多了,我就写了一个脚本,目的是从自定义服务器获取时间,然后修改挂机宝的系统时间,在设置计划任务,定时执行即可!
自动更新自定义时间bat脚本(建议计划任务里的重复时间为1小时执行一次,新增触发条件系统启动执行):
@echo off setlocal enabledelayedexpansionecho ================= 1. 获取远程JSON原始数据 =================:: 记录开始时间for /f "tokens=1-3 delims=:." %%a in ("%time%") do ( set /a start_hour=%%a, start_min=%%b, start_sec=%%c)echo 开始获取远程时间... powershell -Command "$client = New-Object System.Net.WebClient; $json = $client.DownloadString('http://bbs.wenshay.cn/api/time.php'); Write-Host '原始JSON数据:'; Write-Host $json; $json | Out-File -FilePath 'temp_json.txt' -Encoding utf8"if not exist "temp_json.txt" ( echo 错误:API获取数据失败,请检查网络或API地址! pause exit /b 1):: 记录结束时间for /f "tokens=1-3 delims=:." %%a in ("%time%") do ( set /a end_hour=%%a, end_min=%%b, end_sec=%%c):: 计算网络延迟(秒)set /a network_delay=(end_hour-start_hour)*3600 + (end_min-start_min)*60 + (end_sec-start_sec)if !network_delay! lss 0 set /a network_delay+=86400 :: 处理跨午夜情况echo 网络延迟:!network_delay!秒 echo.echo ================= 2. 解析时间戳并转换(含时区修正和网络延迟补偿) =================:: 提取timestamp字段set "timestamp="for /f "tokens=2 delims=:," %%i in ('type temp_json.txt ^| findstr /i "timestamp"') do ( set "timestamp=%%i"):: 清理空格、引号和逗号set "timestamp=!timestamp: =!"set "timestamp=!timestamp:"=!" set "timestamp=!timestamp:,=!" if "!timestamp!"=="" ( echo 错误:无法解析时间戳! goto :use_datetime_fallback ) echo 解析到的时间戳:!timestamp! :: 转换为北京时间(UTC+8)并补偿网络延迟 set /a beijing_timestamp=!timestamp!+28800+network_delay :: 使用PowerShell将Unix时间戳转换为系统时间格式 set "converted=" for /f "delims=" %%a in ('powershell -Command "[System.DateTime]::Parse('1970-01-01 00:00:00').AddSeconds(!beijing_timestamp!).ToString('yyyy-MM-dd HH:mm:ss')" 2^>nul') do ( set "converted=%%a" ) if "!converted!"=="" ( echo PowerShell转换失败,尝试备用方法... goto :use_datetime_fallback ) :: 拆分日期和时间 set "remoteDate=!converted:~0,10!" set "remoteClock=!converted:~11,8!" :: 使用YYYY-MM-DD日期格式 set "sysDate=!remoteDate!" set "sysTime=!remoteClock!" echo 转换后的日期:!sysDate! echo 转换后的时间:!sysTime! goto :update_time :use_datetime_fallback echo. echo ===== 使用datetime字段作为备用方案 ===== :: 提取datetime字段 set "datetime_str=" for /f "tokens=2 delims=:," %%i in ('type temp_json.txt ^| findstr /i "datetime"') do ( set "datetime_str=%%i" ) :: 清理引号和空格 set "datetime_str=!datetime_str:"=!"set "datetime_str=!datetime_str: =!":: 拆分并转换格式set "sysDate=!datetime_str:~0,10!" :: 直接使用 YYYY-MM-DD 格式set "sysTime=!datetime_str:~11,8!"echo 从datetime解析的日期:!sysDate!echo 从datetime解析的时间:!sysTime!:update_time :: 清理临时文件if exist "temp_json.txt" del temp_json.txt echo.echo ================= 3. 执行系统时间更新 =================:: 更新系统日期echo 正在更新系统日期为:!sysDate!date !sysDate! >nul 2>&1if !errorlevel! neq 0 ( echo 警告:日期更新失败,可能需要管理员权限!) else ( echo 日期更新成功!):: 更新系统时间echo 正在更新系统时间为:!sysTime!time !sysTime! >nul 2>&1if !errorlevel! neq 0 ( echo 警告:时间更新失败,可能需要管理员权限!) else ( echo 时间更新成功!)echo.echo ================= 4. 验证时间设置 =================echo 当前系统时间:echo 日期: %date%echo 时间: %time% echo.echo 时间更新流程完成!窗口将在3秒后自动关闭...ping -n 3 127.0.0.1 >nulexit /b 0
适用于企业官网、社交网站、论坛、博客 等基于Web应用的平台。
1、访问数据加密;2、网站双向认证;3、应用内容分发;4、动态负载均衡
1、资源灵活调整、业务分离、可动态扩展; 2、高可用、故障转移、高并发性。