Skip to content
Translated page. The English version is the source of truth.

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ạiBắt buộcMô tả
user_idsố nguyênID của người dùng SUB cần xóa

Tiêu đề yêu cầu

Tiêu đềBắt buộcMô tả
X-API-KEYKhóa API của bạn (phải là khóa của người dùng cha)
X-Real-IPĐị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ựcphân quyền:

  1. 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)
  2. 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ườngLoạiMô tả
user_idsố nguyênID người dùng SUB đã xóa
google_idchuỗiGoogle ID của người dùng SUB đã xóa
parent_user_idsố nguyênID người dùng cha (lịch sử được chỉ định lại cho người dùng này)
total_reassignedsố nguyênTổng số bản ghi lịch sử được chỉ định lại
total_deletedsố nguyênTổng số bản ghi đã xóa
messagechuỗiThô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:

  1. 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.
  2. 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ỏ.
  3. 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 HTTPMô tả
200Người dùng SUB đã được xóa thành công
400Không tìm thấy người dùng hoặc không phải là người dùng SUB
401Thiếu tiêu đề khóa API
403Khô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ệ
500Lỗ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