Tích hợp Minisoftwares vào tool C#, Python, v.v… để mua mail và lấy OTP tự động.
1. Tổng quan
API Email & OTP giúp bạn:
- Mua và quản lý email trực tiếp trên Minisoftwares.
- Gửi yêu cầu lấy OTP cho từng email đã mua.
- Nhận OTP qua 2 cách:
- Flow chuẩn: Tạo request → Poll kết quả.
- Flow mới: ONE-SHOT từ
email + mật khẩutrả về OTP trong 1 call.
2. Xác thực (Authentication)
Header bắt buộc
Mọi request đến API đều phải gửi kèm header X-API-KEY.
Nếu thiếu hoặc sai, API sẽ trả về JSON lỗi và không xử lý yêu cầu.
Response khi API key không hợp lệ
httpClient.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
Truyền trước khi gọi bất kỳ endpoint nào.
3. Kiểm tra kết nối & API key
GET /system/api_ping.phpDùng để test nhanh API key & kiểm tra ví còn bao nhiêu tiền.
Ví dụ gọi
Response thành công
4. Tạo yêu cầu OTP (flow chuẩn dùng mailbox đã thuộc tài khoản)
POST /system/api_otp_request.php
Tạo một yêu cầu OTP mới cho email đã mua (hoặc đã gán cho tài khoản).
Sau khi tạo, bạn sẽ nhận được request_id để dùng khi poll OTP.
Tham số (JSON body)
| Tên | Kiểu | Mô tả |
|---|---|---|
| mailbox_id required | int | ID của mailbox (email) thuộc tài khoản hoặc khách con của bạn. |
| rule_key required | string | Tên dịch vụ: "facebook", "tiktok", "gmail", … (dùng để áp rule lọc OTP). |
| note | string | Ghi chú nội bộ, không bắt buộc. |
Ví dụ request
Response mẫu
5. Poll kết quả OTP (flow chuẩn)
POST /system/api_otp_poll.php
Sau khi tạo yêu cầu, gọi endpoint này để kiểm tra OTP đã về hay chưa.
Server sẽ tự đọc email và trích mã OTP dựa trên cấu hình nội bộ,
client chỉ cần gửi đúng request_id để nhận kết quả.
Tham số (JSON body)
| Tên | Kiểu | Mô tả |
|---|---|---|
| request_id required | int | ID được trả về từ api_otp_request.php. |
| wait_seconds | int | (Tuỳ chọn) Số giây server cho phép chờ mail mới. 0 = không chờ, 30 = chờ tối đa 30 giây trước khi trả về. |
Ví dụ request
Response khi CHƯA có OTP
Response khi ĐÃ có OTP
6. Mã lỗi thường gặp
| error | Mô tả |
|---|---|
invalid_api_key |
API key không hợp lệ hoặc đã bị khoá. |
db_prepare_failed_auth |
Lỗi hệ thống. Nếu gặp nhiều lần, vui lòng liên hệ hỗ trợ. |
request_not_found |
request_id không tồn tại hoặc không thuộc tài khoản của bạn. |
otp_timeout |
Hết thời gian chờ OTP theo cấu hình hệ thống. |
mailbox_not_found |
Không tìm thấy email trong hệ thống. |
mailbox_owned_by_other_customer |
Mailbox/email này thuộc một khách hàng khác, bạn không có quyền lấy OTP. |
invalid_mail_credentials |
Mật khẩu mail gửi lên không khớp với dữ liệu hệ thống (tuỳ cấu hình). |
7. Gợi ý flow trong C#
- Đăng nhập web, nạp tiền vào ví.
- Mua email trong menu Email & OTP → Mua Email.
- Lấy X-API-KEY trong phần tài khoản.
-
Trong tool C#, nếu dùng flow chuẩn:
- Gọi
api_ping.phpđể test API key & số dư. - Gọi
api_otp_request.php→ nhậnrequest_id. - Loop gọi
api_otp_poll.php(mỗi 3–5 giây) cho đến khidone = truehoặc timeout.
- Gọi
-
Nếu muốn đơn giản theo email + mật khẩu, dùng trực tiếp:
api_otp_by_mail.php(mapping → mailbox_id)- hoặc
api_otp_by_mail_oneshot.php(one-shot OTP)
MiniOtpClient) để khách chỉ cần copy vào project và dùng
các hàm: PingAsync(), RequestOtpAsync(), PollOtpAsync(),
GetOtpByMailAsync(), GetOtpByMailOneShotAsync().
8. Khách con (Sub-client) & API key riêng
Khách con (sub-client) dùng cho đại lý muốn tách API key & tài khoản cho từng khách/quản lý riêng, nhưng vẫn quản lý chung trên Minisoftwares.
8.1. Khái niệm
- Mỗi khách con là một tài khoản web riêng (username + password đăng nhập).
- Mỗi khách con có API key riêng (X-API-KEY) để gọi API.
- Trong DB:
- Bảng
user: tạo thêm 1 dòng user mới. - Bảng
customers: tạo 1 customer mới, cóparent_customer_id= customer gốc của đại lý.
- Bảng
8.2. Cách tạo khách con trên web
Sau khi đăng nhập bằng tài khoản đại lý:
- Vào menu Đại lý → Khách con (hoặc đường dẫn
/partner/clients). - Dùng form Tạo khách con mới:
- Nhập
Usernamekhách con. - (Tuỳ chọn) Nhập
Emailkhách con. - (Tuỳ chọn) Ghi chú: khách VIP / khách test / …
- Nhập
- Hệ thống sẽ:
- Tự tạo user + mật khẩu đăng nhập cho khách con.
- Tự sinh 1 API key riêng.
- Gắn khách con vào customer gốc của đại lý.
- Username khách con.
- Mật khẩu đăng nhập (hiển thị 1 lần, cần copy lại ngay).
- API KEY của khách con (X-API-KEY).
8.3. Dùng API với khách con
Khách con sau khi có API KEY của riêng mình có thể gọi tất cả API giống như tài khoản chính:
api_ping.phpapi_otp_request.phpapi_otp_poll.phpapi_otp_by_mail.phpapi_otp_by_mail_oneshot.php
Chỉ cần thay header:
Toàn bộ request/OTP/log sẽ được gắn với customer của khách con, giúp đại lý quản lý rõ khách nào dùng bao nhiêu OTP / mailbox nào thuộc khách nào.
9. API theo Email + Mật khẩu (mapping sang mailbox_id)
Dùng khi bạn chỉ có email + mật khẩu email nhưng vẫn muốn dùng hệ thống OTP,
không cần tự lấy mailbox_id thủ công.
Endpoint này sẽ:
- Nhận
email + password + api_key. - Tìm mailbox tương ứng trong hệ thống.
- Nếu mailbox chưa gán cho ai → gán về khách hàng của API KEY đang dùng.
- Trả về
mailbox_idđể bạn dùng vớiapi_otp_request.php.
Tham số (JSON body)
| Tên | Kiểu | Mô tả |
|---|---|---|
| email required | string | Email đã được hệ thống quản lý (đã mua hoặc đã import). |
| password | string | Mật khẩu mail (nếu hệ thống có lưu để so sánh, tuỳ cấu hình). |
| rule_key | string | Tên dịch vụ (gợi ý) như "tiktok", "facebook", … (tuỳ chọn, dùng để log). |
| api_key | string | Có thể truyền trong body hoặc header X-API-KEY. |
Ví dụ request
Response mẫu
api_otp_request.php + api_otp_poll.php).
10. API ONE-SHOT OTP bằng Email + Mật khẩu
Đây là endpoint tối giản nhất cho client/tool:
Gửi email + password + rule_key → server:
- Gán mailbox về khách hàng của API KEY (nếu chưa gán).
- Tạo một OTP request mới.
- Tự chờ (poll) trong 1 khoảng thời gian.
- Trả về OTP trong 1 lần gọi duy nhất.
Tham số (JSON body)
| Tên | Kiểu | Mô tả |
|---|---|---|
| email required | string | Email cần lấy OTP. |
| password | string | Mật khẩu email (nếu hệ thống có lưu & bật check). |
| rule_key required | string | Tên dịch vụ áp rule OTP: "tiktok", "facebook", "gmail", … |
| timeout_seconds | int | Thời gian tối đa chờ OTP (mặc định ~60s, max 180s). |
| poll_interval | int |
Khoảng thời gian (giây) giữa mỗi lần server kiểm tra lại xem OTP đã về chưa.
Ví dụ 3 = mỗi 3 giây check một lần.
|
| api_key | string | Có thể truyền trong body hoặc header X-API-KEY. |