DELETE /apiv2/subuserdel/
Xóa một người dùng SUB và tất cả các bản ghi liên quan. Các bản ghi lịch sử (đơn hàng, ủy quyền) được chỉ định lại cho người dùng cha. Chỉ tài khoản cha hoặc quản trị viên mới có thể xóa người dùng SUB.
URL Endpoint
DELETE https://netts.io/apiv2/subuserdel/{user_id}Tham số đường dẫn
| Tham số | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| user_id | số nguyên | Có | ID của người dùng SUB cần xóa |
Tiêu đề yêu cầu
| Tiêu đề | Bắt buộc | Mô tả |
|---|---|---|
| X-API-KEY | Có | Khóa API của bạn (phải là khóa của người dùng cha) |
| X-Real-IP | Có | Địa chỉ IP từ danh sách trắng của bạn |
Xác thực & Phân quyền
Endpoint này yêu cầu cả xác thực và phân quyền:
- Xác thực: Khóa API hợp lệ + IP từ danh sách trắng (tương tự như các endpoint khác)
- Phân quyền: Chỉ người dùng cha (người đã tạo người dùng SUB) mới có thể xóa người dùng SUB của họ
Nếu người dùng cố gắng xóa một người dùng SUB không thuộc về họ, yêu cầu sẽ bị từ chối với 403 Forbidden.
Yêu cầu mẫu
cURL
bash
curl -X DELETE https://netts.io/apiv2/subuserdel/1234 \
-H "X-API-KEY: your_api_key" \
-H "X-Real-IP: your_whitelisted_ip"Python
python
import requests
user_id = 1234
url = f"https://netts.io/apiv2/subuserdel/{user_id}"
headers = {
"X-API-KEY": "your_api_key",
"X-Real-IP": "your_whitelisted_ip"
}
response = requests.delete(url, headers=headers)
data = response.json()
if response.status_code == 200:
print(f"Deleted user: {data['user_id']} ({data['google_id']})")
print(f"Parent user: {data['parent_user_id']}")
print(f"Records reassigned: {data['total_reassigned']}")
print(f"Records deleted: {data['total_deleted']}")
print(f"Message: {data['message']}")
else:
print(f"Error ({response.status_code}): {data.get('detail', 'Unknown error')}")Node.js
javascript
const axios = require('axios');
async function deleteSubUser(userId, apiKey, whitelistedIp) {
const url = `https://netts.io/apiv2/subuserdel/${userId}`;
const response = await axios.delete(url, {
headers: {
'X-API-KEY': apiKey,
'X-Real-IP': whitelistedIp
},
timeout: 30000
});
const data = response.data;
console.log(`Deleted: ${data.user_id} (${data.google_id})`);
console.log(`Reassigned: ${data.total_reassigned} rows`);
console.log(`Deleted: ${data.total_deleted} records`);
return data;
}
// Usage
deleteSubUser(1234, 'your_api_key', 'your_whitelisted_ip')
.then(result => console.log('Done:', result.message))
.catch(err => console.error('Error:', err.response?.data || err.message));PHP
php
<?php
$userId = 1234;
$url = "https://netts.io/apiv2/subuserdel/{$userId}";
$options = [
'http' => [
'header' => implode("\r\n", [
"X-API-KEY: your_api_key",
"X-Real-IP: your_whitelisted_ip"
]),
'method' => 'DELETE',
'timeout' => 30
]
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$data = json_decode($response, true);
echo "Deleted user: {$data['user_id']} ({$data['google_id']})\n";
echo "Reassigned: {$data['total_reassigned']} rows\n";
echo "Deleted: {$data['total_deleted']} records\n";
echo "Message: {$data['message']}\n";
?>Phản hồi
Phản hồi thành công (200 OK)
json
{
"user_id": 1234,
"google_id": "SUB123456789012345678",
"parent_user_id": 42,
"total_reassigned": 787,
"total_deleted": 8,
"message": "Mock user 1234 (SUB123456789012345678) deleted. History (787 rows) reassigned to parent 42."
}Các trường phản hồi
| Trường | Loại | Mô tả |
|---|---|---|
| user_id | số nguyên | ID người dùng SUB đã xóa |
| google_id | chuỗi | Google ID của người dùng SUB đã xóa |
| parent_user_id | số nguyên | ID người dùng cha (lịch sử được chỉ định lại cho người dùng này) |
| total_reassigned | số nguyên | Tổng số bản ghi lịch sử được chỉ định lại |
| total_deleted | số nguyên | Tổng số bản ghi đã xóa |
| message | chuỗi | Thông báo tóm tắt |
Cơ chế hoạt động của việc xóa
Thao tác xóa được thực hiện nguyên tử trong một giao dịch duy nhất:
- Chỉ định lại lịch sử — toàn bộ lịch sử đơn hàng và ủy quyền của người dùng SUB được chỉ định lại cho người dùng cha. Không có dữ liệu giao dịch nào bị mất.
- Dọn dẹp bản ghi — các bản ghi dành riêng cho người dùng SUB (khóa API, cài đặt, dữ liệu giới thiệu, địa chỉ nạp tiền) sẽ bị xóa bỏ.
- Dấu vết kiểm toán — một bản ghi xóa được lưu lại cho mục đích theo dõi.
Biện pháp bảo vệ an toàn
- Chỉ có thể xóa người dùng SUB — các tài khoản người dùng thực được bảo vệ và không thể bị xóa thông qua endpoint này
- Yêu cầu phân quyền — chỉ người dùng cha mới có thể xóa người dùng SUB của chính họ
- An toàn giao dịch — tất cả các thao tác đều chạy trong một giao dịch cơ sở dữ liệu duy nhất (thành công toàn bộ hoặc không có gì)
- Bảo toàn lịch sử — lịch sử đơn hàng và ủy quyền được chỉ định lại cho người dùng cha, không bị mất
Phản hồi lỗi
Yêu cầu không hợp lệ (400)
json
{
"detail": "User with id=9999 not found"
}json
{
"detail": "User 42 is NOT a mock user (google_id=1234567890). Only users with google_id starting with 'SUB' can be deleted."
}Bị cấm (403)
json
{
"detail": "Not authorized: you can only delete your own SUB-users."
}Lỗi xác thực (401)
json
{
"detail": "X-API-KEY header required"
}Lỗi máy chủ nội bộ (500)
json
{
"detail": "Failed to delete mock user: ..."
}Tham chiếu mã lỗi
| Trạng thái HTTP | Mô tả |
|---|---|
200 | Người dùng SUB đã được xóa thành công |
400 | Không tìm thấy người dùng hoặc không phải là người dùng SUB |
401 | Thiếu tiêu đề khóa API |
403 | Không được phân quyền (không phải người dùng cha) / Khóa API hoặc IP không hợp lệ |
500 | Lỗi máy chủ nội bộ |
Lưu ý
- Thao tác xóa là không thể hoàn tác — hãy đảm bảo bạn muốn xóa người dùng SUB trước khi gọi endpoint này
- Toàn bộ lịch sử của người dùng SUB (đơn hàng, ủy quyền) được chỉ định lại cho người dùng cha — không có dữ liệu nào bị mất
- Bản ghi xóa được lưu trữ vĩnh viễn trong bảng kiểm toán của cơ sở dữ liệu
- Các bản ghi thu nhập từ giới thiệu không bị ảnh hưởng bởi thao tác xóa
- Nếu người dùng SUB có số dư khác 0, số dư đó không được tự động chuyển đổi — hãy rút tiền trước khi xóa
- Người dùng SUB có thể được tạo lại thông qua endpoint POST /apiv2/subusergen
Các endpoint liên quan
- POST /apiv2/subusergen — Tạo một người dùng SUB mới
- POST /apiv2/address/rotate — Thay đổi địa chỉ nạp tiền
- GET /apiv2/userinfo — Lấy thông tin người dùng/người dùng SUB