VISORA AI V5.4 — Unicode Repair + SEO + Auto Renewal V5.4 giữ nguyên luồng SePay Bank Webhook/VietQR của V5.3 và bổ sung lớp sửa Unicode, SEO đa ngôn ngữ và hành vi gia hạn gói.
Unicode / UTF-8 PHP response và default charset: UTF-8. mb_internal_encoding('UTF-8') và mb_http_output('UTF-8') khi extension mbstring có sẵn.
MySQL/MariaDB tiếp tục ép kết nối/session sang utf8mb4. e() dùng ENT_QUOTES | ENT_SUBSTITUTE để dữ liệu legacy không làm mất cả chuỗi.
JSON text-bearing payloads dùng JSON_INVALID_UTF8_SUBSTITUTE.
Migration 009_unicode_content_repair.php: - chạy lại schema/charset repair; - sửa mojibake Latin-1/Windows-1252 có thể phục hồi; - khôi phục các mô tả gói VISORA từng bị thay ký tự thành ?.
Ký tự đã bị thay thật sự thành dấu ? không thể suy ngược nội dung gốc một cách tổng quát.
V5.4 tự khôi phục các chuỗi mặc định VISORA đã biết và sửa các lỗi mojibake còn phục hồi được.
SEO / Schema / URL Trang Việt: / và /huong-dan.
Trang Anh: /en và /en/guide. /guide trả 301 sang /huong-dan để giữ backlink cũ.
Canonical + hreflang + x-default đồng bộ với sitemap.
Thêm/giữ Organization, WebSite, SoftwareApplication, FAQPage, HowTo và BreadcrumbList schema phù hợp từng trang.
Trang đăng nhập/đăng ký/tài khoản/billing/admin được noindex.
Open Graph/Twitter image + locale metadata được bổ sung.
Table of Contents TOC thu gọn mặc định.
Sticky ngay dưới header bằng chiều cao header đo động, không hard-code 68px.
Click mục sẽ cuộn đúng offset và tự thu gọn TOC.
Mobile chuyển danh sách TOC thành lưới gọn, không đè header.
Billing / gia hạn Gói đang dùng ẩn nút mua/thanh toán khi còn hạn trên 3 ngày.
Từ 3 ngày trước khi hết hạn (hoặc đã hết hạn), nút Gia hạn bằng ngân hàng (VietQR/SePay) tự xuất hiện.
Nếu Stripe Auto Renew đang bật, hệ thống hiển thị trạng thái tự gia hạn và tránh nút gia hạn trùng trên gói hiện tại.
SePay webhook hợp lệ vẫn tự xác nhận giao dịch, nâng/gia hạn gói và cộng thời hạn từ ngày hết hạn hiện tại khi gia hạn cùng gói.
Sau khi upload 1.
Giữ nguyên .env production hiện tại. 2.
Upload/ghi đè source V5.4. 3.
Mở website một lần; Migrator tự chạy migration 009. 4.
Kiểm tra /sitemap.xml, /huong-dan, /en/guide và trang Billing. 5.
Không đổi URL webhook SePay đang dùng: /api/sepay-webhook.html.