Библиотека Stripe Python обеспечивает удобный доступ к Stripe API из приложений, написанных на языке Python. Он включает в себя предопределенный набор классов для ресурсов API, которые динамически инициализируются на основе ответов API, что делает его совместимым с широким спектром версий Stripe API.
См. документацию по API Python.
Посмотрите видеодемонстрации, рассказывающие о том, как использовать библиотеку.
Вам не нужен этот исходный код, если вы не хотите изменить пакет. Если вы просто хотите использовать пакет, просто запустите:
pip install --upgrade stripe
Установить из исходников с помощью:
python setup.py install
Сообщество Python Software Foundation (PSF) объявило об окончании поддержки Python 2 1 января 2020 года. Начиная с версии 6.0.0 пакеты Python Stripe SDK больше не будут поддерживать Python 2.7. Чтобы продолжать получать новые функции и обновления безопасности, обязательно обновите среду выполнения Python до Python 3.6+.
Последняя версия Stripe SDK, поддерживающая Python 2.7, — 5.5.0.
Библиотеку необходимо настроить с использованием секретного ключа вашей учетной записи, который доступен на панели инструментов Stripe. Установите для stripe.api_key
значение:
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 )
Неудачные запросы вызывают исключения. Класс исключения будет отражать тип произошедшей ошибки. См. Справочник по API для описания классов ошибок, которые следует обрабатывать, а также для получения информации о том, как проверять эти ошибки.
Настройте отдельные запросы с помощью аргумента options
. Например, вы можете отправлять запросы с определенной версией Stripe или с подключенной учетной записью:
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" ,
}
)
Вы можете настроить свой StripeClient
на использование urlfetch
, requests
, pycurl
или urllib2
с помощью опции 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 ())
Без настроенного клиента по умолчанию библиотека попытается загрузить библиотеки в указанном выше порядке (т. е. urlfetch
предпочтительнее, а urllib2
используется в крайнем случае). Обычно мы рекомендуем людям использовать requests
.
Прокси-сервер можно настроить с помощью опции proxy
клиента:
client = StripeClient ( "sk_test_..." , proxy = "https://user:[email protected]:1234" )
Вы можете включить автоматические повторы для запросов, которые завершаются сбоем из-за временной проблемы, настроив максимальное количество повторов:
client = StripeClient ( "sk_test_..." , max_network_retries = 2 )
Различные ошибки могут вызвать повторную попытку, например ошибка соединения или тайм-аут, а также определенные ответы API, такие как статус HTTP 409 Conflict
.
Ключи идемпотентности автоматически генерируются и добавляются к запросам, если они не заданы, чтобы гарантировать безопасность повторных попыток.
Библиотеку можно настроить на ведение журнала, что позволит вам лучше понять, что она делает. Уровень регистрации info
обычно наиболее подходит для производственного использования, но для большей детализации также доступна debug
.
Есть несколько вариантов включения:
Установите для переменной среды STRIPE_LOG
значение debug
или info
$ export STRIPE_LOG=debug
Установите stripe.log
:
import stripe
stripe . log = 'debug'
Включите его через модуль журналирования Python:
import logging
logging . basicConfig ()
logging . getLogger ( 'stripe' ). setLevel ( logging . DEBUG )
Вы можете получить доступ к коду ответа HTTP и заголовкам, используя свойство last_response
возвращаемого ресурса.
customer = client . customers . retrieve (
"cus_123456789"
)
print ( customer . last_response . code )
print ( customer . last_response . headers )
Если вы пишете плагин, использующий эту библиотеку, мы будем признательны, если вы укажете это с помощью stripe.set_app_info()
:
stripe . set_app_info ( "MyAwesomePlugin" , version = "1.2.34" , url = "https://myawesomeplugin.info" )
Эта информация передается, когда библиотека выполняет вызовы API-интерфейса Stripe.
По умолчанию библиотека отправляет в Stripe телеметрию о задержке запроса и использовании функций. Эти цифры помогают Stripe снизить общую задержку API для всех пользователей и улучшить популярные функции.
Вы можете отключить это поведение, если хотите:
stripe . enable_telemetry = False
В версии 7.1.0 и более поздних версиях библиотека включает аннотации типов. Подробное руководство смотрите в вики.
Обратите внимание, что в некоторых аннотациях используются функции, которые были приняты совсем недавно, например Unpack[TypedDict]
, который был принят в январе 2023 года. Мы проверили, что эти типы правильно распознаются Pyright. Поддержка Unpack
в MyPy все еще находится на экспериментальной стадии, но, похоже, постепенно ухудшается. Пожалуйста, сообщите о проблеме, если мы можем что-то сделать, чтобы улучшить типы для выбранной вами программы проверки типов.
Мы публикуем изменения типов в второстепенных выпусках. Хотя в Stripe-Python используется семантическое управление версиями, наши семантические версии описывают только поведение библиотеки во время выполнения . Наши аннотации типов не отражены в семантической версии . То есть обновление до новой дополнительной версии Stripe-Python может привести к тому, что ваша программа проверки типов выдаст ошибку типа, которой раньше не было. Вы можете использовать спецификатор версии ~=xx
или xx*
в файле requirements.txt
, чтобы ограничить pip
определенным небольшим диапазоном stripe-python
.
Типы описывают версию Stripe API, которая была последней на момент выпуска. Это версия, которую ваша библиотека отправляет по умолчанию. Если вы переопределяете stripe.api_version
/ stripe_version
в StripeClient
или используете конечную точку веб-перехватчика, привязанную к более старой версии, имейте в виду, что данные, которые вы видите во время выполнения, могут не соответствовать типам.
У Stripe есть функции, находящиеся на стадии бета-тестирования, доступ к которым можно получить через бета-версию этого пакета. Мы будем рады, если вы опробуете их и поделитесь с нами отзывом, прежде чем эти функции выйдут на стабильную фазу. Чтобы установить бета-версию, используйте pip install
с точной версией, которую вы хотите использовать:
pip install --pre stripe
Примечание. Между бета-версиями могут быть критические изменения. Поэтому мы рекомендуем привязать версию пакета к конкретной бета-версии в файле требований или в файле
setup.py
. Таким образом, вы можете каждый раз устанавливать одну и ту же версию, не нарушая изменений, если только вы намеренно не ищете последнюю бета-версию.
Мы настоятельно рекомендуем следить за тем, когда интересующая вас бета-функция переходит из бета-версии в стабильную, чтобы вы могли перейти от использования бета-версии SDK к стабильной версии.
Если ваша бета-функция требует отправки заголовка Stripe-Version
, установите поле stripe.api_version
с помощью функции stripe.add_beta_version
:
stripe . add_beta_version ( "feature_beta" , "v3" )
Если вы хотите отправить запрос к недокументированному API (например, вы находитесь в закрытой бета-версии) или предпочитаете обойти определения методов в библиотеке и указать детали вашего запроса напрямую, вы можете использовать метод raw_request
в 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' )
Асинхронные версии методов выполнения запросов доступны путем добавления к имени метода суффикса _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 ():
...
.save_async
отсутствует, поскольку .save
устарел с версии Stripe-Python v5. Пожалуйста, перейдите на .modify_async
.
HTTP-клиент по умолчанию использует requests
для выполнения синхронных запросов, а httpx
— для выполнения асинхронных запросов. Если вы переходите на асинхронный режим, мы рекомендуем вам явно инициализировать собственный HTTP-клиент и передать его в StripeClient или установить его как глобальный клиент по умолчанию.
# 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
Вы также можете создать подкласс stripe.HTTPClient
и предоставить свой собственный экземпляр.
В последней основной версии библиотеки Stripe Python выпущены новые функции и исправлены ошибки. Если вы используете более старую основную версию, мы рекомендуем вам выполнить обновление до последней, чтобы использовать новые функции и исправления ошибок, в том числе уязвимостей безопасности. Старые основные версии пакета по-прежнему будут доступны для использования, но не будут получать никаких обновлений.
Набор тестов зависит от Stripe-mock, поэтому обязательно скачайте и запустите его с фонового терминала (README Stripe-mock также содержит инструкции по установке через Homebrew и другие методы):
go install github.com/stripe/stripe-mock@latest
stripe-mock
Запустите следующую команду, чтобы настроить виртуальную среду разработки:
make
Запустите все тесты на всех поддерживаемых версиях Python:
make test
Запустите все тесты для конкретной версии Python (измените -e
в соответствии с вашей целью Python):
TOX_ARGS= " -e py37 " make test
Запустите все тесты в одном файле:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py " make test
Запустите один набор тестов:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource " make test
Запустите один тест:
TOX_ARGS= " -e py37 -- tests/api_resources/abstract/test_updateable_api_resource.py::TestUpdateableAPIResource::test_save " make test
Запустите линтер командой:
make lint
Библиотека использует Ruff для форматирования кода. Код должен быть отформатирован в Black перед отправкой PR, иначе CI не удастся. Запустите форматтер с помощью:
make fmt