> ## Documentation Index
> Fetch the complete documentation index at: https://ifdocdemo.lumivescence.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Kiểm thử thanh toán

> Xác nhận challenge 402, rồi thanh toán cho endpoint sandbox của chính bạn bằng CLI hoặc bằng một ví dụ người mua.

Thanh toán cho endpoint của chính bạn trong sandbox và kiểm tra toàn bộ luồng thanh toán. Các ví dụ dùng `http://localhost:3000/api/widgets` làm endpoint được bảo vệ.

## Bước 1: Xác nhận challenge

Khởi động server của bạn. Gọi endpoint có thu phí mà không kèm khoản thanh toán.

```bash x402 theme={null}
curl -i http://localhost:3000/api/widgets
# HTTP/1.1 402 Payment Required
# PAYMENT-REQUIRED: <base64 JSON>
```

```bash MPP theme={null}
curl -i http://localhost:3000/api/widgets
# HTTP/1.1 402 Payment Required
# WWW-Authenticate: Payment id="…", realm="…", method="inflow", intent="charge", request="…"
```

Endpoint không có giá phải trả về `200`.

```bash theme={null}
curl -i http://localhost:3000/free
```

| Kết quả | Ý nghĩa |
| - | - |
| `402` với header đúng | Middleware hoạt động. |
| `200` trên endpoint có thu phí | Middleware không chạy cho endpoint này. |
| Lỗi lúc server khởi động | Kiểm tra key, môi trường và loại tài khoản. Xem [Lỗi](https://ifdocdemo.lumivescence.com/vi/reference/errors.md). |

## Bước 2: Đọc challenge bằng CLI

CLI đọc challenge. CLI không thanh toán.

```bash x402 theme={null}
inflow x402 inspect http://localhost:3000/api/widgets
```

```bash MPP theme={null}
inflow mpp inspect http://localhost:3000/api/widgets
```

Xác nhận giá, loại tiền và các tùy chọn thanh toán. Để đọc một header thô, dùng `inflow x402 decode` hoặc `inflow mpp decode`.

## Bước 3: Thanh toán bằng CLI

CLI mặc định dùng `production`. Vì server của bạn chạy trong sandbox, thêm `--sandbox` vào mỗi lệnh.

**1. Cài đặt CLI và mở khóa vault**

Xem [Cài đặt CLI](https://ifdocdemo.lumivescence.com/vi/agents/install-the-cli.md). Tự chạy `inflow vault unlock` trong terminal của chính bạn.

**2. Cung cấp cho CLI một API key sandbox**

Dùng một key từ một tài khoản người mua sandbox riêng, ví dụ một tài khoản Developer. Không dùng key của tài khoản Seller nhận khoản thanh toán. Dán key sau lệnh đầu tiên. Sau đó nhấn Enter.

```bash theme={null}
read -s INFLOW_API_KEY
export INFLOW_API_KEY
```

> [!WARNING]
>
> Dùng API key, không dùng `inflow auth login`, để thanh toán cho một endpoint trên `localhost`. Với đăng nhập bằng thiết bị, InFlow ký mỗi request bằng Visa Trusted Agent Protocol (TAP). InFlow không ký các request đến URL `http://`, chẳng hạn `http://localhost`. Khi đó lệnh thất bại với `TAP signing failed`.

**3. Kiểm tra số dư sandbox**

```bash theme={null}
inflow balances list --sandbox
```

**4. Thanh toán cho endpoint**

```bash x402 theme={null}
inflow x402 pay http://localhost:3000/api/widgets --sandbox --interval 5
```

```bash MPP theme={null}
inflow mpp pay http://localhost:3000/api/widgets --sandbox --interval 5
```

Nếu CLI yêu cầu phê duyệt, phê duyệt khoản thanh toán. Kết quả chứa body của response từ endpoint của bạn.

Khi xong, chạy `unset INFLOW_API_KEY`. Sau đó CLI dùng lại đăng nhập đã lưu của bạn.

## Bước 4: Thanh toán bằng một ví dụ người mua

Chạy một ví dụ người mua từ repository [inflow-node](https://github.com/inflowpayai/inflow-node). Ví dụ người mua MPP chỉ hoạt động với sandbox. Ví dụ này chấp nhận key từ một tài khoản Developer sandbox hoặc một tài khoản Seller sandbox.

> [tab] MPP
>
> Khởi động `mpp-seller-express`, `mpp-seller-hono` hoặc server MPP của chính bạn. Sau đó chạy ví dụ người mua trong terminal thứ hai.
>
> ```bash theme={null}
> # at the root of the inflow-node repository
> pnpm install
> pnpm build
> cd examples/mpp-buyer-fetch
> cp .env.example .env
> # fill in INFLOW_API_KEY from https://sandbox.inflowpay.ai
> pnpm start
> ```
>
> Đích mặc định là `http://localhost:3000/api/widgets`. Để đổi đích, đặt `TARGET_URL` trong `.env`.
>
> Một khoản thanh toán thành công in ra đầu ra này.
>
> ```text theme={null}
> GET http://localhost:3000/api/widgets
>   status: 200
>   body: {"widgets":[1,2,3]}
>   paid via inflow: 86f75793-abeb-4fe6-9a46-61901be77070
> ```
>
> `mpp-buyer-fetch` thay `fetch` toàn cục bằng một wrapper hỗ trợ thanh toán. Với cách làm tường minh, đọc `mpp-buyer-manual`.

> [tab] x402
>
> Khởi động server x402 của bạn. Sau đó chạy ví dụ người mua từ thư mục `examples`.
>
> ```bash theme={null}
> # at the root of the inflow-node repository, after pnpm install and pnpm build
> cd examples/x402-buyer-fetch
> INFLOW_API_KEY=$INFLOW_API_KEY TARGET_URL=http://localhost:3000/api/widgets pnpm start
> ```
>
> Các ví dụ người mua x402 khác là `x402-buyer-axios`, `x402-buyer-x402-evm` và `x402-buyer-x402-svm`.

## Bước 5: Kiểm tra kết quả

* Lệnh thanh toán trả về trạng thái `200` và body thật từ endpoint của bạn.
* Khoản thanh toán xuất hiện trong dashboard sandbox.
* Số tiền khớp với giá của bạn.

## Khắc phục sự cố

> [accordion] CLI báo lỗi xác thực trong sandbox
>
> Mỗi token gắn với môi trường cấp token đó. Đăng nhập lại với `--sandbox`.

> [accordion] Lệnh thanh toán không tìm thấy tùy chọn nào có thể thanh toán
>
> Chạy `inflow mpp supported --sandbox` hoặc `inflow x402 supported --sandbox`. So sánh kết quả với đầu ra `inspect` ở bước 2.

> [accordion] TAP signing failed. The Service request was not sent.
>
> InFlow không ký các request đến URL `http://`, chẳng hạn `http://localhost`. InFlow trả về `TAP_INVALID_REQUEST`. Cung cấp cho CLI một API key sandbox, như ở bước 3. Với API key, CLI không ký bằng TAP.
>
> Để kiểm thử với đăng nhập bằng thiết bị, cung cấp endpoint qua HTTPS. Ví dụ, chạy `cloudflared tunnel --url http://localhost:3000`. Sau đó thanh toán cho URL `https://` mà lệnh này in ra, kèm đường dẫn endpoint.

> [accordion] Mọi request đều trả về 402, kể cả sau khi thanh toán
>
> Người mua và server dùng các giao thức khác nhau. Người mua MPP không thể thanh toán cho endpoint x402. Chạy `inflow inspect` trên endpoint trước.

Với các lỗi server như `403 SELLER_ACCOUNT_REQUIRED`, xem [Lỗi](https://ifdocdemo.lumivescence.com/vi/reference/errors.md).

## Bước tiếp theo

> [card] [Ghi danh agent](https://ifdocdemo.lumivescence.com/vi/sellers/enable-enrollment.md)
>
> Cho phép agent ghi danh với dịch vụ của bạn với tư cách khách hàng được nhận biết.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.