USD Coin (USDC) đã nổi lên như một nền tảng vững chắc của sự ổn định và đáng tin cậy. Là một stablecoin được dự trữ đầy đủ và hỗ trợ bởi đồng đô la, USDC thu hẹp khoảng cách giữa tiền pháp định truyền thống và thế giới tài sản kỹ thuật số đang phát triển. Nó cung cấp tốc độ và phạm vi toàn cầu của tiền điện tử trong khi vẫn duy trì sự ổn định giá của đồng đô la Mỹ, biến nó thành một phương tiện lý tưởng cho thương mại, giao dịch và kiều hối trên internet.
Trọng tâm của hệ sinh thái USDC là Circle, nhà phát triển chính của stablecoin này. Circle cung cấp một bộ API cho phép các nhà phát triển và doanh nghiệp tích hợp USDC vào ứng dụng của họ một cách liền mạch. Cụ thể, Circle Mint API cung cấp một cổng mạnh mẽ để đúc USDC mới, đổi nó lấy tiền pháp định và chuyển nó qua nhiều blockchain được hỗ trợ. Đây không phải là "giao dịch" theo nghĩa đầu cơ vào biến động giá trên một sàn giao dịch thị trường mở, mà là một điều cơ bản hơn: khả năng di chuyển giá trị theo chương trình, chuyển đổi từ các kênh tài chính truyền thống vào thế giới kỹ thuật số và chuyển đổi ngược lại.
Bài viết này là hướng dẫn toàn diện của bạn để nắm vững Circle API cho các giao dịch USDC. Chúng ta sẽ bắt đầu một hành trình chi tiết, từ việc thiết lập tài khoản nhà phát triển ban đầu cho đến việc thực hiện các khoản chuyển và thanh toán phức tạp. Chúng ta sẽ đề cập đến:
- Bắt đầu: Thiết lập tài khoản của bạn và hiểu sự khác biệt quan trọng giữa môi trường thử nghiệm (sandbox) và môi trường sản xuất (production).
- Xác thực: Kết nối an toàn với Circle API bằng thông tin đăng nhập của bạn.
- Các khái niệm cốt lõi: Tìm hiểu sâu về các mô hình dữ liệu và tài nguyên thiết yếu tạo nên các khối xây dựng của API, chẳng hạn như Thanh toán (Payments), Thanh toán ra (Payouts) và Chuyển khoản (Transfers).
- Thực hiện giao dịch: Hướng dẫn từng bước để nạp tiền pháp định, quản lý ví USDC của bạn, chuyển USDC qua các blockchain và rút tiền về lại tiền pháp định.
- Các tính năng nâng cao & Thực tiễn tốt nhất: Tận dụng các tính năng mạnh mẽ như yêu cầu bất biến (idempotent requests) để ngăn ngừa lỗi, sử dụng webhook cho thông báo thời gian thực, xử lý tập dữ liệu lớn với phân trang và triển khai xử lý lỗi mạnh mẽ.
Khi kết thúc hướng dẫn này, bạn sẽ có kiến thức và các ví dụ thực tế cần thiết để xây dựng các ứng dụng tinh vi tận dụng sức mạnh của một đồng đô la kỹ thuật số ổn định, toàn cầu và có thể lập trình.
Bạn muốn một nền tảng tích hợp, tất cả trong một để Đội ngũ Nhà phát triển của bạn làm việc cùng nhau với năng suất tối đa?
Apidog đáp ứng mọi yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều!
Bắt đầu với Circle
Trước khi bạn có thể viết một dòng mã nào, bạn cần thiết lập môi trường phát triển và lấy thông tin đăng nhập của mình. Bước cơ bản này rất quan trọng để có một quy trình tích hợp suôn sẻ.
Môi trường Sandbox so với Môi trường Production
Circle cung cấp hai môi trường riêng biệt cho các API của mình: Sandbox và Production. Hiểu rõ vai trò của chúng là bước đầu tiên để tích hợp thành công và an toàn.
- Môi trường Sandbox: Đây là sân chơi phát triển cá nhân của bạn. Sandbox được thiết kế để kiểm thử, tạo mẫu và tích hợp mà không có bất kỳ hậu quả tài chính thực tế nào. Nó mô phỏng chức năng của API sản xuất, cho phép bạn xây dựng và tinh chỉnh ứng dụng của mình với sự tự tin hoàn toàn. Các giao dịch trong sandbox sử dụng mạng thử nghiệm và không liên quan đến tiền thật hoặc USDC. Tất cả dữ liệu trong sandbox đều tách biệt với môi trường production.
- Môi trường Production: Đây là môi trường trực tiếp nơi các giao dịch tài chính thực tế diễn ra. Khi mã của bạn đã được kiểm thử kỹ lưỡng và hoàn thiện trong sandbox, bạn có thể chuyển sang production bằng cách đơn giản là thay đổi máy chủ API và sử dụng khóa API trực tiếp của bạn.
Các máy chủ API cho mỗi môi trường như sau:
Môi trường | URL Máy chủ API |
---|---|
Sandbox | https://api-sandbox.circle.com |
Production | https://api.circle.com |
Trong suốt hướng dẫn này, tất cả các ví dụ sẽ sử dụng URL sandbox. Đây là một thực tiễn tốt nhất quan trọng: luôn phát triển và kiểm thử trong môi trường sandbox trước tiên.
Tạo Tài khoản Sandbox của Bạn
Hành trình của bạn bắt đầu bằng việc tạo một tài khoản nhà phát triển Circle, tài khoản này sẽ cấp cho bạn quyền truy cập vào môi trường sandbox.
- Truy cập Trang web của Circle: Đi tới trang nhà phát triển chính thức của Circle.
- Đăng ký: Tìm tùy chọn để đăng ký tài khoản nhà phát triển hoặc sandbox. Bạn sẽ cần cung cấp một số thông tin cơ bản, chẳng hạn như địa chỉ email và mật khẩu an toàn.
- Xác minh Email của bạn: Sau khi gửi biểu mẫu đăng ký, bạn sẽ nhận được một email xác minh. Nhấp vào liên kết trong email này để kích hoạt tài khoản của bạn.
- Truy cập Bảng điều khiển: Khi tài khoản của bạn đã được xác minh, bạn có thể đăng nhập vào bảng điều khiển nhà phát triển. Bảng điều khiển này là trung tâm của bạn để quản lý ứng dụng, khóa API và xem hoạt động sandbox của bạn.
Tạo Khóa API Đầu tiên của Bạn
Khóa API là một mã thông báo bí mật duy nhất xác thực các yêu cầu của ứng dụng của bạn tới Circle API. Nó chứng minh rằng một yêu cầu đến từ bạn chứ không phải từ một bên thứ ba không được ủy quyền.
Dưới đây là cách tạo khóa API từ bảng điều khiển sandbox mới của bạn:
- Đăng nhập vào tài khoản sandbox nhà phát triển Circle của bạn.
- Điều hướng đến Phần Khóa API: Trong bảng điều khiển, tìm một phần có nhãn "API Keys" hoặc "Developer Settings".
- Tạo Khóa Mới: Sẽ có tùy chọn "Create a New API Key". Nhấp vào đó.
- Đặt tên cho Khóa của bạn: Đặt cho khóa của bạn một tên mô tả (ví dụ: "Ứng dụng Giao dịch của tôi - Thử nghiệm"). Điều này giúp bạn xác định mục đích của khóa sau này, đặc biệt nếu bạn có nhiều khóa cho các ứng dụng khác nhau.
- Sao chép và Bảo mật Khóa của bạn: Sau khi tạo, khóa API của bạn sẽ được hiển thị trên màn hình. Đây là lần duy nhất khóa đầy đủ sẽ được hiển thị. Bạn phải sao chép nó ngay lập tức và lưu trữ nó ở một vị trí an toàn, chẳng hạn như trình quản lý mật khẩu hoặc tệp biến môi trường cho dự án của bạn. Không mã hóa cứng khóa API của bạn trực tiếp trong mã nguồn.
Khóa API của bạn là một phần thông tin nhạy cảm. Bất kỳ ai có nó đều có thể thực hiện các yêu cầu thay mặt cho tài khoản của bạn. Hãy xử lý nó với mức độ bảo mật tương tự như bạn xử lý mật khẩu.
Xác thực và Thiết lập Ban đầu
Với khóa API trong tay, giờ đây bạn đã sẵn sàng thực hiện các lệnh gọi đầu tiên tới Circle API. Bước đầu tiên là nắm vững quy trình xác thực và kiểm tra kết nối của bạn để đảm bảo mọi thứ được cấu hình đúng cách.
Xác thực API: Mã thông báo Bearer
Circle API sử dụng lược đồ xác thực Mã thông báo Bearer. Đây là một phương pháp xác thực HTTP tiêu chuẩn, trong đó mọi yêu cầu API phải bao gồm một tiêu đề Authorization
chứa khóa API của bạn.
Định dạng tiêu đề là: Authorization: Bearer YOUR_API_KEY
Bạn phải thay thế YOUR_API_KEY
bằng khóa bí mật thực tế mà bạn đã tạo trong chương trước.
Kiểm tra Kết nối của Bạn
Trước khi đi sâu vào các giao dịch phức tạp, điều cần thiết là thực hiện hai bài kiểm tra đơn giản: một để kiểm tra kết nối mạng cơ bản đến các máy chủ Circle API và một để xác minh rằng khóa API của bạn đã được cấu hình đúng cách.
Kiểm tra Kết nối Thô với /ping
Điểm cuối /ping
là một kiểm tra sức khỏe đơn giản. Nó không yêu cầu xác thực và được sử dụng để xác nhận rằng bạn có thể tiếp cận các máy chủ Circle API.
Dưới đây là cách gọi nó bằng cURL, một công cụ dòng lệnh phổ biến để thực hiện các yêu cầu HTTP:
curl -H 'Accept: application/json' \
-X GET --url https://api-sandbox.circle.com/ping
Phản hồi Thành công:
Nếu kết nối của bạn thành công, API sẽ trả về một đối tượng JSON đơn giản:
{
"message": "pong"
}
Nếu bạn nhận được phản hồi này, bạn đã thiết lập thành công kết nối với môi trường sandbox. Nếu không, hãy kiểm tra kết nối mạng, tường lửa của bạn hoặc bất kỳ lỗi chính tả nào trong URL.
Kiểm tra Khóa API của Bạn với /v1/configuration
Bây giờ, hãy kiểm tra xem khóa API của bạn có hợp lệ và được định dạng đúng cách hay không. Điểm cuối /v1/configuration
truy xuất thông tin cấu hình cơ bản cho tài khoản của bạn và yêu cầu xác thực.
Đây là lệnh cURL. Hãy nhớ thay thế ${YOUR_API_KEY}
bằng khóa API thực tế của bạn. Để bảo mật, tốt nhất nên sử dụng biến môi trường.
# It's best practice to store your API key in an environment variable
# export YOUR_API_KEY='YOUR_KEY_HERE'
curl -H 'Accept: application/json' \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-X GET --url https://api-sandbox.circle.com/v1/configuration
Phản hồi Thành công:
Một yêu cầu thành công sẽ trả về một đối tượng JSON chứa ID ví chính của bạn. masterWalletId
là định danh duy nhất cho ví chính được liên kết với tài khoản của bạn nơi tiền của bạn được giữ.
{
"data": {
"payments": {
"masterWalletId": "1234567890"
}
}
}
Phản hồi Lỗi:
Nếu có vấn đề với khóa API của bạn hoặc cách bạn đã định dạng tiêu đề Authorization
, bạn sẽ nhận được lỗi 401 Unauthorized
.
{
"code": 401,
"message": "Malformed authorization. Are the credentials properly encoded?"
}
Nếu bạn thấy lỗi này, hãy kiểm tra kỹ những điều sau:
- Bạn có bao gồm từ
Bearer
theo sau là một khoảng trắng trước khóa không? - Bạn có sao chép toàn bộ khóa API một cách chính xác, không có ký tự hoặc khoảng trắng thừa không?
- Bạn có chắc chắn đang sử dụng khóa API hợp lệ, đang hoạt động từ bảng điều khiển của mình không?
Sử dụng SDK của Circle để Tích hợp Đơn giản hơn
Mặc dù bạn luôn có thể tương tác trực tiếp với API bằng các yêu cầu HTTP, Circle cung cấp Bộ công cụ phát triển phần mềm (SDK) cho các ngôn ngữ lập trình phổ biến như Node.js, Python và Java. Các SDK này xử lý mã boilerplate cho xác thực, định dạng yêu cầu và phân tích phản hồi, giúp quá trình phát triển của bạn nhanh hơn và ít lỗi hơn.
Dưới đây là một ví dụ ngắn gọn về cách bạn có thể khởi tạo Circle Node.js SDK:
// Install the SDK first: npm install @circle-fin/circle-sdk
import { Circle, CircleEnvironments } from "@circle-fin/circle-sdk";
const circle = new Circle(
process.env.CIRCLE_API_KEY, // API key from environment variable
CircleEnvironments.sandbox // Pointing to the sandbox environment
);
async function getConfiguration() {
try {
const response = await circle.core.getConfiguration();
console.log(response.data.payments.masterWalletId);
} catch (error) {
console.error(error.response.data);
}
}
getConfiguration();
Sử dụng SDK giúp trừu tượng hóa các chi tiết cấp thấp, cho phép bạn tập trung vào logic nghiệp vụ của ứng dụng. Chúng tôi khuyên bạn nên sử dụng SDK cho bất kỳ dự án nghiêm túc nào.
Các Khái niệm Cốt lõi và Tài nguyên API
Để sử dụng Circle API một cách hiệu quả, bạn phải hiểu mô hình dữ liệu cơ bản của nó. API được xây dựng xung quanh một tập hợp các tài nguyên—các đối tượng JSON đại diện cho các thực thể cốt lõi trong hệ thống, như thanh toán, ví và chuyển khoản.
Tổng quan về các Tài nguyên API
Các tài nguyên của Circle có thể được phân loại thành nhiều nhóm:
Tài nguyên Chính: Chúng đại diện cho các hành động tài chính chính mà bạn có thể thực hiện.
Đối tượng Thanh toán (Payment Object)
: Đại diện cho một khoản thanh toán từ khách hàng, đóng vai trò là cách chính để nạp tiền vào hệ sinh thái Circle.Đối tượng Thanh toán ra (Payout Object)
: Đại diện cho một khoản thanh toán cho một bên ngoài (ví dụ: tài khoản ngân hàng), đóng vai trò là cách chính để rút tiền ra.Đối tượng Chuyển khoản (Transfer Object)
: Đại diện cho một sự di chuyển tiền, hoặc giữa các ví Circle của bạn hoặc ra một địa chỉ blockchain bên ngoài.
Phương thức và Công cụ:
Đối tượng Ví (Wallet Object)
: Đại diện cho một kho tiền (số dư) được quản lý bởi Circle. Bạn có một ví chính và có thể tạo thêm các ví khác.Đối tượng Tài khoản Chuyển khoản (Wire Account Object)
: Đại diện cho một tài khoản ngân hàng đã liên kết để nhận các khoản thanh toán ra.
Tài nguyên Lồng ghép: Đây là các đối tượng thường được nhúng trong các tài nguyên khác để cung cấp thông tin chi tiết.
Đối tượng Tiền tệ (Money Object)
: Một đối tượng tiêu chuẩn để biểu thị một số tiền và đơn vị tiền tệ của nó (ví dụ:{ "amount": "100.00", "currency": "USD" }
).Đối tượng Nguồn (Source Object)
vàĐối tượng Đích (Destination Object)
: Chúng chỉ định nơi tiền cho một giao dịch đến từ đâu và sẽ đi đến đâu.Đối tượng Địa chỉ Blockchain (Blockchain Address Object)
: Đại diện cho một địa chỉ cụ thể trên một blockchain được hỗ trợ.
Tìm hiểu sâu: Đối tượng Payment
Một payment
(thanh toán) là cách bạn nhận tiền. Mặc dù API hỗ trợ thanh toán bằng thẻ, nhưng đối với các trường hợp sử dụng USDC, bạn thường sẽ xử lý các khoản thanh toán nạp tiền vào ví Circle của mình.
Ví dụ về đối tượng Payment
:
{
"id": "e665ea6e-3a53-4f93-a85e-45178d48d9ea",
"type": "payment",
"merchantId": "c680d087-7b41-40aa-95a2-68febcdddb22",
"merchantWalletId": "1000002853",
"amount": {
"amount": "10.00",
"currency": "USD"
},
"source": {
"id": "86461e9f-db1a-487f-915b-641138062e7c",
"type": "card"
},
"description": "New customer payment",
"status": "confirmed",
"fees": {
"amount": "0.58",
"currency": "USD"
},
"createDate": "2024-01-10T02:29:53.888Z",
"updateDate": "2024-01-10T02:32:19.421Z"
}
Các thuộc tính chính:
id
(chuỗi): Định danh duy nhất cho khoản thanh toán này.amount
(Đối tượng Tiền tệ): Số tiền và đơn vị tiền tệ của khoản thanh toán.source
(Đối tượng Nguồn): Chi tiết nơi tiền đến từ (ví dụ: thẻ hoặc chuyển khoản ngân hàng).status
(chuỗi): Trạng thái hiện tại của khoản thanh toán. Có thể làpending
(đang chờ xử lý),confirmed
(đã xác nhận),paid
(đã thanh toán) hoặcfailed
(thất bại). Đây là một trường quan trọng cần theo dõi.fees
(Đối tượng Tiền tệ): Các khoản phí mà Circle tính để xử lý khoản thanh toán.
Tìm hiểu sâu: Đối tượng Transfer
Một transfer
(chuyển khoản) có lẽ là đối tượng quan trọng nhất để "giao dịch" hoặc di chuyển USDC. Nó đại diện cho sự di chuyển của tiền kỹ thuật số.
Ví dụ về đối tượng Transfer
:
{
"id": "c332d75a-3870-410c-b26a-93e5a3ab90e8",
"source": {
"type": "wallet",
"id": "1000002853"
},
"destination": {
"type": "blockchain",
"address": "0x8381470ED67C3802402dbbFa0058E8871F017A6F",
"chain": "ETH"
},
"amount": {
"amount": "150.50",
"currency": "USD"
},
"status": "pending",
"createDate": "2024-05-15T18:44:03.484Z",
"updateDate": "2024-05-15T18:44:03.484Z"
}
Các thuộc tính chính:
id
(chuỗi): Định danh duy nhất cho khoản chuyển khoản này.source
(Đối tượng Nguồn): Nơi tiền đến từ. Đối với các khoản chuyển ra, đây hầu như luôn làví
của bạn.destination
(Đối tượng Đích): Nơi tiền sẽ đến. Đây có thể là mộtví
Circle khác hoặc, phổ biến hơn, một địa chỉblockchain
bên ngoài.amount
(Đối tượng Tiền tệ): Số lượng USDC cần chuyển.status
(chuỗi): Trạng thái của khoản chuyển khoản. Nó sẽ bắt đầu làpending
(đang chờ xử lý) và chuyển sangcomplete
(hoàn tất) hoặcfailed
(thất bại).
Đối tượng Nguồn và Đích
Các đối tượng lồng ghép này rất quan trọng vì chúng định nghĩa luồng tiền trong bất kỳ giao dịch nào.
Trường type
của chúng xác định loại nguồn hoặc đích:
wallet
: Một ví Circle, được xác định bằngid
của nó.blockchain
: Một địa chỉ bên ngoài trên một blockchain, được chỉ định bởiaddress
vàchain
(ví dụ:ETH
,SOL
,MATIC
).wire
: Một tài khoản ngân hàng, được sử dụng cho các khoản thanh toán ra.card
: Một thẻ tín dụng/ghi nợ, được sử dụng cho các khoản thanh toán.
Các Chuỗi và Tiền tệ được Hỗ trợ
Circle không phụ thuộc vào chuỗi và liên tục mở rộng hỗ trợ của mình. Tính đến cuối năm 2024, USDC có sẵn trên nhiều blockchain lớn, bao gồm:
- Ethereum (ETH)
- Solana (SOL)
- Polygon PoS (MATIC)
- TRON (TRX)
- Avalanche (AVAX)
- Stellar (XLM)
- Algorand (ALGO)
- Flow (FLOW)
Bạn phải chỉ định định danh chain
chính xác khi thực hiện chuyển khoản. Đối với tiền pháp định, API chủ yếu hỗ trợ USD
và EUR
. currency
trong đối tượng Money
luôn phải được đặt là USD
khi xử lý các khoản chuyển USDC.
Thực hiện Giao dịch: Vòng đời Hoàn chỉnh
Bây giờ chúng ta đi vào trọng tâm của vấn đề: sử dụng API để chuyển tiền. Chúng ta sẽ đi qua một vòng đời hoàn chỉnh: nạp tiền pháp định để có USDC, chuyển USDC đó đến một địa chỉ bên ngoài và cuối cùng rút nó về lại tài khoản ngân hàng pháp định.
Bước 1: Nạp Tiền Pháp định với một Payment
Đối với nhiều ứng dụng, bước đầu tiên là chuyển đổi tiền pháp định từ khách hàng thành USDC trong ví Circle của bạn. Điểm cuối API Create Payment
được sử dụng cho mục đích này. Mặc dù API hỗ trợ nhiều nguồn thanh toán khác nhau, chúng ta sẽ tập trung vào khái niệm.
Giả sử một khách hàng đang thanh toán cho bạn 500 đô la. Bạn sẽ thực hiện một yêu cầu POST
tới /v1/payments
.
Yêu cầu API để Tạo một Thanh toán:
curl -X POST \
https://api-sandbox.circle.com/v1/payments \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"idempotencyKey": "your-unique-uuid-here-for-payment",
"source": {
"id": "some-card-or-bank-id",
"type": "card"
},
"amount": {
"amount": "500.00",
"currency": "USD"
},
"description": "Payment for services rendered"
}'
Lưu ý Quan trọng: idempotencyKey
rất quan trọng ở đây. Đó là một ID duy nhất (ở định dạng UUID) mà bạn tạo cho yêu cầu này. Nếu bạn gửi cùng một yêu cầu hai lần (ví dụ: do lỗi mạng), Circle sẽ nhận ra khóa và chỉ xử lý thanh toán một lần. Chúng ta sẽ đề cập chi tiết hơn về điều này trong chương tiếp theo.
Khi khoản thanh toán này được xử lý và status
của nó trở thành confirmed
(đã xác nhận) hoặc paid
(đã thanh toán), số lượng USDC tương đương (trừ phí) sẽ được ghi có vào merchantWalletId
của bạn.
Bước 2: Kiểm tra Số dư Ví của Bạn
Sau khi nhận được khoản thanh toán, bạn sẽ muốn xác minh rằng tiền đã đến. Bạn có thể kiểm tra số dư của bất kỳ ví nào của mình, nhưng phổ biến nhất là ví chính của bạn.
Yêu cầu API để Lấy Số dư:
curl -X GET \
https://api-sandbox.circle.com/v1/wallets/${YOUR_WALLET_ID}/balances \
-H "Authorization: Bearer ${YOUR_API_KEY}"
Thay thế ${YOUR_WALLET_ID}
bằng masterWalletId
mà bạn đã truy xuất trước đó.
Phản hồi API:
Phản hồi sẽ là một danh sách các số dư, một cho mỗi loại tiền tệ bạn nắm giữ.
{
"data": {
"available": [
{
"amount": "495.50",
"currency": "USD"
}
],
"unsettled": [
{
"amount": "0.00",
"currency": "USD"
}
]
}
}
Số dư available
(khả dụng) là số tiền bạn có thể chuyển hoặc thanh toán ngay lập tức.
Bước 3: Chuyển USDC trên Chuỗi
Đây là cốt lõi của việc sử dụng USDC. Bạn có thể chuyển tiền từ ví của mình đến bất kỳ địa chỉ bên ngoài nào trên một blockchain được hỗ trợ. Điều này hoàn hảo để thanh toán cho nhà cung cấp, chuyển tiền đến một giao thức DeFi hoặc gửi giá trị cho người dùng.
Giả sử bạn muốn gửi 100 USDC đến một địa chỉ Ethereum.
Yêu cầu API để Tạo một Chuyển khoản:
curl -X POST \
https://api-sandbox.circle.com/v1/transfers \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"idempotencyKey": "another-unique-uuid-for-transfer",
"source": {
"type": "wallet",
"id": "1000002853"
},
"destination": {
"type": "blockchain",
"address": "0x8381470ED67C3802402dbbFa0058E8871F017A6F",
"chain": "ETH"
},
"amount": {
"amount": "100.00",
"currency": "USD"
}
}'
Phân tích Cấu trúc Yêu cầu:
idempotencyKey
: Một UUID mới, duy nhất cho hoạt động chuyển khoản cụ thể này.source
: Ví Circle của bạn, được chỉ định bởiid
của nó.destination
: Một địa chỉ blockchain bên ngoài.type
làblockchain
.address
là địa chỉ ví của người nhận.chain
là định danh cho blockchain (ETH
cho Ethereum).amount
: Số lượng USDC cần gửi.
API sẽ phản hồi bằng một đối tượng Transfer
, ban đầu với status
là pending
(đang chờ xử lý).
Hiểu về Xác nhận Blockchain
Các giao dịch trên chuỗi không tức thì. Một khoản chuyển khoản phải được phát sóng đến mạng và sau đó được xác nhận bởi các thợ đào hoặc người xác thực. status
của khoản chuyển khoản của bạn sẽ chỉ thay đổi thành complete
(hoàn tất) sau khi nó đã nhận đủ số lượng xác nhận trên blockchain. Circle quản lý sự phức tạp này cho bạn. Bạn có thể theo dõi trạng thái bằng cách thăm dò điểm cuối GET /v1/transfers/{id}
hoặc, tốt hơn, bằng cách sử dụng webhook (được đề cập trong chương tiếp theo) để nhận thông báo khi khoản chuyển khoản hoàn tất.
Bước 4: Rút USDC về Tiền Pháp định với một Payout
Bước cuối cùng trong vòng đời là chuyển đổi USDC của bạn trở lại thành tiền pháp định trong một tài khoản ngân hàng. Điều này được thực hiện thông qua một payout
(thanh toán ra). Trước khi bạn có thể tạo một khoản thanh toán ra, bạn phải liên kết và xác minh một tài khoản ngân hàng, điều này sẽ tạo ra một đối tượng Wire Account
.
Khi bạn đã thiết lập một tài khoản ngân hàng đích (với id
của riêng nó), bạn có thể tạo khoản thanh toán ra.
Yêu cầu API để Tạo một Thanh toán ra:
curl -X POST \
https://api-sandbox.circle.com/v1/payouts \
-H "Authorization: Bearer ${YOUR_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"idempotencyKey": "yet-another-unique-uuid-for-payout",
"destination": {
"type": "wire",
"id": "your-bank-account-uuid-here"
},
"amount": {
"amount": "250.00",
"currency": "USD"
}
}'
API sẽ phản hồi bằng một đối tượng Payout
. status
sẽ là pending
(đang chờ xử lý) ban đầu và sẽ chuyển sang complete
(hoàn tất) khi tiền đã được gửi thành công đến ngân hàng đích.
Các Tính năng Nâng cao và Thực tiễn Tốt nhất
Để xây dựng một ứng dụng thực sự mạnh mẽ và có khả năng mở rộng, bạn cần vượt ra ngoài các lệnh gọi API cơ bản và tận dụng các tính năng nâng cao mà Circle cung cấp. Các tính năng này được thiết kế để đảm bảo tính toàn vẹn dữ liệu, cung cấp cập nhật thời gian thực và làm cho ứng dụng của bạn trở nên kiên cường.
Yêu cầu Bất biến: Ngăn chặn Chi tiêu Kép
Chúng ta đã đề cập đến idempotencyKey
nhiều lần, nhưng tầm quan trọng của nó không thể bị phóng đại. Trong các hệ thống tài chính, việc vô tình thực hiện một thao tác hai lần (như gửi thanh toán hoặc chuyển khoản) có thể gây ra thảm họa. Các vấn đề mạng có thể khiến một yêu cầu hết thời gian chờ, ngay cả khi máy chủ đã xử lý thành công. Nếu không có tính bất biến, ứng dụng của bạn có thể tự động thử lại yêu cầu, dẫn đến một giao dịch trùng lặp.
Cách hoạt động:
- Đối với bất kỳ yêu cầu
POST
nào tạo ra một tài nguyên (thanh toán, chuyển khoản, thanh toán ra), bạn nên tạo một UUID (Định danh duy nhất toàn cầu) phiên bản 4 duy nhất và bao gồm nó trong trườngidempotencyKey
của phần thân yêu cầu. - Khi máy chủ của Circle nhận được yêu cầu, nó sẽ kiểm tra xem đã từng thấy khóa này trước đây chưa.
- Nếu khóa là mới, nó sẽ xử lý yêu cầu và lưu trữ khóa cùng với kết quả.
- Nếu khóa đã được thấy trước đây, nó sẽ không xử lý lại yêu cầu. Thay vào đó, nó chỉ đơn giản trả về kết quả của yêu cầu ban đầu.
Điều này đảm bảo rằng một yêu cầu cụ thể chỉ có thể được thực hiện một lần duy nhất, bất kể nó được gửi bao nhiêu lần.
Thực tiễn Tốt nhất: Luôn tạo và gửi một idempotencyKey
cho mọi thao tác POST
.
Cập nhật Thời gian thực với Webhook
Việc liên tục thăm dò một API để kiểm tra trạng thái của một giao dịch (GET /v1/transfers/{id}
) là không hiệu quả và chậm. Phương pháp hiện đại, đúng đắn là sử dụng webhook.
Webhook là một tin nhắn tự động được gửi từ một ứng dụng (Circle) đến một ứng dụng khác (của bạn) khi một sự kiện cụ thể xảy ra. Bạn có thể cấu hình một URL trong bảng điều khiển Circle của mình nơi bạn muốn nhận các thông báo này.
Khi trạng thái của một khoản thanh toán, chuyển khoản hoặc thanh toán ra thay đổi, Circle sẽ gửi một yêu cầu POST
đến URL đã cấu hình của bạn với một tải trọng thông báo chứa đối tượng đã cập nhật.
Ví dụ về Tải trọng Thông báo cho một Chuyển khoản Đã hoàn tất:
{
"notification": {
"id": "notification-uuid",
"type": "transfers",
"subscriptionId": "your-subscription-id"
},
"transfer": {
"id": "c332d75a-3870-410c-b26a-93e5a3ab90e8",
"source": { ... },
"destination": { ... },
"amount": {
"amount": "100.00",
"currency": "USD"
},
"status": "complete",
"transactionHash": "0x123abc...",
"createDate": "2024-05-15T18:44:03.484Z",
"updateDate": "2024-05-15T18:48:12.123Z"
}
}
Bằng cách lắng nghe các thông báo này, ứng dụng của bạn có thể phản ứng ngay lập tức với các sự kiện như một khoản chuyển khoản hoàn tất hoặc một khoản thanh toán thất bại, mang lại trải nghiệm người dùng tốt hơn nhiều và cho phép tự động hóa thời gian thực.
Phân trang và Lọc: Xử lý Tập dữ liệu Lớn
Khi ứng dụng của bạn phát triển, bạn sẽ tích lũy hàng nghìn khoản thanh toán, chuyển khoản và các bản ghi khác. Việc yêu cầu tất cả chúng cùng một lúc bằng cách sử dụng điểm cuối GET
như /v1/transfers
sẽ chậm và khó quản lý.
Circle API sử dụng phân trang dựa trên con trỏ để giải quyết vấn đề này. Khi bạn liệt kê các tài nguyên, phản hồi sẽ chỉ chứa một số lượng mục giới hạn ("trang"). Bạn có thể kiểm soát kích thước của trang này bằng tham số pageSize
. Để lấy trang kết quả tiếp theo hoặc trước đó, bạn sử dụng các tham số pageAfter
hoặc pageBefore
, truyền ID của mục cuối cùng hoặc đầu tiên bạn đã thấy.
Ví dụ: Lấy trang đầu tiên của 20 chuyển khoản:GET /v1/transfers?pageSize=20
Ví dụ: Lấy trang tiếp theo của 20 chuyển khoản:GET /v1/transfers?pageSize=20&pageAfter={id_of_last_transfer_from_previous_page}
Bạn cũng có thể lọc kết quả dựa trên các khoảng thời gian (dấu thời gian from
và to
) và các thuộc tính cụ thể khác của tài nguyên.
Xử lý Lỗi: Xây dựng một Ứng dụng Kiên cường
Mọi thứ có thể và sẽ xảy ra sai sót. Một yêu cầu API có thể thất bại do đầu vào không hợp lệ, không đủ tiền hoặc sự cố máy chủ tạm thời. Một ứng dụng mạnh mẽ phải dự đoán và xử lý các lỗi này một cách khéo léo.
Circle API sử dụng các mã trạng thái HTTP tiêu chuẩn để chỉ ra kết quả của một yêu cầu.
2xx
(ví dụ:200 OK
,201 Created
): Thành công.4xx
(ví dụ:400 Bad Request
,401 Unauthorized
,404 Not Found
): Lỗi phía máy khách. Bạn đã gửi sai thứ gì đó.5xx
(ví dụ:500 Internal Server Error
): Lỗi phía máy chủ. Có gì đó không ổn ở phía Circle.
Khi một lỗi xảy ra, phần thân phản hồi API sẽ chứa một đối tượng JSON với nhiều chi tiết hơn.
Ví dụ về Phản hồi Lỗi (400 Bad Request
):
{
"code": 2,
"message": "Invalid or missing parameter. See details for more information.",
"errors": [
{
"location": "body",
"message": "destination address is invalid",
"param": "destination.address"
}
]
}
Mã của bạn luôn phải được bao bọc trong các khối try/catch (hoặc tương đương với ngôn ngữ của bạn) để xử lý các ngoại lệ tiềm ẩn từ các lệnh gọi API. Bạn nên ghi lại chi tiết lỗi và, nếu thích hợp, hiển thị một thông báo hữu ích cho người dùng.
Kết luận: Nâng tầm Tương lai Tài chính
Chúng ta đã cùng nhau trải qua toàn bộ quá trình sử dụng Circle API để giao dịch với USDC. Từ việc thiết lập sandbox ban đầu và xác thực cho đến việc thực hiện các khoản thanh toán, chuyển khoản và thanh toán ra, giờ đây bạn đã có kiến thức nền tảng để xây dựng các ứng dụng tài chính mạnh mẽ. Chúng ta cũng đã khám phá các tính năng nâng cao như tính bất biến, webhook và xử lý lỗi, những yếu tố cần thiết để tạo ra các hệ thống chuyên nghiệp, sẵn sàng cho môi trường sản xuất.
Circle API không chỉ cho phép bạn di chuyển một loại tiền kỹ thuật số; nó cung cấp các đường ray có thể lập trình cho một hệ thống tài chính mới, bản địa internet. Bằng cách trừu tượng hóa sự phức tạp của công nghệ blockchain và cung cấp một API rõ ràng, định hướng tài nguyên, Circle trao quyền cho các nhà phát triển đổi mới và xây dựng thế hệ tiếp theo của thương mại toàn cầu, dịch vụ tài chính và thanh toán ngang hàng.
Khả năng là vô hạn. Các công cụ nằm trong tay bạn. Giờ thì, hãy bắt tay vào xây dựng một thứ gì đó tuyệt vời.
Bạn muốn một nền tảng tích hợp, tất cả trong một để Đội ngũ Nhà phát triển của bạn làm việc cùng nhau với năng suất tối đa?
Apidog đáp ứng mọi yêu cầu của bạn và thay thế Postman với mức giá phải chăng hơn nhiều!