-
Notifications
You must be signed in to change notification settings - Fork 460
Migration guide for v8 (StripeClient)
"
Introduces StripeClient and the service-based call pattern. This new interface allows you to easily call Stripe APIs and has several benefits over the existing resource-based pattern:
- No global config: you can simultaneously use multiple clients with different configuration options (such as API keys)
- No static methods for easier mocking
While there are no plans yet to completely remove the previous resource-based call pattern, it will be deprecated soon and new API endpoints will be supported only in the new pattern. We strongly recommend migrating to the new service-based pattern as you begin to use new APIs. This will help you avoid mixing the two patterns in your integration, which can lead to confusion as you maintain your code.
To migrate from a resource-based to service-based pattern:
-
Initialize a
StripeClientinstance.Before
stripe.api_key = "sk_test_123"
After
client = stripe.StripeClient("sk_test_123")
You can also pass in previously configurable global options as keyword arguments into the
StripeClientconstructor:Before
stripe.api_key = "sk_test_123" stripe.api_version = "2022-11-15" stripe.max_network_retries = 3 stripe.proxy = "https://user:pass@example.com:1234"
After
client = stripe.StripeClient( "sk_test_123", stripe_version="2022-11-15", max_network_retries=3, proxy="https://user:pass@example.com:1234", )
-
Convert resource method calls to
StripeClientcalls. On resource-based calls, request parameters and request options were each individually passed in as a mix of positional and keyword arguments. But for service-base calls, request parameters and request options are passed in as separate dictionary arguments.Before
customer = stripe.Customer.create(email="jenny.rosen@example.com", stripe_account="acct_123")
After
customer = client.customers.create(params={"email": "jenny.rosen@example.com"}, options={"stripe_account": "acct_123"})
-
When using one of our Update APIs, the StripeClient version is called
update()instead ofmodify()Before
customer = stripe.Customer.modify( "cus_123", description="new description", )
After
customer = client.customers.update( "cus_123", params={ "description": "new description", } )
-
Convert nested resource operations to
StripeClientcalls. As with class and instance calls, request parameters and request options become separate dictionary arguments in the service-based pattern.Before
stripe.Customer.list_balance_transactions( "cus_123", limit=3, stripe_version="2022-11-15", )
After
customer = client.customers.balance_transactions.list( "cus_123", params={"limit": 3}, options={"stripe_version": "2022-11-15"}, );
-
To construct a webhook event, use the
StripeClient.construct_event()method:Before
event = stripe.Webhook.construct_event( payload, sig_header, secret )
After
event = client.construct_event( payload, sig_header, secret )
"
⚠️ Request options likeapi_key,stripe_account,stripe_version, andidempotency_keycan no longer be passed in positionally on resource methods. Please pass these in as keyword arguments.
BEFORE
stripe.Customer.create(
"sk_test_123", # api key
"KG5LxwFBepaKHyUD", # idempotency key
"2022-11-15", # stripe version
"acct_123", # stripe account
)AFTER
stripe.Customer.create(
api_key="sk_test_123",
idempotency_key="KG5LxwFBepaKHyUD",
stripe_version="2022-11-15",
stripe_account="acct_123",
)⚠️ Methods that turn a response stream (Quote.pdf) now returns a single value of typeStripeResponseStreaminstead of a tuple containing(StripeResponseStream, api_key).⚠️ Removed public access toAPIRequestor.APIRequestor's main use is internal, and we don't have a good understanding of its external use cases. We had to make several breaking changes to its interface as part of this update, so rather than leaving it public we made it private. If you have a use case forAPIRequestor, please open up a Github issue describing it. We'd rather you rely on something specifically designed for your use case than having to reach into the library's internals.
⚠️ Removeapi_versionfromFile.createparameters. Please usestripe_versioninstead.⚠️ Removeutil.read_special_variable()utility method (importing directly fromstripe.utilis deprecated as of v7.8.0)⚠️ RemoveStripeError.construct_error_object(). This method was intended for internal stripe-python use only.⚠️ RemoveListObject.empty_list(). This method was intended for internal stripe-python use only.⚠️ RemoveSearchResultObject.empty_search_result(). This method was intended for internal stripe-python use only.⚠️ RemoveStripeObject.ReprJSONEncoder. This class was intended for internal stripe-python use only.⚠️ RemoveStripeObject.api_base. This property was defunct and returnedNone.