11 KiB
11 KiB
External Integrations
Analysis Date: 2026-04-21
APIs & External Services
Lottery Data Scraping:
- URL:
https://history.macaumarksix.com/history/macaujc2/y/{year}(e.g.,2026) - Purpose: Fetching Macau Mark Six lottery historical results
- Client:
guzzlehttp/guzzle^7.10 - Integration point:
D:\code\php\amlhc\application\index\controller\Index.phpmethodget_history()(lines 20-58) - Data flow: Scraped JSON response contains
expect(period number),openTime,openCode(comma-separated numbers) -> parsed and upserted intofa_historytable
FastAdmin Official API:
- URL:
https://api.fastadmin.net(application/config.phpfastadmin.api_url) - Purpose: Plugin marketplace, version checks, addon updates
WeChat (EasyWeChat SDK):
- Package:
overtrue/wechat^4.6 - Purpose: WeChat OAuth login, messaging
- Integration point: Addon-level, managed via addon configuration
Data Storage
Databases:
- MySQL - Primary database
- Connection via env vars:
database.hostname,database.database,database.username,database.password,database.hostport(D:\code\php\amlhc\application\database.php) - Charset:
utf8mb4(configurable viadatabase.charset) - Table prefix:
fa_(configurable viadatabase.prefix) - PDO driver required (
ext-pdo) - Single server mode by default (
deploy: 0), supports master-slave replication - Key tables:
fa_admin,fa_auth_group,fa_auth_rule,fa_user,fa_attachment,fa_history,fa_num,fa_command
- Connection via env vars:
Caching:
- File-based cache - Default cache driver (
application/config.phpcache.type => File, path:CACHE_PATH) - Redis - Used for queue system (
D:\code\php\amlhc\application\extra\queue.php)- Host:
127.0.0.1, Port:6379 - Password: empty by default
- Database:
0(select) - Persistent connection: disabled
- Expire:
0(no expiration on tasks)
- Host:
- Token storage - MySQL-backed (
application/config.phptoken.type => Mysql) - Menu cache - Uses ThinkPHP cache with key
"__menu__"(D:\code\php\amlhc\application\admin\library\Auth.phpline 461) - Session supports Redis/memcache drivers but defaults to file-based
File Storage:
- Local filesystem - Default upload storage
- Upload URL:
ajax/upload(D:\code\php\amlhc\application\extra\upload.php) - Upload path pattern:
/uploads/{year}{mon}{day}/{filemd5}{.suffix} - Max upload size: 10MB
- Allowed types:
jpg,png,bmp,jpeg,gif,webp,zip,rar,wav,mp4,mp3,webm - CDN support available via
cdnurlconfig (empty by default) - Chunked upload support available (disabled by default, chunk size: 2MB)
- Upload handled by:
D:\code\php\amlhc\application\api\controller\Common.phpupload()method withapp\common\library\Uploadclass
- Upload URL:
Authentication & Identity
Backend Admin Auth:
- Class:
D:\code\php\amlhc\application\admin\library\Auth.php(extendsfast\Auth) - Password hashing:
md5(md5(password) . salt)(double MD5 with salt) - Session-based: Stores admin data in
Session::get('admin') - Role-based access control (RBAC): Admin -> AuthGroup -> AuthRule hierarchy
- Features:
- Login retry limit: 10 attempts, 1-day cooldown (
fastadmin.login_failure_retry) - IP change detection enabled (
fastadmin.loginip_check: true) - Unique login option available (
fastadmin.login_unique: falseby default) - Safe code validation: MD5-based checksum of username + partial password + token key
- Auto-login via
keeplogincookie with time-limited key
- Login retry limit: 10 attempts, 1-day cooldown (
- Tables:
fa_admin,fa_auth_group,fa_auth_group_access,fa_auth_rule
Frontend User Auth:
- Class:
D:\code\php\amlhc\application\common\library\Auth.php - Token-based: UUID tokens stored in MySQL token table
- Token default lifetime: 2,592,000 seconds (30 days)
- Password hashing: Same double MD5 + salt as admin
- Features:
- Login by username, email, or mobile
- User groups and rules (
fa_user_group,fa_user_rule) - Score and money log tracking (
fa_money_log,fa_score_log) - Hook events:
user_init_successed,user_register_successed,user_login_successed,user_logout_successed,user_changepwd_successed,user_delete_successed
- Tables:
fa_user,fa_user_group,fa_user_rule
API Auth:
- Token passed via
HTTP_TOKENheader,tokenPOST param, or Cookie - Controller base:
D:\code\php\amlhc\application\common\controller\Api.php - HTTP 401 for unauthorized, 403 for forbidden
- CORS handling via
check_cors_request()
Captcha:
- ThinkPHP captcha (
topthink/think-captcha^1.0.9) - Image-based, 4 characters, size 130x40 - Text captcha - For user registration (
fastadmin.user_register_captcha: text) - Login captcha: disabled by default (
fastadmin.login_captcha: false) - Generated via:
D:\code\php\amlhc\application\api\controller\Common.phpcaptcha()method (large format: 350x150)
Queue System
Think-Queue (Redis-backed):
- Package:
topthink/think-queue1.1.6 - Connector: Redis (
D:\code\php\amlhc\application\extra\queue.php) - Default queue:
default - Config:
application/extra/queue.php- Redis host:
127.0.0.1:6379 - No password by default
- Persistent connection: disabled
- Task expire:
0(no expiration)
- Redis host:
- CLI:
php think queue:work/php think queue:listenfor processing
Addon/Plugin System
FastAdmin Addons:
- Package:
fastadminnet/fastadmin-addons~1.4.0 - Location:
addons/directory - Config:
D:\code\php\amlhc\application\extra\addons.php- Autoload:
false(manual loading) - Hooks: empty by default (configured per addon)
- Routes: empty by default (configured per addon)
- Autoload:
- PSR-4 autoload:
addons\->addons/(composer.json) - Addon lifecycle:
install(),uninstall(),enable(),disable()methods - Example addon:
D:\code\php\amlhc\addons\command\Command.php- Installs menu entries via
Menu::create() - Deletes menu on uninstall via
Menu::delete() - Enable/disable toggles menu visibility
- Installs menu entries via
- Pure mode: removes
application/,public/,assets/from addon packages when enabled (fastadmin.addon_pure_mode: true) - Unknown source addons: blocked by default (
fastadmin.unknownsources: false) - Backup global files on addon enable/disable: enabled (
fastadmin.backup_global_files: true) - CLI:
php think addonfor addon management - Admin controller:
D:\code\php\amlhc\application\admin\controller\Addon.php
ThinkPHP Hooks & Behaviors
Hook Integration Points:
upload_config_init- Called when upload config is initialized (Backend.php,Frontend.php,Api.php)config_init- Called after config assembly (Backend.php,Frontend.php)admin_nologin- Fired when admin access is denied due to no login (Backend.phpline 145)admin_nopermission- Fired when admin access is denied due to no permission (Backend.phpline 158)admin_sidebar_begin- Fired before sidebar rendering (Auth.phpline 429)user_init_successed- Fired on successful frontend user init (common/library/Auth.phpline 115)user_register_successed- Fired on user registration (common/library/Auth.phpline 194)user_login_successed- Fired on user login (common/library/Auth.phpline 334)user_logout_successed- Fired on user logout (common/library/Auth.phpline 256)user_changepwd_successed- Fired on password change (common/library/Auth.phpline 283)user_delete_successed- Fired on user deletion (common/library/Auth.phpline 474)
Tags/Behaviors: Configured in application/tags.php with addon_begin behavior hook
Mailer:
- Package:
fastadminnet/fastadmin-mailer^2.0.0 - SMTP Configuration (
D:\code\php\amlhc\application\extra\site.php):- Type:
1(SMTP) - Host:
smtp.qq.com - Port:
465(SSL) - Verification type:
2(SSL/TLS) - Username/password: configured via admin panel (empty by default)
- Mail from address: configured via admin panel
- Type:
- Used for: email verification, password reset, notifications
- Config groups:
basic,email,dictionary,user,example
Monitoring & Observability
Error Tracking:
- None configured
Logs:
- File-based logging (
application/config.phplog.type => File, path:LOG_PATHtypicallyruntime/log/) - Level: empty array (logs all levels by default)
- Auto-record admin logs enabled (
fastadmin.auto_record_log: true)
Debug/Trace:
- App debug mode: configurable via
app.debugenv var (default:false) - App trace: configurable via
app.traceenv var (default:false) - SQL explain: disabled by default
CI/CD & Deployment
Hosting:
- Self-hosted PHP deployment
- Web server entry:
D:\code\php\amlhc\public\index.php - Router compatibility:
D:\code\php\amlhc\public\router.phpfor PHP built-in server - Admin entry: formerly
public/admin.php(deleted per git status) - Install script: formerly
public/install.php(deleted per git status)
CI Pipeline:
- Not detected
Environment Configuration
Required env vars (via think\Env in config files):
[app]
debug = false
trace = false
[database]
hostname = 127.0.0.1
database = fastadmin
username = root
password = (configured)
hostport = (configured)
prefix = fa_
charset = utf8mb4
debug = false
Secrets location:
.envfile (present, not committed)- Database credentials in env vars
- SMTP credentials in admin-configurable site settings (
application/extra/site.php) - WeChat app credentials managed via WeChat addon
- Token key: hardcoded in
application/config.phptoken.key
Webhooks & Callbacks
Incoming:
- Not detected in base configuration
- Addons may register their own webhook endpoints
Outgoing:
- FastAdmin API calls to
https://api.fastadmin.netfor addon marketplace - Lottery data scraping to
https://history.macaumarksix.com(Guzzle HTTP GET) - Email sending via SMTP (qq.com)
Internationalization
Supported Languages:
zh-cn(Simplified Chinese) - Defaulten(English) (application/config.phpallow_lang_list)- Multi-language: disabled by default (
lang_switch_on: false) - Language files in
application/*/lang/zh-cn/ - Language loading per controller in base classes (
loadlang()method) - Recent additions:
D:\code\php\amlhc\application\admin\lang\zh-cn\command.php,D:\code\php\amlhc\application\admin\lang\zh-cn\history.php
CORS
Allowed Origins:
localhost,127.0.0.1(application/config.phpfastadmin.cors_request_domain)- Configurable via
fastadmin.cors_request_domain - API module sets CORS headers in
D:\code\php\amlhc\application\api\controller\Common.php_initialize()(line 26-28): exposes__token__header for cross-origin token retrieval
Upload Integration
Upload Flow:
- Client uploads to
ajax/upload(index module) orapi/common/upload(API module) app\common\library\Uploadclass handles validation and storage- Files stored in
public/uploads/{year}{mon}{day}/{filemd5}{.suffix} - Attachment record created in
fa_attachmenttable viaapp\common\model\Attachment - CDN URL returned if
cdnurlis configured
Integration audit: 2026-04-21