Pustaka Stripe Python menyediakan akses mudah ke Stripe API dari aplikasi yang ditulis dalam bahasa Python. Ini mencakup serangkaian kelas yang telah ditentukan sebelumnya untuk sumber daya API yang menginisialisasi dirinya sendiri secara dinamis dari respons API sehingga membuatnya kompatibel dengan berbagai versi Stripe API.
Lihat dokumen Python API.
Lihat demonstrasi video yang mencakup cara menggunakan perpustakaan.
Anda tidak memerlukan kode sumber ini kecuali Anda ingin mengubah paketnya. Jika Anda hanya ingin menggunakan paket tersebut, jalankan saja:
pip install --upgrade stripe
Instal dari sumber dengan:
python setup.py install
Komunitas Python Software Foundation (PSF) mengumumkan berakhirnya dukungan Python 2 pada 01 Januari 2020. Mulai versi 6.0.0 Stripe SDK, paket Python tidak lagi mendukung Python 2.7. Untuk terus mendapatkan fitur baru dan pembaruan keamanan, pastikan untuk memperbarui runtime Python Anda ke Python 3.6+.
Versi terakhir Stripe SDK yang mendukung Python 2.7 adalah 5.5.0.
Pustaka perlu dikonfigurasi dengan kunci rahasia akun Anda yang tersedia di Dasbor Stripe Anda. Setel stripe.api_key
ke nilainya:
from stripe import StripeClient
client = StripeClient ( "sk_test_..." )
# list customers
customers = client . customers . list ()
# print the first customer's email
print ( customers . data [ 0 ]. email )
# retrieve specific Customer
customer = client . customers . retrieve ( "cus_123456789" )
# print that customer's email
print ( customer . email )
Permintaan yang tidak berhasil menimbulkan pengecualian. Kelas pengecualian akan mencerminkan jenis kesalahan yang terjadi. Silakan lihat Referensi Api untuk deskripsi kelas kesalahan yang harus Anda tangani, dan untuk informasi tentang cara memeriksa kesalahan ini.
Konfigurasikan permintaan individual dengan argumen options
. Misalnya, Anda dapat membuat permintaan dengan Versi Stripe tertentu atau sebagai akun yang terhubung:
from stripe import StripeClient
client = StripeClient ( "sk_test_..." )
# list customers
client . customers . list (
options = {
"api_key" : "sk_test_..." ,
"stripe_account" : "acct_..." ,
"stripe_version" : "2019-02-19" ,
}
)
# retrieve single customer
client . customers . retrieve (
"cus_123456789" ,
options = {
"api_key" : "sk_test_..." ,
"stripe_account" : "acct_..." ,
"stripe_version" : "2019-02-19" ,
}
)
Anda dapat mengonfigurasi StripeClient
untuk menggunakan urlfetch
, requests
, pycurl
, atau urllib2
dengan opsi http_client
:
client = StripeClient ( "sk_test_..." , http_client = stripe . UrlFetchClient ())
client = StripeClient ( "sk_test_..." , http_client = stripe . RequestsClient ())
client = StripeClient ( "sk_test_..." , http_client = stripe . PycurlClient ())
client = StripeClient ( "sk_test_..." , http_client = stripe . Urllib2Client ())
Tanpa klien yang dikonfigurasi, secara default perpustakaan akan mencoba memuat perpustakaan dalam urutan di atas (yaitu urlfetch
lebih disukai dengan urllib2
digunakan sebagai pilihan terakhir). Kami biasanya menyarankan orang menggunakan requests
.
Proksi dapat dikonfigurasi dengan opsi klien proxy
:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Anda dapat mengaktifkan percobaan ulang otomatis pada permintaan yang gagal karena masalah sementara dengan mengonfigurasi jumlah percobaan ulang maksimum:
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Berbagai kesalahan dapat memicu percobaan ulang, seperti kesalahan koneksi atau batas waktu habis, dan juga respons API tertentu seperti status HTTP 409 Conflict
.
Kunci idempotensi secara otomatis dihasilkan dan ditambahkan ke permintaan, ketika tidak diberikan, untuk menjamin bahwa percobaan ulang aman.
Pustaka dapat dikonfigurasi untuk mengeluarkan logging yang akan memberi Anda wawasan lebih baik tentang apa yang dilakukannya. Tingkat pencatatan info
biasanya paling sesuai untuk penggunaan produksi, namun debug
juga tersedia untuk lebih banyak verbositas.
Ada beberapa opsi untuk mengaktifkannya:
Setel variabel lingkungan STRIPE_LOG
ke nilai debug
atau info
$ export STRIPE_LOG=debug
Setel stripe.log
:
import stripe
stripe . log = 'debug'
Aktifkan melalui modul logging Python:
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Anda dapat mengakses kode respons HTTP dan header menggunakan properti last_response
dari sumber daya yang dikembalikan.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Jika Anda sedang menulis plugin yang menggunakan perpustakaan, kami akan sangat menghargai jika Anda mengidentifikasi menggunakan stripe.set_app_info()
:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Informasi ini diteruskan ketika perpustakaan melakukan panggilan ke Stripe API.
Secara default, perpustakaan mengirimkan telemetri ke Stripe mengenai latensi permintaan dan penggunaan fitur. Angka-angka ini membantu Stripe meningkatkan latensi keseluruhan API-nya untuk semua pengguna, dan meningkatkan fitur-fitur populer.
Anda dapat menonaktifkan perilaku ini jika Anda mau:
stripe . enable_telemetry = False
Di v7.1.0 dan yang lebih baru, perpustakaan menyertakan anotasi tipe. Lihat wiki untuk panduan rinci.
Harap perhatikan bahwa beberapa anotasi menggunakan fitur yang baru saja diterima, seperti Unpack[TypedDict]
yang diterima pada Januari 2023. Kami telah menguji apakah jenis ini dikenali dengan benar oleh Pyright. Dukungan untuk Unpack
di MyPy masih bersifat eksperimental, tetapi tampaknya mengalami penurunan dengan baik. Silakan laporkan masalah jika ada yang bisa kami lakukan untuk meningkatkan tipe pemeriksa tipe pilihan Anda.
Kami merilis perubahan jenis dalam rilis kecil. Meskipun stripe-python mengikuti pembuatan versi semantik, versi semantik kami menjelaskan perilaku runtime pustaka saja. Anotasi tipe kami tidak tercermin dalam versi semantik . Artinya, memutakhirkan ke versi minor baru dari stripe-python mungkin mengakibatkan pemeriksa tipe Anda menghasilkan kesalahan tipe yang tidak terjadi sebelumnya. Anda dapat menggunakan penentu versi ~=xx
atau xx*
di requirements.txt
Anda untuk membatasi pip
ke rentang minor tertentu dari stripe-python
.
Jenisnya menjelaskan versi Stripe API yang terbaru pada saat rilis. Ini adalah versi yang dikirimkan perpustakaan Anda secara default. Jika Anda mengganti stripe.api_version
/ stripe_version
pada StripeClient
, atau menggunakan titik akhir webhook yang dikaitkan dengan versi yang lebih lama, ketahuilah bahwa data yang Anda lihat saat runtime mungkin tidak cocok dengan jenisnya.
Stripe memiliki fitur dalam tahap beta yang dapat diakses melalui versi beta paket ini. Kami ingin Anda mencobanya dan berbagi masukan dengan kami sebelum fitur ini mencapai fase stabil. Untuk menginstal versi beta, gunakan pip install
dengan versi persis yang ingin Anda gunakan:
pip install --pre stripe
Catatan Mungkin ada perubahan yang dapat mengganggu antar versi beta. Oleh karena itu kami menyarankan untuk menyematkan versi paket ke versi beta tertentu di file persyaratan Anda atau
setup.py
. Dengan cara ini Anda dapat menginstal versi yang sama setiap kali tanpa merusak perubahan kecuali Anda sengaja mencari versi beta terbaru.
Kami sangat menyarankan untuk memperhatikan kapan fitur beta yang Anda minati beralih dari beta ke stabil sehingga Anda dapat beralih dari menggunakan SDK versi beta ke versi stabil.
Jika fitur beta Anda memerlukan header Stripe-Version
untuk dikirim, setel bidang stripe.api_version
menggunakan fungsi stripe.add_beta_version
:
stripe . add_beta_version ( "feature_beta" , "v3" )
Jika Anda ingin mengirim permintaan ke API yang tidak terdokumentasi (misalnya Anda berada dalam versi beta pribadi), atau jika Anda lebih memilih untuk mengabaikan definisi metode di perpustakaan dan menentukan detail permintaan Anda secara langsung, Anda dapat menggunakan metode raw_request
di StripeClient
.
client = StripeClient ( "sk_test_..." )
response = client . raw_request (
"post" , "/v1/beta_endpoint" , param = 123 , stripe_version = "2022-11-15; feature_beta=v3"
)
# (Optional) response is a StripeResponse. You can use `client.deserialize` to get a StripeObject.
deserialized_resp = client . deserialize ( response , api_mode = 'V1' )
Versi metode pembuatan permintaan asinkron tersedia dengan menambahkan akhiran nama metode dengan _async
.
# With StripeClient
client = StripeClient ( "sk_test_..." )
customer = await client . customers . retrieve_async ( "cus_xyz" )
# With global client
stripe . api_key = "sk_test_..."
customer = await stripe . Customer . retrieve_async ( "cus_xyz" )
# .auto_paging_iter() implements both AsyncIterable and Iterable
async for c in await stripe . Customer . list_async (). auto_paging_iter ():
...
Tidak ada .save_async
karena .save
tidak digunakan lagi sejak stripe-python v5. Silakan bermigrasi ke .modify_async
.
Klien HTTP default menggunakan requests
untuk membuat permintaan sinkron tetapi httpx
untuk membuat permintaan asinkron. Jika Anda bermigrasi ke asinkron, kami menyarankan Anda menginisialisasi klien http Anda sendiri secara eksplisit dan meneruskannya ke StripeClient atau menyetelnya sebagai default global.
# By default, an explicitly initialized HTTPXClient will raise an exception if you
# attempt to call a sync method. If you intend to only use async, this is useful to
# make sure you don't unintentionally make a synchronous request.
my_http_client = stripe . HTTPXClient ()
# If you want to use httpx to make sync requests, you can disable this
# behavior.
my_http_client = stripe . HTTPXClient ( allow_sync_methods = True )
# aiohttp is also available (does not support sync requests)
my_http_client = stripe . AIOHTTPClient ()
# With StripeClient
client = StripeClient ( "sk_test_..." , http_client = my_http_client )
# With the global client
stripe . default_http_client = my_http_client
Anda juga dapat membuat subkelas stripe.HTTPClient
dan menyediakan instance Anda sendiri.
Fitur baru dan perbaikan bug dirilis pada versi utama terbaru dari pustaka Stripe Python. Jika Anda menggunakan versi utama yang lebih lama, kami menyarankan Anda meningkatkan ke versi terbaru untuk menggunakan fitur baru dan perbaikan bug termasuk untuk kerentanan keamanan. Versi utama paket yang lebih lama akan terus tersedia untuk digunakan, tetapi tidak akan menerima pembaruan apa pun.
Test suite bergantung pada stripe-mock, jadi pastikan untuk mengambil dan menjalankannya dari terminal latar belakang (README stripe-mock juga berisi instruksi untuk menginstal melalui Homebrew dan metode lainnya):
go install github.com/stripe/stripe-mock@latest
stripe-mock
Jalankan perintah berikut untuk menyiapkan virtualenv pengembangan:
make
Jalankan semua pengujian pada semua versi Python yang didukung:
make test
Jalankan semua pengujian untuk versi Python tertentu (ubah -e
sesuai dengan target Python Anda):
TOX_ARGS= " -e py37 " make test
Jalankan semua tes dalam satu file:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Jalankan satu rangkaian pengujian:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Jalankan satu tes:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Jalankan linter dengan:
make lint
Perpustakaan menggunakan Ruff untuk pemformatan kode. Kode harus diformat dengan Hitam sebelum PR dikirimkan, jika tidak, CI akan gagal. Jalankan pemformat dengan:
make fmt