Stripe Python Library: SDK Chính Thức Cho API Stripe
Stripe Python Library là SDK Python chính thức cho API Stripe, cài đặt qua pip. Nó bọc các lệnh gọi HTTP tới Stripe trong các class tài nguyên có kiểu dữ liệu, tự động thử lại kèm khóa idempotency, và cung cấp cả client đồng bộ lẫn bất đồng bộ. Hãy dùng ngay khi bạn xử lý thanh toán trong ứng dụng Python, vì tự viết wrapper riêng hiếm khi tốt hơn. Bỏ qua nếu dự án của bạn còn kẹt ở Python 3.8 trở xuống, vì thư viện yêu cầu 3.9 trở lên.
Truy Cập API Stripe Bằng Python
Stripe Python Library là một gói Python giúp ứng dụng truy cập API Stripe mà không cần tự viết yêu cầu HTTP. Nó đi kèm các class tài nguyên dựng sẵn cho khách hàng và giao dịch, tự khởi tạo trường dữ liệu từ phản hồi API trả về, điều mà README nói giúp thư viện tương thích với nhiều phiên bản khác nhau của API Stripe. Bạn cấu hình nó bằng khóa bí mật lấy từ Stripe Dashboard, rồi gọi các phương thức tài nguyên thông qua class `StripeClient`.
Các Tính Năng Chính Của SDK
- ✓Class `StripeClient`, giới thiệu từ v8, gom các lệnh gọi API vào một đối tượng được cấu hình sẵn, thay cho mẫu toàn cục `stripe.api_key` kiểu cũ mà README nói rồi sẽ bị đánh dấu deprecated.
- ✓Các class tài nguyên có kiểu dữ liệu được tạo từ phản hồi API, nên một đối tượng `Customer` hay `Charge` tự khởi tạo các trường của mình thay vì bạn phải tự phân tích JSON thô.
- ✓Hỗ trợ bất đồng bộ: mọi phương thức yêu cầu đều có bản thêm hậu tố `_async`, như `retrieve_async`, mặc định dùng `httpx` thay vì `requests` như client đồng bộ.
- ✓Tự động thử lại qua `max_network_retries`, kích hoạt khi có lỗi kết nối, timeout, hoặc phản hồi HTTP 409, cùng khóa idempotency được tạo tự động để việc thử lại luôn an toàn.
- ✓HTTP backend có thể thay đổi: `requests`, `httpx`, `aiohttp`, `pycurl`, hoặc `urllib`, thiết lập qua tùy chọn `http_client` trên `StripeClient`.
- ✓Ghi đè theo từng yêu cầu cho API key, tài khoản kết nối, và phiên bản API Stripe qua tham số `options`, hữu ích cho các nền tảng Connect xử lý nhiều tài khoản.
- ✓Chú thích kiểu dữ liệu từ v7.1.0, đã kiểm thử với Pyright, hỗ trợ thử nghiệm `Unpack[TypedDict]` trong MyPy.
- ✓Ghi log yêu cầu tích hợp sẵn qua biến môi trường `STRIPE_LOG` hoặc module `logging` của Python, cùng khả năng đọc mã phản hồi và header thô qua `last_response`.
Bắt Đầu: Cài Đặt
Cài đặt từ PyPI bằng `pip install --upgrade stripe`, hoặc build từ mã nguồn bằng `python -m pip install .`. README ghi Python 3.9 trở lên là mức tối thiểu được hỗ trợ theo Chính sách hỗ trợ phiên bản ngôn ngữ của Stripe; hỗ trợ Python 2.7 kết thúc sau phiên bản 5.5.0, và từ 6.0.0 trở đi thư viện bỏ hoàn toàn Python 2.7. Nếu bạn định dùng client bất đồng bộ mà chưa có sẵn thư viện HTTP hỗ trợ bất đồng bộ nào, `pip install stripe[async]` sẽ cài luôn một thư viện phù hợp, tính năng mà README ghi là mới từ v13.0.1. Các tính năng preview có sẵn qua hậu tố phiên bản riêng: `bX` cho bản xem trước công khai (ví dụ `12.2.0b2`) và `aX` cho bản xem trước riêng tư, cả hai đều cài bằng cách ghim đúng phiên bản với `pip install stripe==<version>`.
Gọi API Bằng Python
Đặt khóa bí mật rồi gọi tài nguyên qua `StripeClient`: `client = StripeClient("sk_test_...")`, sau đó `client.v1.customers.list()` hoặc `client.v1.customers.retrieve("cus_123456789")`. Yêu cầu thất bại sẽ ném ra ngoại lệ mà class của nó cho biết loại lỗi, theo API Reference mà README dẫn tới. Với code bất đồng bộ, thêm hậu tố `_async` vào tên phương thức, ví dụ `await client.v1.customers.retrieve_async("cus_xyz")`, và `.auto_paging_iter()` hoạt động với cả lặp đồng bộ lẫn bất đồng bộ. Bạn cũng có thể bỏ qua hoàn toàn các phương thức định nghĩa sẵn của thư viện bằng `client.raw_request("post", "/v1/beta_endpoint", ...)`, có từ v11, để gọi thẳng tới endpoint chưa tài liệu hóa hoặc đang ở giai đoạn beta.
Điểm mạnh
- ✓Do chính Stripe xuất bản và duy trì, nên bám sát các tài nguyên và cách đánh phiên bản của API thật, thay vì một client bên thứ ba dựng lại theo suy đoán.
- ✓Tự động thử lại kèm khóa idempotency được tạo sẵn, giúp lỗi mạng tạm thời không có nguy cơ tạo ra giao dịch trùng.
- ✓Hỗ trợ cả client đồng bộ lẫn bất đồng bộ ngay trong thư viện, với HTTP backend có thể đổi giữa `requests`, `httpx`, `aiohttp`, `pycurl`, và `urllib`.
- ✓Chú thích kiểu dữ liệu, có từ v7.1.0, hoạt động sẵn với Pyright, giúp phát hiện lỗi gõ sai tên trường tài nguyên trước khi gọi tới API.
- ✓Giấy phép MIT, nên không có vướng mắc về tương thích giấy phép khi dùng cho mục đích thương mại.
Lưu Ý Và Giới Hạn
- △Mẫu toàn cục kiểu cũ (`stripe.api_key = ...`) vẫn hoạt động, nhưng README nói sẽ sớm bị đánh dấu deprecated, nên dự án mới theo tài liệu hiện tại cần học `StripeClient` thay vì các ví dụ cũ vẫn còn trôi nổi trên mạng.
- △Chú thích kiểu dữ liệu không nằm trong quy tắc semantic versioning; README cảnh báo một bản nâng cấp minor version có thể tạo ra lỗi kiểu dữ liệu mới dù hành vi lúc chạy không đổi.
- △Telemetry về độ trễ yêu cầu và mức sử dụng tính năng được gửi về Stripe theo mặc định. Bạn phải chủ động đặt `stripe.enable_telemetry = False` để tắt.
- △Các bản SDK preview công khai và riêng tư, hậu tố phiên bản `bX`/`aX`, có thể có thay đổi phá vỡ tương thích giữa hai bản preview mà không tăng major version, theo README, nên việc ghim đúng phiên bản rất quan trọng nếu bạn dùng chúng.
- △Đóng góp từ người đóng góp lần đầu hiện đang tạm dừng, theo README, giới hạn cách bạn có thể tham gia ngoài việc báo issue.
Các Cách Khác Để Tích Hợp Stripe
Câu Hỏi Thường Gặp Về Stripe Python Library
Stripe Python Library hỗ trợ Python 3.9 trở lên theo Chính sách hỗ trợ phiên bản ngôn ngữ của Stripe. Hỗ trợ Python 2.7 kết thúc sau phiên bản 5.5.0, và bị bỏ hoàn toàn từ phiên bản 6.0.0.
Stripe Python Library ném ra một ngoại lệ cho mỗi yêu cầu thất bại, và class của ngoại lệ đó cho biết loại lỗi đã xảy ra. README dẫn tới tài liệu xử lý lỗi API của Stripe để xem đầy đủ các class ngoại lệ cần bắt.
Stripe Python Library hỗ trợ thao tác bất đồng bộ qua các phương thức có hậu tố `_async`, ví dụ `retrieve_async`. Thư viện dùng `httpx` làm HTTP client mặc định cho yêu cầu bất đồng bộ, còn yêu cầu đồng bộ mặc định dùng `requests`.
Stripe Python Library nhận tùy chọn `proxy` trên `StripeClient`, ví dụ `StripeClient("sk_test_...", proxy="https://user:[email protected]:1234")`. Cách này định tuyến mọi yêu cầu từ client đó qua địa chỉ proxy đã cho.
Stripe Python Library gửi telemetry về Stripe theo mặc định, bao gồm độ trễ yêu cầu và mức sử dụng tính năng, điều mà README nói giúp Stripe cải thiện hiệu năng API nói chung. Đặt `stripe.enable_telemetry = False` sẽ tắt tính năng này.
Stripe Python Library được phát hành theo giấy phép MIT, như được ghi trên repository GitHub của nó.
Vấn đề mà Stripe Python Library giải quyết
Gọi thẳng API Stripe từ Python nghĩa là bạn phải tự xây HTTP client của riêng mình: ký yêu cầu, phân tích JSON thành đối tượng dùng được, tự thử lại an toàn khi yêu cầu thất bại, và theo kịp một API có phiên bản thay đổi theo thời gian. Đó là việc phải làm lại tốn công cho từng dự án. Stripe Python Library tồn tại để nhà phát triển Python không phải làm vậy. README mô tả các class tài nguyên tự khởi tạo từ phản hồi API chính là để thư viện tiếp tục hoạt động qua nhiều phiên bản API Stripe khác nhau mà bạn không phải viết lại code client mỗi khi Stripe thay đổi.
Trường hợp sử dụng tốt nhất
- •Xây dựng backend Django hoặc Flask tạo khách hàng, giao dịch, hoặc gói đăng ký qua API Stripe mà không cần tự viết code gọi HTTP thô.
- •Thêm xử lý thanh toán bất đồng bộ vào dịch vụ dựa trên asyncio, dùng hậu tố phương thức `_async` và client bất đồng bộ chạy trên `httpx`.
- •Chạy trên nền tảng Connect cần gọi API thay mặt các tài khoản đã kết nối, dùng tùy chọn `stripe_account` theo từng yêu cầu.
- •Thử nghiệm sớm các tính năng preview bằng cách cài phiên bản `bX` (xem trước công khai) hoặc `aX` (xem trước riêng tư) được ghim đúng bản phát hành.
- •Debug vấn đề tích hợp bằng cách bật `STRIPE_LOG=debug` hoặc đọc `last_response.code` và `last_response.headers` từ bất kỳ tài nguyên nào trả về.
Ai nên dùng — và ai nên bỏ qua
Hãy thử Stripe Python Library nếu bạn đang xây ứng dụng Python, bằng Django, Flask, FastAPI, hay một script thông thường, cần tạo giao dịch, quản lý khách hàng, hoặc xử lý gói đăng ký qua API Stripe; các tài nguyên có kiểu dữ liệu và cơ chế thử lại tích hợp sẵn giúp bạn khỏi phải tự xây lại lớp đó. Bỏ qua nếu dự án của bạn vẫn ở Python 3.8 trở xuống, vì README yêu cầu 3.9 trở lên, hoặc nếu bạn cần cụ thể SDK cho Ruby hay iOS: xem stripe-ruby hoặc stripe-ios.
Repo liên quan
Vẫn đang phân vân về stripe-python?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về stripe-python.
