API

Tài liệu mô tả các endpoint REST của theme MMO: kiểm tra phiên bản, ví, dịch vụ buff (smmo365), đặt đơn, và kênh reseller dành cho website đối tác.

Gốc URL & namespace

Toàn bộ route nằm dưới WordPress REST: https://smmo360.com/wp-json/

Namespace MMO: mmo/v1 — base đầy đủ:

https://smmo360.com/wp-json/mmo/v1/

Đơn vị tiền mặc định trong phản hồi: VND.

Định dạng phản hồi

Thành công: HTTP 200, thân JSON có dạng:

{
  "success": true,
  "data": { ... }
}

Lỗi: HTTP 4xx/5xx, WordPress REST trả object lỗi (code, message, data.status).

Xác thực

  • Endpoint công khaiGET /status, GET /services: không cần đăng nhập.
  • Endpoint theo tài khoản WordPress — cần user đã đăng nhập. Từ trình duyệt: cookie phiên + header X-WP-Nonce (nonce REST, thường lấy từ wp-api-fetch / wp_localize_script).
  • Reseller (đối tác) — header X-MMO-Reseller-Key: <api_key> hoặc Authorization: Bearer <api_key>. Key do chính user tạo trên trang tài liệu API (đã đăng nhập) hoặc trong [mmo_panel], hoặc admin tạo tại MMO Manager → Người dùng. Mỗi user tối đa một key hợp lệ; tạo key mới sẽ vô hiệu key cũ.
Lưu ý: Gọi từ domain khác (CORS) có thể cần cấu hình thêm trên server; gọi server-to-server (PHP, cron, backend) thường đơn giản nhất.

Lấy API key Reseller (tự động & thủ công)

Đăng nhập để tạo hoặc quản lý API key reseller ngay trên trang này. Đăng nhập
  • Trên trang API này: Sau khi đăng nhập, dùng khối phía trên để tạo / tạo lại / thu hồi key (nếu ChillVN bật).
  • Tự động lần đầu: Nếu chưa có key, lần đầu bạn mở trang này hoặc trang có [mmo_panel], hệ thống có thể tự sinh key một lần. Cấu hình: config/app.phpchillvn.reseller_auto_key_on_first_visit.
  • Trong tài khoản (panel): Shortcode [mmo_panel] — khối API Reseller với cùng chức năng.
  • Admin: MMO Manager → Người dùng & Seller → Chi tiết user → phần ChillVN API / chiết khấu.
Ẩn khối API trên panel: [mmo_panel reseller_api="no"]

Bảng endpoint

Phương thức Đường dẫn (sau base) Mô tả Quyền
GET status Thông tin theme, namespace, phiên bản, currency. Công khai
GET services Danh sách dịch vụ đang bán; giá đã quy đổi ChillVN + markup. User đăng nhập: thêm chiết khấu % (nếu admin cấu hình). Công khai
GET balance Số dư ví. Đăng nhập
GET ledger Sổ cái ví. Query: page, per_page. Đăng nhập
GET wallet/topups Danh sách yêu cầu nạp tiền. Query: page, per_page. Đăng nhập
GET wallet/topups/{id} Chi tiết một yêu cầu nạp. Đăng nhập
POST wallet/topup-intent Tạo ý định nạp (VietQR / Casso — theo cấu hình). Đăng nhập
GET woo-orders Đơn WooCommerce của khách. Query: page, per_page. Đăng nhập
GET partner/stats Thống kê partner seller (theo tháng). Role partner_seller
GET orders Đơn dịch vụ buff. Query: page, per_page. Đăng nhập
POST orders Đặt đơn (trừ ví). Xem chi tiết thân request bên dưới. Đăng nhập
POST orders/{id}/refill Yêu cầu refill đơn (nếu hỗ trợ). Đăng nhập
POST vendor/apply Đăng ký / gửi hồ sơ vendor (theo logic theme). Đăng nhập
GET reseller/status Số dư, currency, discount_percent, user_id của chủ API key. API key
GET reseller/services Giống services nhưng giá đã áp chiết khấu user chủ key. API key
GET reseller/orders Đơn của user chủ key. Query: page, per_page. API key
POST reseller/orders Đặt đơn trừ ví user chủ key; không hỗ trợ lịch / đặt lặp. API key

Phân trang mặc định per_page ≈ 20, tối đa 100 (nếu endpoint hỗ trợ).

POST /orders — đặt dịch vụ

Trừ ví user hiện tại (hoặc user reseller khi gọi /reseller/orders).

Một đơn (JSON hoặc form)

  • service_id (int, bắt buộc) — ID dòng trong GET /services
  • quantity (int, mặc định 1)
  • link — Một URL (nhiều loại dịch vụ smmo365 bắt buộc).
  • links — Mảng URL hoặc chuỗi JSON mảng.
  • comments, list, suggest, search — Tùy loại dịch vụ (Custom Comments, Special, …).
  • Lịch / lặp (chỉ POST /orders đăng nhập, không dùng cho reseller): schedule_enabled, scheduled_at, repeat_enabled, repeat_count, repeat_interval_minutes

Nhiều đơn trong một request

Gửi mảng `orders`: mỗi phần tử là object có service_id, quantity và các field extra như trên. Không kết hợp với lịch/lặp. Tối đa khoảng 50 đơn mỗi lần (theo cấu hình).

{
  "orders": [
    { "service_id": 123, "quantity": 100, "link": "https://..." },
    { "service_id": 124, "quantity": 1, "link": "https://..." }
  ]
}

Reseller — tích hợp website khác

  1. User tự tạo key trên trang API (đã đăng nhập) hoặc [mmo_panel]; admin cũng có thể tạo thay. Ví của chủ key bị trừ khi đặt qua API.
  2. Lấy danh sách & giá: GET .../reseller/services
  3. Kiểm tra số dư: GET .../reseller/status
  4. Đặt hàng: POST .../reseller/orders với cùng định dạng như POST .../orders
Chiết khấu: Admin có thể set % chiết khấu smmo365 trên user — giá trong reseller/services và số tiền trừ ví khi mua đều đã phản ánh chiết khấu đó.

Ví dụ cURL (reseller)

curl -sS -H "X-MMO-Reseller-Key: YOUR_KEY_HERE" \
  "https://smmo360.com/wp-json/mmo/v1/reseller/status"
curl -sS -X POST \
  -H "Content-Type: application/json" \
  -H "X-MMO-Reseller-Key: YOUR_KEY_HERE" \
  -d '{"service_id":1,"quantity":10,"link":"https://example.com/target"}' \
  "https://smmo360.com/wp-json/mmo/v1/reseller/orders"

Trường thường gặp trong /services

Mỗi phần tử trong data.services có thể gồm (tùy DB): id, slug, name, price (VNĐ/đơn vị sau xử lý), price_display, is_active, provider_meta (JSON: min, max, type, …).

Mã lỗi thường gặp

401Chưa đăng nhập hoặc thiếu / sai API key reseller.
402insufficient_funds — số dư ví không đủ.
403Không đủ quyền (role, nonce, key không hợp lệ).
404Không tìm thấy tài nguyên (dịch vụ, topup, …).
400Tham số sai: thiếu link, quantity min/max, batch + lịch, v.v.

Cập nhật theo phiên bản theme MMO; endpoint có thể mở rộng qua hook mmo_rest_register_routes.