La biblioteca Stripe Python proporciona un acceso conveniente a la API Stripe desde aplicaciones escritas en el lenguaje Python. Incluye un conjunto predefinido de clases para recursos API que se inicializan dinámicamente a partir de respuestas API, lo que lo hace compatible con una amplia gama de versiones de Stripe API.
Consulte los documentos de la API de Python.
Vea demostraciones en vídeo que cubren cómo utilizar la biblioteca.
No necesita este código fuente a menos que desee modificar el paquete. Si sólo desea utilizar el paquete, simplemente ejecute:
pip install --upgrade stripe
Instalar desde la fuente con:
python setup.py install
La comunidad Python Software Foundation (PSF) anunció el fin del soporte de Python 2 el 1 de enero de 2020. A partir de la versión 6.0.0, los paquetes Python del SDK de Stripe ya no admitirán Python 2.7. Para continuar obteniendo nuevas funciones y actualizaciones de seguridad, asegúrese de actualizar su tiempo de ejecución de Python a Python 3.6+.
La última versión del SDK de Stripe que admite Python 2.7 es la 5.5.0.
La biblioteca debe configurarse con la clave secreta de su cuenta que está disponible en su Panel de Stripe. Establezca stripe.api_key
en su valor:
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 )
Las solicitudes fallidas generan excepciones. La clase de excepción reflejará el tipo de error que ocurrió. Consulte la Referencia de API para obtener una descripción de las clases de error que debe manejar y para obtener información sobre cómo inspeccionar estos errores.
Configure solicitudes individuales con el argumento options
. Por ejemplo, puedes realizar solicitudes con una versión de Stripe específica o como una cuenta conectada:
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" ,
}
)
Puede configurar su StripeClient
para usar urlfetch
, requests
, pycurl
o urllib2
con la opción 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 ())
Sin un cliente configurado, de forma predeterminada la biblioteca intentará cargar las bibliotecas en el orden anterior (es decir, se prefiere urlfetch
y se usa urllib2
como último recurso). Generalmente recomendamos que las personas utilicen requests
.
Se puede configurar un proxy con la opción de cliente proxy
:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Puede habilitar los reintentos automáticos en solicitudes que fallan debido a un problema transitorio configurando el número máximo de reintentos:
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Varios errores pueden desencadenar un reintento, como un error de conexión o un tiempo de espera, y también ciertas respuestas de API como el estado HTTP 409 Conflict
.
Las claves de idempotencia se generan y agregan automáticamente a las solicitudes, cuando no se proporcionan, para garantizar que los reintentos sean seguros.
La biblioteca se puede configurar para emitir registros que le brindarán una mejor idea de lo que está haciendo. El nivel de registro info
suele ser el más apropiado para uso en producción, pero debug
también está disponible para mayor detalle.
Hay algunas opciones para habilitarlo:
Establezca la variable de entorno STRIPE_LOG
en el valor debug
o info
$ export STRIPE_LOG=debug
Establecer stripe.log
:
import stripe
stripe . log = 'debug'
Habilítelo a través del módulo de registro de Python:
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Puede acceder al código de respuesta HTTP y a los encabezados utilizando la propiedad last_response
del recurso devuelto.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Si está escribiendo un complemento que utiliza la biblioteca, le agradeceríamos que lo identificara usando stripe.set_app_info()
:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Esta información se transmite cuando la biblioteca realiza llamadas a la API de Stripe.
De forma predeterminada, la biblioteca envía telemetría a Stripe con respecto a la latencia de las solicitudes y el uso de funciones. Estos números ayudan a Stripe a mejorar la latencia general de su API para todos los usuarios y a mejorar las funciones populares.
Puede desactivar este comportamiento si lo prefiere:
stripe . enable_telemetry = False
En v7.1.0 y posteriores, la biblioteca incluye anotaciones de tipo. Consulte la wiki para obtener una guía detallada.
Tenga en cuenta que algunas anotaciones utilizan funciones que se aceptaron recientemente, como Unpack[TypedDict]
que se aceptó en enero de 2023. Hemos probado que Pyright reconoce correctamente estos tipos. La compatibilidad con Unpack
en MyPy aún es experimental, pero parece degradarse gradualmente. Informe un problema si hay algo que podamos hacer para mejorar los tipos del verificador de tipos que elija.
Publicamos cambios de tipo en versiones menores. Si bien stripe-python sigue el control de versiones semántico, nuestras versiones semánticas describen únicamente el comportamiento de ejecución de la biblioteca. Nuestras anotaciones de tipo no se reflejan en la versión semántica . Es decir, actualizar a una nueva versión menor de stripe-python podría provocar que su verificador de tipos produzca un error de tipo que no producía antes. Puede usar un especificador de versión ~=xx
o xx*
en su requirements.txt
para restringir pip
a un cierto rango menor de stripe-python
.
Los tipos describen la versión de la API de Stripe que era la más reciente en el momento del lanzamiento. Esta es la versión que su biblioteca envía por defecto. Si está anulando stripe.api_version
/ stripe_version
en StripeClient
, o está utilizando un punto final de webhook vinculado a una versión anterior, tenga en cuenta que los datos que ve en tiempo de ejecución pueden no coincidir con los tipos.
Stripe tiene funciones en la fase beta a las que se puede acceder a través de la versión beta de este paquete. Nos encantaría que las probara y compartiera sus comentarios con nosotros antes de que estas funciones lleguen a la fase estable. Para instalar una versión beta, use pip install
con la versión exacta que desea usar:
pip install --pre stripe
Nota Puede haber cambios importantes entre las versiones beta. Por lo tanto, recomendamos fijar la versión del paquete a una versión beta específica en su archivo de requisitos o
setup.py
. De esta manera, puede instalar la misma versión cada vez sin cambios importantes, a menos que esté buscando intencionalmente la última versión beta.
Recomendamos encarecidamente estar atento a cuándo la función beta que le interesa pasa de beta a estable para que pueda pasar de utilizar una versión beta del SDK a la versión estable.
Si su función beta requiere que se envíe un encabezado Stripe-Version
, configure el campo stripe.api_version
usando la función stripe.add_beta_version
:
stripe . add_beta_version ( "feature_beta" , "v3" )
Si desea enviar una solicitud a una API no documentada (por ejemplo, si está en una versión beta privada), o si prefiere omitir las definiciones de métodos en la biblioteca y especificar los detalles de su solicitud directamente, puede usar el método raw_request
en 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' )
Las versiones asincrónicas de los métodos de realización de solicitudes están disponibles agregando el sufijo _async
al nombre del método.
# 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 ():
...
No hay .save_async
ya que .save
está en desuso desde stripe-python v5. Migre a .modify_async
.
El cliente HTTP predeterminado utiliza requests
para realizar solicitudes síncronas, pero httpx
para realizar solicitudes asíncronas. Si está migrando a asíncrono, le recomendamos inicializar explícitamente su propio cliente http y pasarlo a StripeClient o configurarlo como predeterminado 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
También puede crear una subclase de stripe.HTTPClient
y proporcionar su propia instancia.
Se publican nuevas funciones y correcciones de errores en la última versión principal de la biblioteca Stripe Python. Si tiene una versión principal anterior, le recomendamos que actualice a la última para poder utilizar las nuevas funciones y correcciones de errores, incluidas las de vulnerabilidades de seguridad. Las versiones principales más antiguas del paquete seguirán estando disponibles para su uso, pero no recibirán ninguna actualización.
El conjunto de pruebas depende de stripe-mock, así que asegúrese de buscarlo y ejecutarlo desde una terminal en segundo plano (el README de stripe-mock también contiene instrucciones para instalar a través de Homebrew y otros métodos):
go install github.com/stripe/stripe-mock@latest
stripe-mock
Ejecute el siguiente comando para configurar el entorno virtual de desarrollo:
make
Ejecute todas las pruebas en todas las versiones de Python compatibles:
make test
Ejecute todas las pruebas para una versión específica de Python (modifique -e
según su objetivo de Python):
TOX_ARGS= " -e py37 " make test
Ejecute todas las pruebas en un solo archivo:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Ejecute un único conjunto de pruebas:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Ejecute una sola prueba:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Ejecute el linter con:
make lint
La biblioteca utiliza Ruff para formatear el código. El código debe formatearse en negro antes de enviar los RP; de lo contrario, la CI fallará. Ejecute el formateador con:
make fmt