La bibliothèque Stripe Python offre un accès pratique à l'API Stripe à partir d'applications écrites en langage Python. Il comprend un ensemble prédéfini de classes pour les ressources API qui s'initialisent dynamiquement à partir des réponses API, ce qui le rend compatible avec une large gamme de versions de l'API Stripe.
Consultez la documentation de l'API Python.
Regardez des démonstrations vidéo expliquant comment utiliser la bibliothèque.
Vous n'avez pas besoin de ce code source sauf si vous souhaitez modifier le package. Si vous souhaitez simplement utiliser le package, exécutez simplement :
pip install --upgrade stripe
Installer à partir des sources avec :
python setup.py install
La communauté Python Software Foundation (PSF) a annoncé la fin du support de Python 2 le 1er janvier 2020. À partir de la version 6.0.0, les packages Python Stripe SDK ne prendront plus en charge Python 2.7. Pour continuer à bénéficier de nouvelles fonctionnalités et de mises à jour de sécurité, assurez-vous de mettre à jour votre environnement d'exécution Python vers Python 3.6+.
La dernière version du SDK Stripe prenant en charge Python 2.7 est la 5.5.0.
La bibliothèque doit être configurée avec la clé secrète de votre compte qui est disponible dans votre tableau de bord Stripe. Définissez stripe.api_key
sur sa valeur :
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 )
Les demandes infructueuses génèrent des exceptions. La classe de l'exception reflétera le type d'erreur survenue. Veuillez consulter la référence API pour une description des classes d'erreurs que vous devez gérer et pour des informations sur la façon d'inspecter ces erreurs.
Configurez des requêtes individuelles avec l'argument options
. Par exemple, vous pouvez effectuer des demandes avec une version Stripe spécifique ou en tant que compte connecté :
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" ,
}
)
Vous pouvez configurer votre StripeClient
pour utiliser urlfetch
, requests
, pycurl
ou urllib2
avec l'option 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 ())
Sans client configuré, par défaut la bibliothèque tentera de charger les bibliothèques dans l'ordre ci-dessus (c'est-à-dire que urlfetch
est préféré avec urllib2
utilisé en dernier recours). Nous recommandons généralement aux gens d'utiliser requests
.
Un proxy peut être configuré avec l'option client proxy
:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Vous pouvez activer les tentatives automatiques sur les demandes qui échouent en raison d'un problème passager en configurant le nombre maximum de tentatives :
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Diverses erreurs peuvent déclencher une nouvelle tentative, comme une erreur de connexion ou un délai d'attente, ainsi que certaines réponses de l'API comme le statut HTTP 409 Conflict
.
Les clés d'idempotence sont automatiquement générées et ajoutées aux demandes, lorsqu'elles ne sont pas fournies, pour garantir la sécurité des tentatives.
La bibliothèque peut être configurée pour émettre une journalisation qui vous donnera un meilleur aperçu de ce qu'elle fait. Le niveau de journalisation info
est généralement le plus approprié pour une utilisation en production, mais debug
est également disponible pour plus de verbosité.
Il existe quelques options pour l'activer :
Définissez la variable d'environnement STRIPE_LOG
sur la valeur debug
ou info
$ export STRIPE_LOG=debug
Définir stripe.log
:
import stripe
stripe . log = 'debug'
Activez-le via le module de journalisation de Python :
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Vous pouvez accéder au code de réponse HTTP et aux en-têtes à l'aide de la propriété last_response
de la ressource renvoyée.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Si vous écrivez un plugin qui utilise la bibliothèque, nous apprécierions que vous vous identifiiez en utilisant stripe.set_app_info()
:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Ces informations sont transmises lorsque la bibliothèque appelle l'API Stripe.
Par défaut, la bibliothèque envoie des télémétries à Stripe concernant la latence des requêtes et l'utilisation des fonctionnalités. Ces chiffres aident Stripe à améliorer la latence globale de son API pour tous les utilisateurs et à améliorer les fonctionnalités populaires.
Vous pouvez désactiver ce comportement si vous préférez :
stripe . enable_telemetry = False
Dans la version 7.1.0 et les versions ultérieures, la bibliothèque inclut des annotations de type. Voir le wiki pour un guide détaillé.
Veuillez noter que certaines annotations utilisent des fonctionnalités qui n'ont été acceptées que assez récemment, comme Unpack[TypedDict]
qui a été acceptée en janvier 2023. Nous avons testé que ces types sont correctement reconnus par Pyright. La prise en charge de Unpack
dans MyPy est encore expérimentale, mais semble se dégrader progressivement. Veuillez signaler un problème si nous pouvons faire quelque chose pour améliorer les types du vérificateur de type de votre choix.
Nous publions les modifications de type dans des versions mineures. Alors que stripe-python suit le versioning sémantique, nos versions sémantiques décrivent uniquement le comportement d'exécution de la bibliothèque. Nos annotations de type ne sont pas reflétées dans la version sémantique . Autrement dit, la mise à niveau vers une nouvelle version mineure de stripe-python peut entraîner la production d'une erreur de type par votre vérificateur de type, ce qui n'était pas le cas auparavant. Vous pouvez utiliser un spécificateur de version ~=xx
ou xx*
dans votre requirements.txt
pour contraindre pip
à une certaine plage mineure de stripe-python
.
Les types décrivent la version de l'API Stripe qui était la plus récente au moment de la publication. Il s'agit de la version que votre bibliothèque envoie par défaut. Si vous remplacez stripe.api_version
/ stripe_version
sur StripeClient
ou si vous utilisez un point de terminaison de webhook lié à une ancienne version, sachez que les données que vous voyez au moment de l'exécution peuvent ne pas correspondre aux types.
Stripe propose des fonctionnalités en phase bêta accessibles via la version bêta de ce package. Nous serions ravis que vous les essayiez et partagiez vos commentaires avec nous avant que ces fonctionnalités n’atteignent la phase stable. Pour installer une version bêta, utilisez pip install
avec la version exacte que vous souhaitez utiliser :
pip install --pre stripe
Remarque Il peut y avoir des changements importants entre les versions bêta. Par conséquent, nous vous recommandons d'épingler la version du package sur une version bêta spécifique dans votre fichier d'exigences ou
setup.py
. De cette façon, vous pouvez installer la même version à chaque fois sans interrompre les modifications, sauf si vous recherchez intentionnellement la dernière version bêta.
Nous vous recommandons fortement de surveiller le moment où la fonctionnalité bêta qui vous intéresse passe de la version bêta à la version stable afin que vous puissiez passer de l'utilisation d'une version bêta du SDK à la version stable.
Si votre fonctionnalité bêta nécessite l'envoi d'un en-tête Stripe-Version
, définissez le champ stripe.api_version
à l'aide de la fonction stripe.add_beta_version
:
stripe . add_beta_version ( "feature_beta" , "v3" )
Si vous souhaitez envoyer une requête à une API non documentée (par exemple vous êtes dans une bêta privée), ou si vous préférez contourner les définitions de méthodes dans la bibliothèque et spécifier directement les détails de votre requête, vous pouvez utiliser la méthode raw_request
sur 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' )
Des versions asynchrones des méthodes de création de requêtes sont disponibles en suffixant le nom de la méthode avec _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 ():
...
Il n'y a pas de .save_async
car .save
est obsolète depuis stripe-python v5. Veuillez migrer vers .modify_async
.
Le client HTTP par défaut utilise requests
pour effectuer des requêtes synchrones mais httpx
pour effectuer des requêtes asynchrones. Si vous migrez vers asynchrone, nous vous recommandons d'initialiser explicitement votre propre client http et de le transmettre à StripeClient ou de le définir comme valeur globale par défaut.
# 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
Vous pouvez également sous-classer stripe.HTTPClient
et fournir votre propre instance.
De nouvelles fonctionnalités et corrections de bugs sont publiées sur la dernière version majeure de la bibliothèque Stripe Python. Si vous utilisez une ancienne version majeure, nous vous recommandons de mettre à niveau vers la dernière version afin d'utiliser les nouvelles fonctionnalités et corrections de bugs, y compris celles liées aux failles de sécurité. Les anciennes versions majeures du package continueront d’être disponibles, mais ne recevront aucune mise à jour.
La suite de tests dépend de stripe-mock, alors assurez-vous de la récupérer et de l'exécuter à partir d'un terminal en arrière-plan (le README de stripe-mock contient également des instructions pour l'installation via Homebrew et d'autres méthodes) :
go install github.com/stripe/stripe-mock@latest
stripe-mock
Exécutez la commande suivante pour configurer le virtualenv de développement :
make
Exécutez tous les tests sur toutes les versions de Python prises en charge :
make test
Exécutez tous les tests pour une version Python spécifique (modifiez -e
en fonction de votre cible Python) :
TOX_ARGS= " -e py37 " make test
Exécutez tous les tests dans un seul fichier :
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Exécutez une seule suite de tests :
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Exécutez un seul test :
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Exécutez le linter avec :
make lint
La bibliothèque utilise Ruff pour le formatage du code. Le code doit être formaté avec Black avant que les PR ne soient soumis, sinon CI échouera. Exécutez le formateur avec :
make fmt