Die Stripe-Python-Bibliothek bietet bequemen Zugriff auf die Stripe-API aus Anwendungen, die in der Python-Sprache geschrieben sind. Es enthält einen vordefinierten Satz von Klassen für API-Ressourcen, die sich dynamisch anhand von API-Antworten initialisieren, wodurch es mit einer Vielzahl von Versionen der Stripe-API kompatibel ist.
Weitere Informationen finden Sie in den Python-API-Dokumenten.
Sehen Sie sich Videodemonstrationen zur Nutzung der Bibliothek an.
Sie benötigen diesen Quellcode nicht, es sei denn, Sie möchten das Paket ändern. Wenn Sie das Paket nur verwenden möchten, führen Sie einfach Folgendes aus:
pip install --upgrade stripe
Von der Quelle installieren mit:
python setup.py install
Die Python Software Foundation (PSF)-Community gab das Ende der Unterstützung von Python 2 am 1. Januar 2020 bekannt. Ab Version 6.0.0 des Stripe SDK unterstützen Python-Pakete Python 2.7 nicht mehr. Um weiterhin neue Funktionen und Sicherheitsupdates zu erhalten, aktualisieren Sie bitte Ihre Python-Laufzeitumgebung auf Python 3.6+.
Die letzte Version des Stripe SDK, die Python 2.7 unterstützt, ist 5.5.0.
Die Bibliothek muss mit dem geheimen Schlüssel Ihres Kontos konfiguriert werden, der in Ihrem Stripe-Dashboard verfügbar ist. Setzen Sie stripe.api_key
auf seinen Wert:
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 )
Nicht erfolgreiche Anfragen lösen Ausnahmen aus. Die Klasse der Ausnahme spiegelt die Art des aufgetretenen Fehlers wider. Eine Beschreibung der Fehlerklassen, die Sie behandeln sollten, sowie Informationen zur Untersuchung dieser Fehler finden Sie in der API-Referenz.
Konfigurieren Sie einzelne Anfragen mit dem options
. Sie können beispielsweise Anfragen mit einer bestimmten Stripe-Version oder als verbundenes Konto stellen:
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" ,
}
)
Sie können Ihren StripeClient
so konfigurieren, dass er urlfetch
, requests
, pycurl
oder urllib2
mit der Option http_client
verwendet:
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 ())
Ohne einen konfigurierten Client versucht die Bibliothek standardmäßig, Bibliotheken in der oben genannten Reihenfolge zu laden (dh urlfetch
wird bevorzugt und urllib2
wird als letzter Ausweg verwendet). Normalerweise empfehlen wir die Verwendung requests
.
Ein Proxy kann mit der proxy
Client-Option konfiguriert werden:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Sie können automatische Wiederholungsversuche für Anfragen aktivieren, die aufgrund eines vorübergehenden Problems fehlschlagen, indem Sie die maximale Anzahl von Wiederholungsversuchen konfigurieren:
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Verschiedene Fehler können einen erneuten Versuch auslösen, etwa ein Verbindungsfehler oder eine Zeitüberschreitung, aber auch bestimmte API-Antworten wie HTTP-Status 409 Conflict
.
Idempotenzschlüssel werden automatisch generiert und den Anforderungen hinzugefügt, wenn sie nicht angegeben werden, um sicherzustellen, dass Wiederholungsversuche sicher sind.
Die Bibliothek kann so konfiguriert werden, dass sie eine Protokollierung ausgibt, die Ihnen einen besseren Einblick in ihre Aktivitäten gibt. Die info
eignet sich normalerweise am besten für den Produktionseinsatz, für mehr Ausführlichkeit ist jedoch auch debug
verfügbar.
Es gibt einige Möglichkeiten, es zu aktivieren:
Setzen Sie die Umgebungsvariable STRIPE_LOG
auf den Wert debug
oder info
$ export STRIPE_LOG=debug
stripe.log
festlegen:
import stripe
stripe . log = 'debug'
Aktivieren Sie es über das Protokollierungsmodul von Python:
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Sie können über die last_response
Eigenschaft der zurückgegebenen Ressource auf den HTTP-Antwortcode und die Header zugreifen.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Wenn Sie ein Plugin schreiben, das die Bibliothek verwendet, würden wir uns freuen, wenn Sie die Verwendung von stripe.set_app_info()
identifizieren würden:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Diese Informationen werden weitergegeben, wenn die Bibliothek Aufrufe an die Stripe-API durchführt.
Standardmäßig sendet die Bibliothek Telemetriedaten zur Anforderungslatenz und Funktionsnutzung an Stripe. Diese Zahlen helfen Stripe, die Gesamtlatenz seiner API für alle Benutzer zu verbessern und beliebte Funktionen zu verbessern.
Sie können dieses Verhalten bei Bedarf deaktivieren:
stripe . enable_telemetry = False
In Version 7.1.0 und höher enthält die Bibliothek Typanmerkungen. Eine ausführliche Anleitung finden Sie im Wiki.
Bitte beachten Sie, dass einige Annotationen Funktionen verwenden, die erst vor relativ kurzer Zeit akzeptiert wurden, wie z. B. Unpack[TypedDict]
das im Januar 2023 akzeptiert wurde. Wir haben getestet, dass diese Typen von Pyright ordnungsgemäß erkannt werden. Die Unterstützung für Unpack
in MyPy ist noch experimentell, scheint sich jedoch allmählich zu verschlechtern. Bitte melden Sie ein Problem, wenn wir etwas tun können, um die Typen für den Typprüfer Ihrer Wahl zu verbessern.
Wir veröffentlichen Typänderungen in Nebenversionen. Während Stripe-Python der semantischen Versionierung folgt, beschreiben unsere semantischen Versionen ausschließlich das Laufzeitverhalten der Bibliothek. Unsere Typanmerkungen spiegeln sich nicht in der semantischen Version wider . Das heißt, ein Upgrade auf eine neue Nebenversion von Stripe-Python kann dazu führen, dass Ihr Typprüfer einen Typfehler erzeugt, der zuvor nicht aufgetreten ist. Sie können in Ihrer requirements.txt
-Datei einen Versionsbezeichner ~=xx
oder xx*
verwenden, um pip
auf einen bestimmten kleineren Bereich von stripe-python
zu beschränken.
Die Typen beschreiben die Stripe-API-Version, die zum Zeitpunkt der Veröffentlichung aktuell war. Dies ist die Version, die Ihre Bibliothek standardmäßig sendet. Wenn Sie stripe.api_version
/ stripe_version
auf dem StripeClient
überschreiben oder einen Webhook-Endpunkt verwenden, der an eine ältere Version gebunden ist, beachten Sie, dass die Daten, die Sie zur Laufzeit sehen, möglicherweise nicht mit den Typen übereinstimmen.
Stripe verfügt über Funktionen in der Beta-Phase, auf die über die Beta-Version dieses Pakets zugegriffen werden kann. Wir würden uns freuen, wenn Sie diese ausprobieren und Ihr Feedback mit uns teilen, bevor diese Funktionen die stabile Phase erreichen. Um eine Betaversion zu installieren, verwenden Sie pip install
mit der genauen Version, die Sie verwenden möchten:
pip install --pre stripe
Hinweis: Zwischen den Betaversionen kann es zu wichtigen Änderungen kommen. Daher empfehlen wir, die Paketversion in Ihrer Anforderungsdatei oder in
setup.py
an eine bestimmte Betaversion anzuheften. Auf diese Weise können Sie jedes Mal dieselbe Version installieren, ohne Änderungen vorzunehmen, es sei denn, Sie suchen absichtlich nach der neuesten Beta-Version.
Wir empfehlen dringend, im Auge zu behalten, wann die Beta-Funktion, an der Sie interessiert sind, von der Beta-Version zur stabilen Version wechselt, damit Sie von der Verwendung einer Beta-Version des SDK zur stabilen Version wechseln können.
Wenn Ihre Beta-Funktion das Senden eines Stripe-Version
Headers erfordert, legen Sie das Feld stripe.api_version
mithilfe der Funktion stripe.add_beta_version
fest:
stripe . add_beta_version ( "feature_beta" , "v3" )
Wenn Sie eine Anfrage an eine undokumentierte API senden möchten (wenn Sie sich beispielsweise in einer privaten Betaversion befinden) oder die Methodendefinitionen in der Bibliothek lieber umgehen und Ihre Anfragedetails direkt angeben möchten, können Sie die Methode raw_request
auf StripeClient
verwenden .
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' )
Asynchrone Versionen von Methoden zur Anforderungserstellung sind verfügbar, indem dem Methodennamen _async
angehängt wird.
# 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 ():
...
Es gibt kein .save_async
, da .save
seit Stripe-Python v5 veraltet ist. Bitte migrieren Sie zu .modify_async
.
Der Standard-HTTP-Client verwendet requests
für synchrone Anfragen, httpx
jedoch für asynchrone Anfragen. Wenn Sie zu Async migrieren, empfehlen wir Ihnen, Ihren eigenen HTTP-Client explizit zu initialisieren und ihn an StripeClient zu übergeben oder ihn als globalen Standard festzulegen.
# 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
Sie können auch eine Unterklasse stripe.HTTPClient
erstellen und Ihre eigene Instanz bereitstellen.
In der neuesten Hauptversion der Stripe-Python-Bibliothek werden neue Funktionen und Fehlerbehebungen veröffentlicht. Wenn Sie eine ältere Hauptversion verwenden, empfehlen wir Ihnen, auf die neueste Version zu aktualisieren, um die neuen Funktionen und Fehlerbehebungen, einschließlich derer für Sicherheitslücken, nutzen zu können. Ältere Hauptversionen des Pakets stehen weiterhin zur Nutzung zur Verfügung, erhalten jedoch keine Updates.
Die Testsuite hängt von Stripe-Mock ab. Stellen Sie daher sicher, dass Sie sie von einem Hintergrundterminal abrufen und ausführen (die README-Datei von Stripe-Mock enthält auch Anweisungen für die Installation über Homebrew und andere Methoden):
go install github.com/stripe/stripe-mock@latest
stripe-mock
Führen Sie den folgenden Befehl aus, um die virtuelle Entwicklungsumgebung einzurichten:
make
Führen Sie alle Tests auf allen unterstützten Python-Versionen aus:
make test
Führen Sie alle Tests für eine bestimmte Python-Version aus (ändern Sie -e
entsprechend Ihrem Python-Ziel):
TOX_ARGS= " -e py37 " make test
Führen Sie alle Tests in einer einzigen Datei aus:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Führen Sie eine einzelne Testsuite aus:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Führen Sie einen einzelnen Test durch:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Führen Sie den Linter aus mit:
make lint
Die Bibliothek verwendet Ruff zur Codeformatierung. Der Code muss mit Schwarz formatiert werden, bevor PRs übermittelt werden, andernfalls schlägt CI fehl. Führen Sie den Formatierer aus mit:
make fmt