A biblioteca Stripe Python fornece acesso conveniente à API Stripe a partir de aplicativos escritos na linguagem Python. Inclui um conjunto predefinido de classes para recursos de API que se inicializam dinamicamente a partir de respostas de API, o que o torna compatível com uma ampla variedade de versões da API Stripe.
Consulte a documentação da API Python.
Veja demonstrações em vídeo sobre como usar a biblioteca.
Você não precisa deste código-fonte, a menos que queira modificar o pacote. Se você quiser apenas usar o pacote, basta executar:
pip install --upgrade stripe
Instale da fonte com:
python setup.py install
A comunidade Python Software Foundation (PSF) anunciou o fim do suporte ao Python 2 em 1º de janeiro de 2020. A partir da versão 6.0.0, os pacotes Stripe SDK Python não oferecerão mais suporte ao Python 2.7. Para continuar a obter novos recursos e atualizações de segurança, atualize seu tempo de execução do Python para Python 3.6+.
A última versão do Stripe SDK compatível com Python 2.7 é 5.5.0.
A biblioteca precisa ser configurada com a chave secreta da sua conta, que está disponível no Stripe Dashboard. Defina stripe.api_key
com seu 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 )
Solicitações malsucedidas geram exceções. A classe da exceção refletirá o tipo de erro que ocorreu. Consulte a Referência da API para obter uma descrição das classes de erro que você deve tratar e para obter informações sobre como inspecionar esses erros.
Configure solicitações individuais com o argumento options
. Por exemplo, você pode fazer solicitações com uma versão específica do Stripe ou como uma conta 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" ,
}
)
Você pode configurar seu StripeClient
para usar urlfetch
, requests
, pycurl
ou urllib2
com a opção 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 ())
Sem um cliente configurado, por padrão a biblioteca tentará carregar bibliotecas na ordem acima (ou seja, urlfetch
é preferido com urllib2
usado como último recurso). Geralmente recomendamos que as pessoas usem requests
.
Um proxy pode ser configurado com a opção de cliente proxy
:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Você pode ativar novas tentativas automáticas em solicitações que falham devido a um problema transitório configurando o número máximo de novas tentativas:
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Vários erros podem desencadear uma nova tentativa, como um erro de conexão ou um tempo limite, e também certas respostas da API, como HTTP status 409 Conflict
.
As chaves de idempotência são geradas automaticamente e adicionadas às solicitações, quando não fornecidas, para garantir que as novas tentativas sejam seguras.
A biblioteca pode ser configurada para emitir registros que lhe darão uma visão melhor do que está fazendo. O nível de registro info
geralmente é mais apropriado para uso em produção, mas debug
também está disponível para maior detalhamento.
Existem algumas opções para habilitá-lo:
Defina a variável de ambiente STRIPE_LOG
com o valor debug
ou info
$ export STRIPE_LOG=debug
Definir stripe.log
:
import stripe
stripe . log = 'debug'
Habilite-o através do módulo de registro do Python:
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Você pode acessar o código de resposta HTTP e os cabeçalhos usando a propriedade last_response
do recurso retornado.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Se você estiver escrevendo um plugin que usa a biblioteca, agradeceríamos se você se identificasse usando stripe.set_app_info()
:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Essas informações são repassadas quando a biblioteca faz chamadas para a API Stripe.
Por padrão, a biblioteca envia telemetria ao Stripe em relação à latência da solicitação e ao uso de recursos. Esses números ajudam o Stripe a melhorar a latência geral de sua API para todos os usuários e a melhorar recursos populares.
Você pode desativar esse comportamento se preferir:
stripe . enable_telemetry = False
Na versão 7.1.0 e mais recente, a biblioteca inclui anotações de tipo. Veja o wiki para um guia detalhado.
Observe que algumas anotações usam recursos que foram aceitos apenas recentemente, como Unpack[TypedDict]
que foi aceito em janeiro de 2023. Testamos se esses tipos são reconhecidos corretamente pelo Pyright. O suporte para Unpack
no MyPy ainda é experimental, mas parece degradar normalmente. Relate um problema se houver algo que possamos fazer para melhorar os tipos do verificador de tipo de sua escolha.
Lançamos alterações de tipo em versões secundárias. Embora stripe-python siga o versionamento semântico, nossas versões semânticas descrevem apenas o comportamento de tempo de execução da biblioteca. Nossas anotações de tipo não são refletidas na versão semântica . Ou seja, atualizar para uma nova versão secundária do stripe-python pode fazer com que seu verificador de tipo produza um erro de tipo que não acontecia antes. Você pode usar um especificador de versão ~=xx
ou xx*
em seu requirements.txt
para restringir pip
a um determinado intervalo menor de stripe-python
.
Os tipos descrevem a versão da API Stripe mais recente no momento do lançamento. Esta é a versão que sua biblioteca envia por padrão. Se você estiver substituindo stripe.api_version
/ stripe_version
no StripeClient
ou usando um endpoint de webhook vinculado a uma versão mais antiga, esteja ciente de que os dados que você vê em tempo de execução podem não corresponder aos tipos.
Stripe possui recursos em fase beta que podem ser acessados por meio da versão beta deste pacote. Adoraríamos que você experimentasse e compartilhasse seus comentários conosco antes que esses recursos cheguem à fase estável. Para instalar uma versão beta, use pip install
com a versão exata que você deseja usar:
pip install --pre stripe
Nota Pode haver alterações significativas entre as versões beta. Portanto, recomendamos fixar a versão do pacote em uma versão beta específica em seu arquivo de requisitos ou
setup.py
. Dessa forma, você pode instalar a mesma versão sempre sem interromper as alterações, a menos que esteja procurando intencionalmente pela versão beta mais recente.
É altamente recomendável ficar atento quando o recurso beta no qual você está interessado passa de beta para estável, para que você possa passar de uma versão beta do SDK para a versão estável.
Se o seu recurso beta exigir o envio de um cabeçalho Stripe-Version
, defina o campo stripe.api_version
usando a função stripe.add_beta_version
:
stripe . add_beta_version ( "feature_beta" , "v3" )
Se você quiser enviar uma solicitação para uma API não documentada (por exemplo, você está em uma versão beta privada) ou se preferir ignorar as definições de método na biblioteca e especificar os detalhes da sua solicitação diretamente, você pode usar o método raw_request
no 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' )
Versões assíncronas de métodos de solicitação estão disponíveis com o sufixo _async
do nome do 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 ():
...
Não há .save_async
, pois .save
está obsoleto desde stripe-python v5. Migre para .modify_async
.
O cliente HTTP padrão usa requests
para fazer solicitações síncronas, mas httpx
para fazer solicitações assíncronas. Se você estiver migrando para o assíncrono, recomendamos inicializar explicitamente seu próprio cliente http e passá-lo para StripeClient ou defini-lo como padrão 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
Você também pode subclassificar stripe.HTTPClient
e fornecer sua própria instância.
Novos recursos e correções de bugs foram lançados na versão principal mais recente da biblioteca Stripe Python. Se você estiver usando uma versão principal mais antiga, recomendamos que você atualize para a mais recente para usar os novos recursos e correções de bugs, incluindo aqueles para vulnerabilidades de segurança. As versões principais mais antigas do pacote continuarão disponíveis para uso, mas não receberão nenhuma atualização.
O conjunto de testes depende do stripe-mock, então certifique-se de buscá-lo e executá-lo em um terminal em segundo plano (o README do stripe-mock também contém instruções para instalação via Homebrew e outros métodos):
go install github.com/stripe/stripe-mock@latest
stripe-mock
Execute o seguinte comando para configurar o virtualenv de desenvolvimento:
make
Execute todos os testes em todas as versões suportadas do Python:
make test
Execute todos os testes para uma versão específica do Python (modifique -e
de acordo com seu destino do Python):
TOX_ARGS= " -e py37 " make test
Execute todos os testes em um único arquivo:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Execute um único conjunto de testes:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Execute um único teste:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Execute o linter com:
make lint
A biblioteca usa Ruff para formatação de código. O código deve ser formatado com Black antes do envio dos PRs, caso contrário, o CI falhará. Execute o formatador com:
make fmt