Giới thiệu
AP2 (Giao thức Thanh toán Đại lý) là một giao thức cho phép thanh toán đại lý, hỗ trợ cả quy trình thương mại có người hiện diện và không có người hiện diện. Hướng dẫn này cung cấp các hướng dẫn chi tiết về cách sử dụng dự án mẫu Python của AP2.
Cấu trúc dự án
samples/python/
├── src/ap2/ # Mã nguồn chính của AP2
├── scenarios/ # Ví dụ về kịch bản sử dụng
│ └── a2a/human-present/ # Kịch bản thanh toán có người hiện diện
│ ├── cards/ # Ví dụ thanh toán bằng thẻ
│ └── x402/ # Ví dụ thanh toán x402
├── pyproject.toml # Cấu hình dự án
└── README.md # Tài liệu dự án
Yêu cầu môi trường
- Python 3.10+
- Trình quản lý gói
uv
- Google API Key (để sử dụng chức năng AI)
Các bước cài đặt
1. Cài đặt Trình quản lý gói uv
Nếu bạn chưa cài đặt uv
, vui lòng truy cập hướng dẫn cài đặt uv để biết các bước chi tiết.
2. Nhân bản dự án và Cài đặt các phụ thuộc
# Nhân bản dự án
git clone https://github.com/google-agentic-commerce/AP2.git
# Chuyển đến thư mục dự án
cd AP2/samples/python
# Cài đặt các phụ thuộc
uv sync
3. Cấu hình Google API Key
Lấy một API Key từ Google AI Studio, sau đó chọn một trong các phương pháp cấu hình sau:
Biến Môi Trường
export GOOGLE_API_KEY=your_api_key_here
Các khái niệm chính
1. Các tác nhân chính
- Đại lý mua sắm: Điều phối viên chính xử lý yêu cầu mua sắm của người dùng và phân công cho các đại lý chuyên biệt.
- Đại lý thương mại: Xử lý truy vấn sản phẩm từ các đại lý mua sắm.
- Đại lý xử lý thanh toán thương mại: Xử lý thanh toán thay mặt cho các nhà bán hàng.
- Đại lý cung cấp thông tin xác thực: Quản lý thông tin xác thực thanh toán của người dùng.
2. Cấu trúc dữ liệu chính
- IntentMandate: Ủy quyền ý định chứa thông tin ý định mua hàng.
- CartMandate: Ủy quyền giỏ hàng được ký bởi thương mại để đảm bảo độ chính xác của báo giá.
- PaymentMandate: Ủy quyền thanh toán chứa thông tin giao dịch và chữ ký của người dùng.
Các kịch bản sử dụng
Kịch bản 1: Thanh toán bằng thẻ có người hiện diện
Đây là kịch bản thanh toán phổ biến nhất, nơi người dùng hiện diện để xác nhận chi tiết mua hàng và phương thức thanh toán.
Hướng dẫn từng bước
Nếu bạn muốn chạy mỗi dịch vụ trong các terminal khác nhau:
- Khởi động Đại lý Thương mại
# AP2/samples/python
uv run --package ap2-samples python -m roles.merchant_agent
- Khởi động Đại lý Cung cấp Thông tin Xác thực
# AP2/samples/python
uv run --package ap2-samples python -m roles.credentials_provider_agent
- Khởi động Đại lý Xử lý Thanh toán Thương mại
# AP2/samples/python
uv run --package ap2-samples python -m roles.merchant_payment_processor_agent
- Khởi động Đại lý Mua sắm
# AP2/samples/python
uv run --package ap2-samples adk web src/roles
Luồng tương tác
- Truy cập Giao diện: Mở trình duyệt và truy cập
http://0.0.0.0:8000/dev-ui
- Chọn Đại lý: Chọn
shopping_agent
từ menu dropdown - Khởi tạo Yêu cầu: Nhập ý định mua sắm, ví dụ "Tôi muốn mua một máy pha cà phê"
- Tìm kiếm Sản phẩm: Đại lý mua sắm phân công cho đại lý thương mại để tìm các sản phẩm phù hợp
- Tạo Giỏ hàng: Đại lý thương mại tạo CartMandate và chia sẻ với đại lý mua sắm
- Chọn Sản phẩm: Chọn từ các sản phẩm được hiển thị
- Liên kết với Đại lý Cung cấp Thông tin Xác thực: Kết nối với nhà cung cấp thông tin xác thực mà bạn chọn
- Chọn Phương thức Thanh toán: Chọn từ các phương thức thanh toán có sẵn
- Tạo Ủy quyền Thanh toán: Đại lý mua sắm tạo PaymentMandate và yêu cầu chữ ký
- Xác thực OTP: Nhập OTP giả lập
123
- Hoàn tất Mua hàng: Nhận thông báo xác nhận và biên lai điện tử
Kịch bản 2: Thanh toán x402
Hỗ trợ các phương thức thanh toán tương thích x402 (phiên bản đầy đủ tương thích AP2 sẽ sớm ra mắt).
Phương thức khởi động tương tự như kịch bản thanh toán bằng thẻ, nhưng sử dụng các kịch bản và cấu hình liên quan đến x402.
Tính năng nâng cao
1. Chế độ Verbose
Để hiểu rõ các hoạt động bên trong của các đại lý, bạn có thể bật chế độ verbose:
Tôi muốn mua một đôi giày mới. Vui lòng ở chế độ verbose trong suốt quá trình, giải thích những gì bạn đang làm và hiển thị tất cả dữ liệu.
Chế độ verbose sẽ hiển thị:
- Giải thích chi tiết về các bước hiện tại và tiếp theo
- Các đại diện JSON của tất cả tải dữ liệu
- Các đối tượng ủy quyền đang được tạo, gửi hoặc nhận
2. Nhật ký giao tiếp của Đại lý
Hệ thống tự động tạo các tệp nhật ký chi tiết watch.log
trong thư mục .logs
.
Nhật ký chứa ba loại dữ liệu:
Danh mục | Nội dung |
---|---|
Dữ liệu HTTP Thô | Phương thức HTTP, URL, các thân yêu cầu và phản hồi JSON |
Dữ liệu Tin nhắn A2A | Hướng dẫn yêu cầu trích xuất từ Tin nhắn A2A và dữ liệu trong các DataParts |
Dữ liệu Giao thức AP2 | Các đối tượng ủy quyền được xác định trong các DataParts của tin nhắn |
Kiến trúc mã
1. Trình tạo Tin nhắn
Lớp A2aMessageBuilder
được sử dụng để xây dựng các tin nhắn A2A:
builder = A2aMessageBuilder()
message = builder.add_text("Xin chào").add_data("key", data).build()
2. Trình thực thi Máy chủ Cơ bản
BaseServerExecutor
cung cấp các chức năng cơ bản cho các đại lý:
- Xử lý yêu cầu và phản hồi
- Quản lý các phần mở rộng
- Phân tích và thực thi công cụ
3. Xác thực Thanh toán
Hệ thống bao gồm logic xác thực ủy quyền thanh toán để đảm bảo an toàn giao dịch:
def validate_payment_mandate_signature(payment_mandate: PaymentMandate) -> None:
if payment_mandate.user_authorization is None:
raise ValueError("Không tìm thấy ủy quyền của người dùng trong PaymentMandate.")
4. Giải thích mã của Đại lý Cung cấp Thông tin Xác thực
Đại lý này hoạt động như một "ví điện tử", có trách nhiệm lưu trữ/lấy các phương thức thanh toán và địa chỉ giao hàng của người dùng, cũng như tạo và xác thực các "mã thông báo xác thực thanh toán" trong quá trình thanh toán. Mã chính nằm trong samples/python/src/roles/credentials_provider_agent/
:
-
Điểm vào:
__main__.py
- Tải mô tả
agent.json
cục bộ như agent_card. - Khởi động dịch vụ trên cổng
8002
với đường dẫn RPC/a2a/credentials_provider
. - Tạo
CredentialsProviderExecutor
và truyền vào danh sách các phần mở rộng được hỗ trợ.
- Tải mô tả
-
Trình thực thi:
agent_executor.py
CredentialsProviderExecutor
kế thừa từBaseServerExecutor
, bị ràng buộc bởi lời nhắc hệ thống là "chỉ xuất các cuộc gọi công cụ, không trò chuyện bình thường với người dùng."- Các công cụ đã đăng ký bao gồm:
handle_get_shipping_address
handle_search_payment_methods
handle_create_payment_credential_token
handle_signed_payment_mandate
handle_get_payment_method_raw_credentials
-
Bộ công cụ:
tools.py
-
Các khóa dữ liệu chung:
-
Khóa địa chỉ giao hàng:
CONTACT_ADDRESS_DATA_KEY
-
Khóa ủy quyền thanh toán:
PAYMENT_MANDATE_DATA_KEY
-
Khóa dữ liệu các phương thức thanh toán được thương mại chấp nhận:
PAYMENT_METHOD_DATA_DATA_KEY
-
Các hàm xử lý khóa:
-
handle_get_shipping_address
- Đầu vào:
user_email
- Hành động: Truy vấn địa chỉ giao hàng tương ứng từ quản lý tài khoản, xuất ra
CONTACT_ADDRESS_DATA_KEY
.
- Đầu vào:
-
handle_search_payment_methods
- Đầu vào:
user_email
và một tập hợp cácPaymentMethodData
(các điều kiện chấp nhận của thương mại như mạng thẻ). - Hành động: Gọi logic khớp nội bộ (
_payment_method_is_eligible
) để lọc các phương thức thanh toán của tài khoản người dùng mà đáp ứng các điều kiện thương mại, trả về{"payment_method_aliases": [...]}
.
- Đầu vào:
-
handle_create_payment_credential_token
- Đầu vào:
user_email
,payment_method_alias
. - Hành động: Tạo một mã thông báo "thông tin xác thực thanh toán" một lần cho phương thức thanh toán đã chọn, trả về định dạng như
{"token": "fake_payment_credential_token_x"}
.
- Đầu vào:
-
handle_signed_payment_mandate
- Đầu vào:
PaymentMandate
(chứapayment_mandate_id
vàtoken
trong chi tiết thanh toán). - Hành động: Liên kết
payment_mandate_id
đã ký với mã thông báo đã tạo trước đó để xác thực sau này.
- Đầu vào:
-
handle_get_payment_method_raw_credentials
- Đầu vào:
PaymentMandate
(chứapayment_mandate_id
vàtoken
). - Hành động: Xác thực sự nhất quán của
token
vàpayment_mandate_id
, trả về thông tin xác thực thanh toán thô (ví dụ: mạng thẻ, DPAN/dữ liệu mã hóa) để bộ xử lý thanh toán hoàn tất giao dịch.
- Đầu vào:
-
-
Quản lý tài khoản và mã thông báo:
account_manager.py
- Cơ sở dữ liệu trong bộ nhớ mô phỏng nhiều tài khoản, ví dụ bao gồm:
- Địa chỉ giao hàng của người dùng
- Nhiều
payment_methods
(chẳng hạn nhưCARD
,BANK_ACCOUNT
,DIGITAL_WALLET
), thẻ chứa mạng và địa chỉ thanh toán, v.v. - Vòng đời mã thông báo:
create_token(email, alias)
: Tạo và lưu mã thông báo (liên kết email và phương thức thanh toán).update_token(token, payment_mandate_id)
: Liên kếtpayment_mandate_id
đã ký với mã thông báo (chỉ ghi một lần).verify_token(token, payment_mandate_id)
: Xác thực xem mã thông báo có khớp với ID ủy quyền hay không, trả về "thông tin xác thực thô" của phương thức thanh toán đó.- Các khả năng truy vấn tài khoản:
get_account_shipping_address(email)
get_account_payment_methods(email)
get_payment_method_by_alias(email, alias)
-
Khai báo khả năng của đại lý:
agent.json
capabilities.extensions
khai báo hỗ trợ cho các phần mở rộng AP2 và các phần mở rộng mạng thẻ mẫu.skills
mô tả các khả năng bên ngoài (như "truy vấn các phương thức thanh toán có sẵn", "lấy địa chỉ giao hàng").
Chuỗi tương tác điển hình (Tóm tắt)
- Đại lý mua sắm cung cấp các
PaymentMethodData
được thương mại chấp nhận vàuser_email
, gọisearch_payment_methods
để lấy cácpayment_method_aliases
có sẵn. - Chọn một
payment_method_alias
, gọicreate_payment_credential_token
để lấytoken
. - Đại lý mua sắm tạo
PaymentMandate
và yêu cầu chữ ký của người dùng, sau khi hoàn tất chữ ký trả nó, đại lý cung cấp thông tin xác thực sử dụngsigned_payment_mandate
để liên kếtpayment_mandate_id
vớitoken
. - Đại lý xử lý thanh toán thương mại gọi
get_payment_method_raw_credentials
trước khi hoàn tất thanh toán, sử dụngtoken + payment_mandate_id
để xác thực và đổi lấy thông tin xác thực thanh toán thô.
Lưu ý: Các hằng số khóa dữ liệu trên được định nghĩa trong mô-đun ap2.types
; các công cụ xuất DataPart
thông qua TaskUpdater
để các đại lý upstream tiếp tục điều phối.
Phát triển mở rộng
1. Tạo các Phương thức Thanh toán Mới
Để hỗ trợ các phương thức thanh toán mới, bạn cần:
- Khai báo hỗ trợ mở rộng trong
agent.json
- Triển khai logic xử lý tương ứng
- Cập nhật quy tắc xác thực
2. Thêm Các Vai trò Đại lý Mới
Việc tạo các đại lý mới yêu cầu:
- Kế thừa từ
BaseServerExecutor
- Triển khai các chức năng công cụ cần thiết
- Cấu hình tệp mô tả đại lý
Khắc phục sự cố
Vấn đề phổ biến
-
Lỗi API Key Google
- Đảm bảo API Key được thiết lập chính xác
- Kiểm tra xem API Key có hợp lệ không
-
Xung đột cổng
- Đảm bảo các cổng cần thiết (8000-8003) không bị chiếm giữ
- Bạn có thể thay đổi cài đặt cổng trong các tệp cấu hình
-
Lỗi cài đặt phụ thuộc
- Đảm bảo phiên bản Python >= 3.10
- Thử xóa bộ nhớ cache:
uv cache clean
Mẹo Gỡ lỗi
- Kiểm tra tệp
watch.log
để hiểu rõ quy trình giao tiếp chi tiết - Sử dụng chế độ verbose để có thêm thông tin gỡ lỗi
- Kiểm tra đầu ra của từng dịch vụ trên console
Thực tiễn tốt nhất
- An ninh: Luôn xác thực chữ ký ủy quyền thanh toán
- Xử lý lỗi: Triển khai các cơ chế xử lý lỗi toàn diện
- Ghi nhật ký: Ghi lại các thao tác quan trọng để gỡ lỗi và kiểm toán
- Kiểm tra: Kiểm tra kỹ lưỡng tất cả các quy trình thanh toán trước khi đưa vào sản xuất
Kết luận
AP2 cung cấp một khung giao thức thanh toán đại lý mạnh mẽ và linh hoạt. Thông qua hướng dẫn này, bạn sẽ có thể:
- Hiểu các khái niệm và kiến trúc chính của AP2
- Chạy thành công dự án mẫu
- Phát triển các đại lý thanh toán tùy chỉnh
- Xử lý các vấn đề phổ biến và gỡ lỗi
Để biết thêm thông tin chi tiết, vui lòng tham khảo các triển khai mã cụ thể và các nhận xét trong dự án.