Coverage for src/tests/test_donations.py: 100%
107 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-11-21 04:21 +0000
« prev ^ index » next coverage.py v7.5.0, created at 2024-11-21 04:21 +0000
1import json
2from unittest.mock import patch
4import pytest
5from google.protobuf import empty_pb2
7import couchers.servicers.donations
8from couchers.config import config
9from couchers.db import session_scope
10from couchers.jobs.handlers import update_badges
11from couchers.models import DonationInitiation, DonationType, Invoice, UserBadge
12from couchers.sql import couchers_select as select
13from proto import donations_pb2
14from proto.google.api import httpbody_pb2
15from tests.test_fixtures import db, donations_session, generate_user, real_stripe_session, testconfig # noqa
18@pytest.fixture(autouse=True)
19def _(testconfig):
20 pass
23def test_one_time_donation_flow(db, monkeypatch):
24 user, token = generate_user()
25 user_email = user.email
26 user_id = user.id
28 new_config = config.copy()
29 new_config["ENABLE_DONATIONS"] = True
30 new_config["STRIPE_API_KEY"] = "dummy_api_key"
31 new_config["STRIPE_WEBHOOK_SECRET"] = "dummy_webhook_secret"
32 new_config["STRIPE_RECURRING_PRODUCT_ID"] = "price_1KIbmbIfR5z29g5kFWPEUnC6"
34 monkeypatch.setattr(couchers.servicers.donations, "config", new_config)
36 ## User first makes a req to Donations.InitiateDonation
37 with donations_session(token) as donations:
38 with patch("couchers.servicers.donations.stripe") as mock:
39 mock.Customer.create.return_value = type("__MockCustomer", (), {"id": "cus_Pv4uq0gT0rDZWN"})
40 mock.checkout.Session.create.return_value = type("__MockCheckoutSession", (), one_time_STRIPE_SESSION)
42 res = donations.InitiateDonation(
43 donations_pb2.InitiateDonationReq(
44 amount=100,
45 recurring=False,
46 )
47 )
49 mock.Customer.create.assert_called_once_with(
50 email=user_email, metadata={"user_id": user_id}, api_key="dummy_api_key"
51 )
53 mock.checkout.Session.create.assert_called_once_with(
54 client_reference_id=user_id,
55 submit_type="donate",
56 customer="cus_Pv4uq0gT0rDZWN",
57 success_url="http://localhost:3000/donate?success=true",
58 cancel_url="http://localhost:3000/donate?cancelled=true",
59 payment_method_types=["card"],
60 mode="payment",
61 line_items=[
62 {
63 "price_data": {
64 "currency": "usd",
65 "unit_amount": 10000,
66 "product_data": {
67 "name": "Couchers financial supporter (one-time)",
68 "images": ["https://couchers.org/img/share.jpg"],
69 },
70 },
71 "quantity": 1,
72 }
73 ],
74 api_key="dummy_api_key",
75 )
77 ## Stripe then makes some webhooks requests
79 # evt_1P5EkZIfR5z29g5kRH0e4NVx:customer.created
80 fire_stripe_event("evt_1P5EkZIfR5z29g5kRH0e4NVx")
82 # evt_3P5El3IfR5z29g5k0TLWlfHq:charge.succeeded
83 fire_stripe_event("evt_3P5El3IfR5z29g5k0TLWlfHq")
85 # evt_1P5El5IfR5z29g5kNedLGqCz:checkout.session.completed
86 fire_stripe_event("evt_1P5El5IfR5z29g5kNedLGqCz")
88 # evt_3P5El3IfR5z29g5k0tueVWGH:payment_intent.succeeded
89 fire_stripe_event("evt_3P5El3IfR5z29g5k0tueVWGH")
91 # evt_3P5El3IfR5z29g5k0mFVJ2V7:payment_intent.created
92 fire_stripe_event("evt_3P5El3IfR5z29g5k0mFVJ2V7")
94 ## Now finally check everything was added to the DB
95 with session_scope() as session:
96 donation = session.execute(select(DonationInitiation)).scalar_one()
97 assert donation.user_id == user_id
98 assert donation.amount == 100
99 assert (
100 donation.stripe_checkout_session_id == "cs_test_a12ftevGwzCAa236NeLPq6yRAdMt0V2S1gGjFcxfsY4xT4tiREPvbr5lhG"
101 )
102 assert donation.donation_type == DonationType.one_time
104 invoice = session.execute(select(Invoice)).scalar_one()
105 assert invoice.user_id == user_id
106 assert invoice.amount == 100
107 assert invoice.stripe_payment_intent_id == "pi_3P5El3IfR5z29g5k0N5TNa7R"
108 assert (
109 invoice.stripe_receipt_url
110 == "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xS0V6QnlJZlI1ejI5ZzVrKIqF7LAGMgbtNxpJulk6LBaePNy_2Q2RzXJsbk7t1jLwK26AQlG05P-4EPhG7AIIcqsQLgC09iDJ2srs"
111 )
113 # check they get a badge
114 update_badges(empty_pb2.Empty())
115 with session_scope() as session:
116 assert (
117 session.execute(select(UserBadge).where(UserBadge.user_id == user_id, UserBadge.badge_id == "donor"))
118 .scalar_one()
119 .user_id
120 == user_id
121 )
124def test_recurring_donation_flow(db, monkeypatch):
125 user, token = generate_user()
126 user_email = user.email
127 user_id = user.id
129 new_config = config.copy()
130 new_config["ENABLE_DONATIONS"] = True
131 new_config["STRIPE_API_KEY"] = "dummy_api_key"
132 new_config["STRIPE_WEBHOOK_SECRET"] = "dummy_webhook_secret"
133 new_config["STRIPE_RECURRING_PRODUCT_ID"] = "price_1IRoHdE5kUmYuPWz9tX8UpRv"
135 monkeypatch.setattr(couchers.servicers.donations, "config", new_config)
137 ## User first makes a req to Donations.InitiateDonation
138 with donations_session(token) as donations:
139 with patch("couchers.servicers.donations.stripe") as mock:
140 mock.Customer.create.return_value = type("__MockCustomer", (), {"id": "cus_Pv4w8dxBpTVUsQ"})
141 mock.checkout.Session.create.return_value = type("__MockCheckoutSession", (), RECURRING_STRIPE_SESSION)
143 res = donations.InitiateDonation(
144 donations_pb2.InitiateDonationReq(
145 amount=25,
146 recurring=True,
147 )
148 )
150 mock.Customer.create.assert_called_once_with(
151 email=user_email, metadata={"user_id": user_id}, api_key="dummy_api_key"
152 )
154 mock.checkout.Session.create.assert_called_once_with(
155 client_reference_id=user_id,
156 customer="cus_Pv4w8dxBpTVUsQ",
157 submit_type=None,
158 success_url="http://localhost:3000/donate?success=true",
159 cancel_url="http://localhost:3000/donate?cancelled=true",
160 payment_method_types=["card"],
161 mode="subscription",
162 line_items=[
163 {
164 "price": "price_1IRoHdE5kUmYuPWz9tX8UpRv",
165 "quantity": 25,
166 }
167 ],
168 api_key="dummy_api_key",
169 )
171 ## Stripe then makes some webhooks requests
173 # evt_1P5EmWIfR5z29g5kdOMc8bxr: customer.created
174 fire_stripe_event("evt_1P5EmWIfR5z29g5kdOMc8bxr")
176 # evt_3P5EmzIfR5z29g5k0bA1H9Vg: charge.succeeded
177 fire_stripe_event("evt_3P5EmzIfR5z29g5k0bA1H9Vg")
179 # evt_1P5En1IfR5z29g5k89Az23Na: payment_method.attached
180 fire_stripe_event("evt_1P5En1IfR5z29g5k89Az23Na")
182 # evt_1P5En1IfR5z29g5kh279xFFB: customer.updated
183 fire_stripe_event("evt_1P5En1IfR5z29g5kh279xFFB")
185 # evt_1P5En2IfR5z29g5khvLimtc3: customer.subscription.created
186 fire_stripe_event("evt_1P5En2IfR5z29g5khvLimtc3")
188 # evt_1P5En2IfR5z29g5kQ3f7d9C6: customer.subscription.updated
189 fire_stripe_event("evt_1P5En2IfR5z29g5kQ3f7d9C6")
191 # evt_3P5EmzIfR5z29g5k0taFsMsl: payment_intent.succeeded
192 fire_stripe_event("evt_3P5EmzIfR5z29g5k0taFsMsl")
194 # evt_3P5EmzIfR5z29g5k0bxxQl9f: payment_intent.created
195 fire_stripe_event("evt_3P5EmzIfR5z29g5k0bxxQl9f")
197 # evt_1P5En2IfR5z29g5kQZBnH8bR: invoice.created
198 fire_stripe_event("evt_1P5En2IfR5z29g5kQZBnH8bR")
200 # evt_1P5En2IfR5z29g5kGrG7cxm7: invoice.finalized
201 fire_stripe_event("evt_1P5En2IfR5z29g5kGrG7cxm7")
203 # evt_1P5En3IfR5z29g5kRKYnPpgc: invoice.updated
204 fire_stripe_event("evt_1P5En3IfR5z29g5kRKYnPpgc")
206 # evt_1P5En3IfR5z29g5kXDrXUkQa: invoice.paid
207 fire_stripe_event("evt_1P5En3IfR5z29g5kXDrXUkQa")
209 # evt_1P5En3IfR5z29g5k3ElqoMso: invoice.payment_succeeded
210 fire_stripe_event("evt_1P5En3IfR5z29g5k3ElqoMso")
212 # evt_1P5En3IfR5z29g5kOoaABPf4: checkout.session.completed
213 fire_stripe_event("evt_1P5En3IfR5z29g5kOoaABPf4")
215 ## Now finally check everything was added to the DB
216 with session_scope() as session:
217 donation = session.execute(select(DonationInitiation)).scalar_one()
218 assert donation.user_id == user_id
219 assert donation.amount == 25
220 assert (
221 donation.stripe_checkout_session_id == "cs_test_a1JoMu1FbksL058ob6T6AC1byYR2DCXVRwi0ybLSZKwINYe868OQr25qaC"
222 )
223 assert donation.donation_type == DonationType.recurring
225 invoice = session.execute(select(Invoice)).scalar_one()
226 assert invoice.user_id == user_id
227 assert invoice.amount == 25
228 assert invoice.stripe_payment_intent_id == "pi_3P5EmzIfR5z29g5k0uVvI3kX"
229 assert (
230 invoice.stripe_receipt_url
231 == "https://pay.stripe.com/receipts/invoices/CAcaFwoVYWNjdF8xS0V6QnlJZlI1ejI5ZzVrKIOG7LAGMgYTBIebo2c6LBYFs4BgdV7T4S5nHXQyHt4uh5azZ3_ss_S2wi27m52wbg4yQAoirZ9eBhbH?s=ap"
232 )
234 # check they get a badge
235 update_badges(empty_pb2.Empty())
236 with session_scope() as session:
237 assert (
238 session.execute(select(UserBadge).where(UserBadge.user_id == user_id, UserBadge.badge_id == "donor"))
239 .scalar_one()
240 .user_id
241 == user_id
242 )
245def fire_stripe_event(event_id):
246 event = json.loads(STRIPE_WEBHOOK_EVENTS[event_id])
247 with real_stripe_session() as api:
248 with patch("couchers.servicers.donations.stripe") as mock:
249 mock.Webhook.construct_event.return_value = event
250 reply = api.Webhook(
251 httpbody_pb2.HttpBody(content_type="application/json", data=b"{}"),
252 metadata=(("stripe-signature", "dummy_sig"),),
253 )
254 mock.Webhook.construct_event.assert_called_once_with(
255 payload=b"{}", sig_header="dummy_sig", secret="dummy_webhook_secret", api_key="dummy_api_key"
256 )
259STRIPE_WEBHOOK_EVENTS = {
260 "evt_1P5EkZIfR5z29g5kRH0e4NVx": '{"id": "evt_1P5EkZIfR5z29g5kRH0e4NVx", "object": "event", "api_version": "2024-04-10", "created": 1713046123, "data": {"object": {"id": "cus_Pv4uq0gT0rDZWN", "object": "customer", "address": null, "balance": 0, "created": 1713046123, "currency": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "aapeli@couchers.org", "invoice_prefix": "1D722509", "invoice_settings": {"custom_fields": null, "default_payment_method": null, "footer": null, "rendering_options": null}, "livemode": false, "metadata": {"user_id": "1"}, "name": null, "next_invoice_sequence": 1, "phone": null, "preferred_locales": [], "shipping": null, "tax_exempt": "none", "test_clock": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_fmlaiE4CYTgEof", "idempotency_key": "8e902937-af49-4880-b3fa-6ccf88bc38ee"}, "type": "customer.created"}',
261 "evt_1P5El5IfR5z29g5kNedLGqCz": '{"id": "evt_1P5El5IfR5z29g5kNedLGqCz", "object": "event", "api_version": "2024-04-10", "created": 1713046154, "data": {"object": {"id": "cs_test_a12ftevGwzCAa236NeLPq6yRAdMt0V2S1gGjFcxfsY4xT4tiREPvbr5lhG", "object": "checkout.session", "after_expiration": null, "allow_promotion_codes": null, "amount_subtotal": 10000, "amount_total": 10000, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_address_collection": null, "cancel_url": "http://localhost:3000/donate?cancelled=true", "client_reference_id": "1", "client_secret": null, "consent": null, "consent_collection": null, "created": 1713046124, "currency": "usd", "currency_conversion": null, "custom_fields": [], "custom_text": {"after_submit": null, "shipping_address": null, "submit": null, "terms_of_service_acceptance": null}, "customer": "cus_Pv4uq0gT0rDZWN", "customer_creation": null, "customer_details": {"address": {"city": null, "country": "US", "line1": null, "line2": null, "postal_code": "10001", "state": null}, "email": "aapeli@couchers.org", "name": "Aapeli Vuorinen", "phone": null, "tax_exempt": "none", "tax_ids": []}, "customer_email": null, "expires_at": 1713132523, "invoice": null, "invoice_creation": {"enabled": false, "invoice_data": {"account_tax_ids": null, "custom_fields": null, "description": null, "footer": null, "issuer": null, "metadata": {}, "rendering_options": null}}, "livemode": false, "locale": null, "metadata": {}, "mode": "payment", "payment_intent": "pi_3P5El3IfR5z29g5k0N5TNa7R", "payment_link": null, "payment_method_collection": "if_required", "payment_method_configuration_details": null, "payment_method_options": {"card": {"request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "payment_status": "paid", "phone_number_collection": {"enabled": false}, "recovered_from": null, "setup_intent": null, "shipping_address_collection": null, "shipping_cost": null, "shipping_details": null, "shipping_options": [], "status": "complete", "submit_type": "donate", "subscription": null, "success_url": "http://localhost:3000/donate?success=true", "total_details": {"amount_discount": 0, "amount_shipping": 0, "amount_tax": 0}, "ui_mode": "hosted", "url": null}}, "livemode": false, "pending_webhooks": 3, "request": {"id": null, "idempotency_key": null}, "type": "checkout.session.completed"}',
262 "evt_1P5EmWIfR5z29g5kdOMc8bxr": '{"id": "evt_1P5EmWIfR5z29g5kdOMc8bxr", "object": "event", "api_version": "2024-04-10", "created": 1713046244, "data": {"object": {"id": "cus_Pv4w8dxBpTVUsQ", "object": "customer", "address": null, "balance": 0, "created": 1713046244, "currency": null, "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "aapeli@couchers.org", "invoice_prefix": "D86E702F", "invoice_settings": {"custom_fields": null, "default_payment_method": null, "footer": null, "rendering_options": null}, "livemode": false, "metadata": {"user_id": "1"}, "name": null, "next_invoice_sequence": 1, "phone": null, "preferred_locales": [], "shipping": null, "tax_exempt": "none", "test_clock": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_3k3Wk50uSmpv6d", "idempotency_key": "a6fc3ba9-0dfa-4f44-a556-4150e6c54922"}, "type": "customer.created"}',
263 "evt_1P5En1IfR5z29g5k89Az23Na": '{"id": "evt_1P5En1IfR5z29g5k89Az23Na", "object": "event", "api_version": "2024-04-10", "created": 1713046274, "data": {"object": {"id": "pm_1P5EmyIfR5z29g5kAIZoJcSv", "object": "payment_method", "billing_details": {"address": {"city": null, "country": "US", "line1": null, "line2": null, "postal_code": "10001", "state": null}, "email": "aapeli@couchers.org", "name": "Aapeli Vuorinen", "phone": null}, "card": {"brand": "visa", "checks": {"address_line1_check": null, "address_postal_code_check": "pass", "cvc_check": "pass"}, "country": "US", "display_brand": "visa", "exp_month": 12, "exp_year": 2050, "fingerprint": "2uVHwVtZ157kRjpi", "funding": "credit", "generated_from": null, "last4": "4242", "networks": {"available": ["visa"], "preferred": null}, "three_d_secure_usage": {"supported": true}, "wallet": null}, "created": 1713046272, "customer": "cus_Pv4w8dxBpTVUsQ", "livemode": false, "metadata": {}, "type": "card"}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "payment_method.attached"}',
264 "evt_1P5En1IfR5z29g5kh279xFFB": '{"id": "evt_1P5En1IfR5z29g5kh279xFFB", "object": "event", "api_version": "2024-04-10", "created": 1713046273, "data": {"object": {"id": "cus_Pv4w8dxBpTVUsQ", "object": "customer", "address": null, "balance": 0, "created": 1713046244, "currency": "usd", "default_source": null, "delinquent": false, "description": null, "discount": null, "email": "aapeli@couchers.org", "invoice_prefix": "D86E702F", "invoice_settings": {"custom_fields": null, "default_payment_method": null, "footer": null, "rendering_options": null}, "livemode": false, "metadata": {"user_id": "1"}, "name": null, "next_invoice_sequence": 2, "phone": null, "preferred_locales": [], "shipping": null, "tax_exempt": "none", "test_clock": null}, "previous_attributes": {"currency": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "customer.updated"}',
265 "evt_1P5En2IfR5z29g5kGrG7cxm7": '{"id": "evt_1P5En2IfR5z29g5kGrG7cxm7", "object": "event", "api_version": "2024-04-10", "created": 1713046273, "data": {"object": {"id": "in_1P5EmzIfR5z29g5kNwA5fIXq", "object": "invoice", "account_country": "US", "account_name": "Couchers, Inc.", "account_tax_ids": null, "amount_due": 2500, "amount_paid": 0, "amount_remaining": 2500, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 0, "attempted": false, "auto_advance": false, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_reason": "subscription_create", "charge": null, "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "custom_fields": null, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_address": null, "customer_email": "aapeli@couchers.org", "customer_name": null, "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": null, "effective_at": 1713046273, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik/pdf?s=ap", "issuer": {"type": "self"}, "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1P5EmzIfR5z29g5khRFJxpUq", "object": "line_item", "amount": 2500, "amount_excluding_tax": 2500, "currency": "usd", "description": "25 \u00d7 Couchers financial supporter (Tier 2 at $1.00 / month)", "discount_amounts": [], "discountable": true, "discounts": [], "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "period": {"end": 1715638273, "start": 1713046273}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_item": "si_Pv4w0QuX2JUBXm", "tax_amounts": [], "tax_rates": [], "type": "subscription", "unit_amount_excluding_tax": "100"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1P5EmzIfR5z29g5kNwA5fIXq/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "D86E702F-0001", "on_behalf_of": null, "paid": false, "paid_out_of_band": false, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_settings": {"default_mandate": null, "payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null}, "period_end": 1713046273, "period_start": 1713046273, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 0, "quote": null, "receipt_number": null, "rendering": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "open", "status_transitions": {"finalized_at": 1713046273, "marked_uncollectible_at": null, "paid_at": null, "voided_at": null}, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_details": {"metadata": {}}, "subtotal": 2500, "subtotal_excluding_tax": 2500, "tax": null, "test_clock": null, "total": 2500, "total_discount_amounts": [], "total_excluding_tax": 2500, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"},"type": "invoice.finalized"}',
266 "evt_1P5En2IfR5z29g5khvLimtc3": '{"id": "evt_1P5En2IfR5z29g5khvLimtc3", "object": "event", "api_version": "2024-04-10", "created": 1713046273, "data": {"object": {"id": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "object": "subscription", "application": null, "application_fee_percent": null, "automatic_tax": {"enabled": false, "liability": null}, "billing_cycle_anchor": 1713046273, "billing_cycle_anchor_config": null, "billing_thresholds": null, "cancel_at": null, "cancel_at_period_end": false, "canceled_at": null, "cancellation_details": {"comment": null, "feedback": null, "reason": null}, "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "current_period_end": 1715638273, "current_period_start": 1713046273, "customer": "cus_Pv4w8dxBpTVUsQ", "days_until_due": null, "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "ended_at": null, "invoice_settings": {"account_tax_ids": null, "issuer": {"type": "self"}}, "items": {"object": "list", "data": [{"id": "si_Pv4w0QuX2JUBXm", "object": "subscription_item", "billing_thresholds": null, "created": 1713046273, "discounts": [], "metadata": {}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "tax_rates": []}], "has_more": false, "total_count": 1, "url": "/v1/subscription_items?subscription=sub_1P5EmzIfR5z29g5k2nmkX0l3"}, "latest_invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "next_pending_invoice_item_invoice": null, "on_behalf_of": null, "pause_collection": null, "payment_settings": {"payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"network": null, "request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null, "save_default_payment_method": "off"}, "pending_invoice_item_interval": null, "pending_setup_intent": null, "pending_update": null, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "quantity": 25, "schedule": null, "start_date": 1713046273, "status": "incomplete", "test_clock": null, "transfer_data": null, "trial_end": null, "trial_settings": {"end_behavior": {"missing_payment_method": "create_invoice"}}, "trial_start": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "customer.subscription.created"}',
267 "evt_1P5En2IfR5z29g5kQ3f7d9C6": '{"id": "evt_1P5En2IfR5z29g5kQ3f7d9C6", "object": "event", "api_version": "2024-04-10", "created": 1713046275, "data": {"object": {"id": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "object": "subscription", "application": null, "application_fee_percent": null, "automatic_tax": {"enabled": false, "liability": null}, "billing_cycle_anchor": 1713046273, "billing_cycle_anchor_config": null, "billing_thresholds": null, "cancel_at": null, "cancel_at_period_end": false, "canceled_at": null, "cancellation_details": {"comment": null, "feedback": null, "reason": null}, "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "current_period_end": 1715638273, "current_period_start": 1713046273, "customer": "cus_Pv4w8dxBpTVUsQ", "days_until_due": null, "default_payment_method": "pm_1P5EmyIfR5z29g5kAIZoJcSv", "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "ended_at": null, "invoice_settings": {"account_tax_ids": null, "issuer": {"type": "self"}}, "items": {"object": "list", "data": [{"id": "si_Pv4w0QuX2JUBXm", "object": "subscription_item", "billing_thresholds": null, "created": 1713046273, "discounts": [], "metadata": {}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "tax_rates": []}], "has_more": false, "total_count": 1, "url": "/v1/subscription_items?subscription=sub_1P5EmzIfR5z29g5k2nmkX0l3"}, "latest_invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "next_pending_invoice_item_invoice": null, "on_behalf_of": null, "pause_collection": null, "payment_settings": {"payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"network": null, "request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null, "save_default_payment_method": "off"}, "pending_invoice_item_interval": null, "pending_setup_intent": null, "pending_update": null, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "quantity": 25, "schedule": null, "start_date": 1713046273, "status": "active", "test_clock": null, "transfer_data": null, "trial_end": null, "trial_settings": {"end_behavior": {"missing_payment_method": "create_invoice"}}, "trial_start": null}, "previous_attributes": {"default_payment_method": null, "status": "incomplete"}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "customer.subscription.updated"}',
268 "evt_1P5En2IfR5z29g5kQZBnH8bR": '{"id": "evt_1P5En2IfR5z29g5kQZBnH8bR", "object": "event", "api_version": "2024-04-10", "created": 1713046273, "data": {"object": {"id": "in_1P5EmzIfR5z29g5kNwA5fIXq", "object": "invoice", "account_country": "US", "account_name": "Couchers, Inc.", "account_tax_ids": null, "amount_due": 2500, "amount_paid": 0, "amount_remaining": 2500, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 0, "attempted": false, "auto_advance": false, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_reason": "subscription_create", "charge": null, "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "custom_fields": null, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_address": null, "customer_email": "aapeli@couchers.org", "customer_name": null, "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": null, "effective_at": 1713046273, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik/pdf?s=ap", "issuer": {"type": "self"}, "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1P5EmzIfR5z29g5khRFJxpUq", "object": "line_item", "amount": 2500, "amount_excluding_tax": 2500, "currency": "usd", "description": "25 \u00d7 Couchers financial supporter (Tier 2 at $1.00 / month)", "discount_amounts": [], "discountable": true, "discounts": [], "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "period": {"end": 1715638273, "start": 1713046273}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_item": "si_Pv4w0QuX2JUBXm", "tax_amounts": [], "tax_rates": [], "type": "subscription", "unit_amount_excluding_tax": "100"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1P5EmzIfR5z29g5kNwA5fIXq/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "D86E702F-0001", "on_behalf_of": null, "paid": false, "paid_out_of_band": false, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_settings": {"default_mandate": null, "payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null}, "period_end": 1713046273, "period_start": 1713046273, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 0, "quote": null, "receipt_number": null, "rendering": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "open", "status_transitions": {"finalized_at": 1713046273, "marked_uncollectible_at": null, "paid_at": null, "voided_at": null}, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_details": {"metadata": {}}, "subtotal": 2500, "subtotal_excluding_tax": 2500, "tax": null, "test_clock": null, "total": 2500, "total_discount_amounts": [], "total_excluding_tax": 2500, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "invoice.created"}',
269 "evt_1P5En3IfR5z29g5k3ElqoMso": '{"id": "evt_1P5En3IfR5z29g5k3ElqoMso", "object": "event", "api_version": "2024-04-10", "created": 1713046275, "data": {"object": {"id": "in_1P5EmzIfR5z29g5kNwA5fIXq", "object": "invoice", "account_country": "US", "account_name": "Couchers, Inc.", "account_tax_ids": null, "amount_due": 2500, "amount_paid": 2500, "amount_remaining": 0, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 1, "attempted": true, "auto_advance": false, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_reason": "subscription_create", "charge": "ch_3P5EmzIfR5z29g5k05Mw6ZV2", "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "custom_fields": null, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_address": null, "customer_email": "aapeli@couchers.org", "customer_name": null, "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": null, "effective_at": 1713046273, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Nw0200Xbr3gdqx?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Nw0200Xbr3gdqx/pdf?s=ap", "issuer": {"type": "self"}, "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1P5EmzIfR5z29g5khRFJxpUq", "object": "line_item", "amount": 2500, "amount_excluding_tax": 2500, "currency": "usd", "description": "25 \u00d7 Couchers financial supporter (Tier 2 at $1.00 / month)", "discount_amounts": [], "discountable": true, "discounts": [], "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "period": {"end": 1715638273, "start": 1713046273}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_item": "si_Pv4w0QuX2JUBXm", "tax_amounts": [], "tax_rates": [], "type": "subscription", "unit_amount_excluding_tax": "100"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1P5EmzIfR5z29g5kNwA5fIXq/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "D86E702F-0001", "on_behalf_of": null, "paid": true, "paid_out_of_band": false, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_settings": {"default_mandate": null, "payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null}, "period_end": 1713046273, "period_start": 1713046273, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 0, "quote": null, "receipt_number": null, "rendering": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "paid", "status_transitions": {"finalized_at": 1713046273, "marked_uncollectible_at": null, "paid_at": 1713046275, "voided_at": null}, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_details": {"metadata": {}}, "subtotal": 2500, "subtotal_excluding_tax": 2500, "tax": null, "test_clock": null, "total": 2500, "total_discount_amounts": [], "total_excluding_tax": 2500, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "invoice.payment_succeeded"}',
270 "evt_1P5En3IfR5z29g5kOoaABPf4": '{"id": "evt_1P5En3IfR5z29g5kOoaABPf4", "object": "event", "api_version": "2024-04-10", "created": 1713046277, "data": {"object": {"id": "cs_test_a1JoMu1FbksL058ob6T6AC1byYR2DCXVRwi0ybLSZKwINYe868OQr25qaC", "object": "checkout.session", "after_expiration": null, "allow_promotion_codes": null, "amount_subtotal": 2500, "amount_total": 2500, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_address_collection": null, "cancel_url": "http://localhost:3000/donate?cancelled=true", "client_reference_id": "1", "client_secret": null, "consent": null, "consent_collection": null, "created": 1713046244, "currency": "usd", "currency_conversion": null, "custom_fields": [], "custom_text": {"after_submit": null, "shipping_address": null, "submit": null, "terms_of_service_acceptance": null}, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_creation": null, "customer_details": {"address": {"city": null, "country": "US", "line1": null, "line2": null, "postal_code": "10001", "state": null}, "email": "aapeli@couchers.org", "name": "Aapeli Vuorinen", "phone": null, "tax_exempt": "none", "tax_ids": []}, "customer_email": null, "expires_at": 1713132644, "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "invoice_creation": null, "livemode": false, "locale": null, "metadata": {}, "mode": "subscription", "payment_intent": null, "payment_link": null, "payment_method_collection": "always", "payment_method_configuration_details": null, "payment_method_options": {"card": {"request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "payment_status": "paid", "phone_number_collection": {"enabled": false}, "recovered_from": null, "setup_intent": null, "shipping_address_collection": null, "shipping_cost": null, "shipping_details": null, "shipping_options": [], "status": "complete", "submit_type": null, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "success_url": "http://localhost:3000/donate?success=true", "total_details": {"amount_discount": 0, "amount_shipping": 0, "amount_tax": 0}, "ui_mode": "hosted", "url": null}}, "livemode": false, "pending_webhooks": 3, "request": {"id": null, "idempotency_key": null}, "type": "checkout.session.completed"}',
271 "evt_1P5En3IfR5z29g5kRKYnPpgc": '{"id": "evt_1P5En3IfR5z29g5kRKYnPpgc", "object": "event", "api_version": "2024-04-10", "created": 1713046275, "data": {"object": {"id": "in_1P5EmzIfR5z29g5kNwA5fIXq", "object": "invoice", "account_country": "US", "account_name": "Couchers, Inc.", "account_tax_ids": null, "amount_due": 2500, "amount_paid": 2500, "amount_remaining": 0, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 1, "attempted": true, "auto_advance": false, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_reason": "subscription_create", "charge": "ch_3P5EmzIfR5z29g5k05Mw6ZV2", "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "custom_fields": null, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_address": null, "customer_email": "aapeli@couchers.org", "customer_name": null, "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": null, "effective_at": 1713046273, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Ng0200xNecenik/pdf?s=ap", "issuer": {"type": "self"}, "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1P5EmzIfR5z29g5khRFJxpUq", "object": "line_item", "amount": 2500, "amount_excluding_tax": 2500, "currency": "usd", "description": "25 \u00d7 Couchers financial supporter (Tier 2 at $1.00 / month)", "discount_amounts": [], "discountable": true, "discounts": [], "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "period": {"end": 1715638273, "start": 1713046273}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_item": "si_Pv4w0QuX2JUBXm", "tax_amounts": [], "tax_rates": [], "type": "subscription", "unit_amount_excluding_tax": "100"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1P5EmzIfR5z29g5kNwA5fIXq/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "D86E702F-0001", "on_behalf_of": null, "paid": true, "paid_out_of_band": false, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_settings": {"default_mandate": null, "payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null}, "period_end": 1713046273, "period_start": 1713046273, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 0, "quote": null, "receipt_number": null, "rendering": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "paid", "status_transitions": {"finalized_at": 1713046273, "marked_uncollectible_at": null, "paid_at": 1713046275, "voided_at": null}, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_details": {"metadata": {}}, "subtotal": 2500, "subtotal_excluding_tax": 2500, "tax": null, "test_clock": null, "total": 2500, "total_discount_amounts": [], "total_excluding_tax": 2500, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": null}, "previous_attributes": {"amount_paid": 0, "amount_remaining": 2500, "attempt_count": 0, "attempted": false, "charge": null, "paid": false, "status": "open", "status_transitions": {"paid_at": null}}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "invoice.updated"}',
272 "evt_1P5En3IfR5z29g5kXDrXUkQa": '{"id": "evt_1P5En3IfR5z29g5kXDrXUkQa", "object": "event", "api_version": "2024-04-10", "created": 1713046275, "data": {"object": {"id": "in_1P5EmzIfR5z29g5kNwA5fIXq", "object": "invoice", "account_country": "US", "account_name": "Couchers, Inc.", "account_tax_ids": null, "amount_due": 2500, "amount_paid": 2500, "amount_remaining": 0, "amount_shipping": 0, "application": null, "application_fee_amount": null, "attempt_count": 1, "attempted": true, "auto_advance": false, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_reason": "subscription_create", "charge": "ch_3P5EmzIfR5z29g5k05Mw6ZV2", "collection_method": "charge_automatically", "created": 1713046273, "currency": "usd", "custom_fields": null, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_address": null, "customer_email": "aapeli@couchers.org", "customer_name": null, "customer_phone": null, "customer_shipping": null, "customer_tax_exempt": "none", "customer_tax_ids": [], "default_payment_method": null, "default_source": null, "default_tax_rates": [], "description": null, "discount": null, "discounts": [], "due_date": null, "effective_at": 1713046273, "ending_balance": 0, "footer": null, "from_invoice": null, "hosted_invoice_url": "https://invoice.stripe.com/i/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Nw0200Xbr3gdqx?s=ap", "invoice_pdf": "https://pay.stripe.com/invoice/acct_1KEzByIfR5z29g5k/test_YWNjdF8xS0V6QnlJZlI1ejI5ZzVrLF9QdjR3dzFNVDRGcHo4ZTI1Z05tMXA5WldlMld2VGE2LDEwMzU4NzA3Nw0200Xbr3gdqx/pdf?s=ap", "issuer": {"type": "self"}, "last_finalization_error": null, "latest_revision": null, "lines": {"object": "list", "data": [{"id": "il_1P5EmzIfR5z29g5khRFJxpUq", "object": "line_item", "amount": 2500, "amount_excluding_tax": 2500, "currency": "usd", "description": "25 \u00d7 Couchers financial supporter (Tier 2 at $1.00 / month)", "discount_amounts": [], "discountable": true, "discounts": [], "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "period": {"end": 1715638273, "start": 1713046273}, "plan": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "plan", "active": true, "aggregate_usage": null, "amount": null, "amount_decimal": null, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "interval": "month", "interval_count": 1, "livemode": false, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "tiers_mode": "volume", "transform_usage": null, "trial_period_days": null, "usage_type": "licensed"}, "price": {"id": "price_1KIbmbIfR5z29g5kFWPEUnC6", "object": "price", "active": true, "billing_scheme": "tiered", "created": 1642351245, "currency": "usd", "custom_unit_amount": null, "livemode": false, "lookup_key": null, "metadata": {}, "nickname": null, "product": "prod_KyYuo4dO67NKtG", "recurring": {"aggregate_usage": null, "interval": "month", "interval_count": 1, "trial_period_days": null, "usage_type": "licensed"}, "tax_behavior": "unspecified", "tiers_mode": "volume", "transform_quantity": null, "type": "recurring", "unit_amount": null, "unit_amount_decimal": null}, "proration": false, "proration_details": {"credited_items": null}, "quantity": 25, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_item": "si_Pv4w0QuX2JUBXm", "tax_amounts": [], "tax_rates": [], "type": "subscription", "unit_amount_excluding_tax": "100"}], "has_more": false, "total_count": 1, "url": "/v1/invoices/in_1P5EmzIfR5z29g5kNwA5fIXq/lines"}, "livemode": false, "metadata": {}, "next_payment_attempt": null, "number": "D86E702F-0001", "on_behalf_of": null, "paid": true, "paid_out_of_band": false, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_settings": {"default_mandate": null, "payment_method_options": {"acss_debit": null, "bancontact": null, "card": {"request_three_d_secure": "automatic"}, "customer_balance": null, "konbini": null, "sepa_debit": null, "us_bank_account": null}, "payment_method_types": null}, "period_end": 1713046273, "period_start": 1713046273, "post_payment_credit_notes_amount": 0, "pre_payment_credit_notes_amount": 0, "quote": null, "receipt_number": null, "rendering": null, "shipping_cost": null, "shipping_details": null, "starting_balance": 0, "statement_descriptor": null, "status": "paid", "status_transitions": {"finalized_at": 1713046273, "marked_uncollectible_at": null, "paid_at": 1713046275, "voided_at": null}, "subscription": "sub_1P5EmzIfR5z29g5k2nmkX0l3", "subscription_details": {"metadata": {}}, "subtotal": 2500, "subtotal_excluding_tax": 2500, "tax": null, "test_clock": null, "total": 2500, "total_discount_amounts": [], "total_excluding_tax": 2500, "total_tax_amounts": [], "transfer_data": null, "webhooks_delivered_at": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "invoice.paid"}',
273 "evt_3P5El3IfR5z29g5k0mFVJ2V7": '{"id": "evt_3P5El3IfR5z29g5k0mFVJ2V7", "object": "event", "api_version": "2024-04-10", "created": 1713046153, "data": {"object": {"id": "pi_3P5El3IfR5z29g5k0N5TNa7R", "object": "payment_intent", "amount": 10000, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3P5El3IfR5z29g5k0N5TNa7R_secret_BIdVdUUKk8zPCuttemp8Jl4uf", "confirmation_method": "automatic", "created": 1713046153, "currency": "usd", "customer": "cus_Pv4uq0gT0rDZWN", "description": null, "invoice": null, "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "processing": null, "receipt_email": "aapeli@couchers.org", "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "requires_payment_method", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_kVsPqUwBoL4xen", "idempotency_key": "d3051b38-f32b-4118-b456-56897ce6b96d"}, "type": "payment_intent.created"}',
274 "evt_3P5El3IfR5z29g5k0TLWlfHq": '{"id": "evt_3P5El3IfR5z29g5k0TLWlfHq", "object": "event", "api_version": "2024-04-10", "created": 1713046154, "data": {"object": {"id": "ch_3P5El3IfR5z29g5k03QfMZRt", "object": "charge", "amount": 10000, "amount_captured": 10000, "amount_refunded": 0, "application": null, "application_fee": null, "application_fee_amount": null, "balance_transaction": "txn_3P5El3IfR5z29g5k0Jmn0th5", "billing_details": {"address": {"city": null, "country": "US", "line1": null, "line2": null, "postal_code": "10001", "state": null}, "email": "aapeli@couchers.org", "name": "Aapeli Vuorinen", "phone": null}, "calculated_statement_descriptor": "COUCHERS.ORG", "captured": true, "created": 1713046154, "currency": "usd", "customer": "cus_Pv4uq0gT0rDZWN", "description": null, "destination": null, "dispute": null, "disputed": false, "failure_balance_transaction": null, "failure_code": null, "failure_message": null, "fraud_details": {}, "invoice": null, "livemode": false, "metadata": {}, "on_behalf_of": null, "order": null, "outcome": {"network_status": "approved_by_network", "reason": null, "risk_level": "normal", "risk_score": 31, "seller_message": "Payment complete.", "type": "authorized"}, "paid": true, "payment_intent": "pi_3P5El3IfR5z29g5k0N5TNa7R", "payment_method": "pm_1P5El3IfR5z29g5k33WlbWVC", "payment_method_details": {"card": {"amount_authorized": 10000, "brand": "visa", "checks": {"address_line1_check": null, "address_postal_code_check": "pass", "cvc_check": "pass"}, "country": "US", "exp_month": 12, "exp_year": 2050, "extended_authorization": {"status": "disabled"}, "fingerprint": "2uVHwVtZ157kRjpi", "funding": "credit", "incremental_authorization": {"status": "unavailable"}, "installments": null, "last4": "4242", "mandate": null, "multicapture": {"status": "unavailable"}, "network": "visa", "network_token": {"used": false}, "overcapture": {"maximum_amount_capturable": 10000, "status": "unavailable"}, "three_d_secure": null, "wallet": null}, "type": "card"}, "radar_options": {}, "receipt_email": "aapeli@couchers.org", "receipt_number": null, "receipt_url": "https://pay.stripe.com/receipts/payment/CAcaFwoVYWNjdF8xS0V6QnlJZlI1ejI5ZzVrKIqF7LAGMgbtNxpJulk6LBaePNy_2Q2RzXJsbk7t1jLwK26AQlG05P-4EPhG7AIIcqsQLgC09iDJ2srs", "refunded": false, "review": null, "shipping": null, "source": null, "source_transfer": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_kVsPqUwBoL4xen", "idempotency_key": "d3051b38-f32b-4118-b456-56897ce6b96d"}, "type": "charge.succeeded"}',
275 "evt_3P5El3IfR5z29g5k0tueVWGH": '{"id": "evt_3P5El3IfR5z29g5k0tueVWGH", "object": "event", "api_version": "2024-04-10", "created": 1713046154, "data": {"object": {"id": "pi_3P5El3IfR5z29g5k0N5TNa7R", "object": "payment_intent", "amount": 10000, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 10000, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3P5El3IfR5z29g5k0N5TNa7R_secret_BIdVdUUKk8zPCuttemp8Jl4uf", "confirmation_method": "automatic", "created": 1713046153, "currency": "usd", "customer": "cus_Pv4uq0gT0rDZWN", "description": null, "invoice": null, "last_payment_error": null, "latest_charge": "ch_3P5El3IfR5z29g5k03QfMZRt", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1P5El3IfR5z29g5k33WlbWVC", "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "processing": null, "receipt_email": "aapeli@couchers.org", "review": null, "setup_future_usage": null, "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 3, "request": {"id": "req_kVsPqUwBoL4xen", "idempotency_key": "d3051b38-f32b-4118-b456-56897ce6b96d"}, "type": "payment_intent.succeeded"}',
276 "evt_3P5EmzIfR5z29g5k0bA1H9Vg": '{"id": "evt_3P5EmzIfR5z29g5k0bA1H9Vg", "object": "event", "api_version": "2024-04-10", "created": 1713046274, "data": {"object": {"id": "ch_3P5EmzIfR5z29g5k05Mw6ZV2", "object": "charge", "amount": 2500, "amount_captured": 2500, "amount_refunded": 0, "application": null, "application_fee": null, "application_fee_amount": null, "balance_transaction": "txn_3P5EmzIfR5z29g5k0U5iEbk1", "billing_details": {"address": {"city": null, "country": "US", "line1": null, "line2": null, "postal_code": "10001", "state": null}, "email": "aapeli@couchers.org", "name": "Aapeli Vuorinen", "phone": null}, "calculated_statement_descriptor": "COUCHERS.ORG", "captured": true, "created": 1713046274, "currency": "usd", "customer": "cus_Pv4w8dxBpTVUsQ", "description": "Subscription creation", "destination": null, "dispute": null, "disputed": false, "failure_balance_transaction": null, "failure_code": null, "failure_message": null, "fraud_details": {}, "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "livemode": false, "metadata": {}, "on_behalf_of": null, "order": null, "outcome": {"network_status": "approved_by_network", "reason": null, "risk_level": "normal", "risk_score": 44, "seller_message": "Payment complete.", "type": "authorized"}, "paid": true, "payment_intent": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "payment_method": "pm_1P5EmyIfR5z29g5kAIZoJcSv", "payment_method_details": {"card": {"amount_authorized": 2500, "brand": "visa", "checks": {"address_line1_check": null, "address_postal_code_check": "pass", "cvc_check": "pass"}, "country": "US", "exp_month": 12, "exp_year": 2050, "extended_authorization": {"status": "disabled"}, "fingerprint": "2uVHwVtZ157kRjpi", "funding": "credit", "incremental_authorization": {"status": "unavailable"}, "installments": null, "last4": "4242", "mandate": null, "multicapture": {"status": "unavailable"}, "network": "visa", "network_token": {"used": false}, "overcapture": {"maximum_amount_capturable": 2500, "status": "unavailable"}, "three_d_secure": null, "wallet": null}, "type": "card"}, "radar_options": {}, "receipt_email": "aapeli@couchers.org", "receipt_number": null, "receipt_url": "https://pay.stripe.com/receipts/invoices/CAcaFwoVYWNjdF8xS0V6QnlJZlI1ejI5ZzVrKIOG7LAGMgYTBIebo2c6LBYFs4BgdV7T4S5nHXQyHt4uh5azZ3_ss_S2wi27m52wbg4yQAoirZ9eBhbH?s=ap", "refunded": false, "review": null, "shipping": null, "source": null, "source_transfer": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "charge.succeeded"}',
277 "evt_3P5EmzIfR5z29g5k0bxxQl9f": '{"id": "evt_3P5EmzIfR5z29g5k0bxxQl9f", "object": "event", "api_version": "2024-04-10", "created": 1713046273, "data": {"object": {"id": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "object": "payment_intent", "amount": 2500, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 0, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3P5EmzIfR5z29g5k0uVvI3kX_secret_mw1JYS1lig6dYcy922zoeyzkK", "confirmation_method": "automatic", "created": 1713046273, "currency": "usd", "customer": "cus_Pv4w8dxBpTVUsQ", "description": "Subscription creation", "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "last_payment_error": null, "latest_charge": null, "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": null, "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic"}, "cashapp": {}}, "payment_method_types": ["card", "cashapp"], "processing": null, "receipt_email": "aapeli@couchers.org", "review": null, "setup_future_usage": "off_session", "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "requires_payment_method", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 2, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "payment_intent.created"}',
278 "evt_3P5EmzIfR5z29g5k0taFsMsl": '{"id": "evt_3P5EmzIfR5z29g5k0taFsMsl", "object": "event", "api_version": "2024-04-10", "created": 1713046274, "data": {"object": {"id": "pi_3P5EmzIfR5z29g5k0uVvI3kX", "object": "payment_intent", "amount": 2500, "amount_capturable": 0, "amount_details": {"tip": {}}, "amount_received": 2500, "application": null, "application_fee_amount": null, "automatic_payment_methods": null, "canceled_at": null, "cancellation_reason": null, "capture_method": "automatic", "client_secret": "pi_3P5EmzIfR5z29g5k0uVvI3kX_secret_mw1JYS1lig6dYcy922zoeyzkK", "confirmation_method": "automatic", "created": 1713046273, "currency": "usd", "customer": "cus_Pv4w8dxBpTVUsQ", "description": "Subscription creation", "invoice": "in_1P5EmzIfR5z29g5kNwA5fIXq", "last_payment_error": null, "latest_charge": "ch_3P5EmzIfR5z29g5k05Mw6ZV2", "livemode": false, "metadata": {}, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1P5EmyIfR5z29g5kAIZoJcSv", "payment_method_configuration_details": null, "payment_method_options": {"card": {"installments": null, "mandate_options": null, "network": null, "request_three_d_secure": "automatic", "setup_future_usage": "off_session"}, "cashapp": {}}, "payment_method_types": ["card", "cashapp"], "processing": null, "receipt_email": "aapeli@couchers.org", "review": null, "setup_future_usage": "off_session", "shipping": null, "source": null, "statement_descriptor": null, "statement_descriptor_suffix": null, "status": "succeeded", "transfer_data": null, "transfer_group": null}}, "livemode": false, "pending_webhooks": 3, "request": {"id": "req_x1PqgmCHBOPD0i", "idempotency_key": "44ec8acd-be18-4de0-af2e-715760e96725"}, "type": "payment_intent.succeeded"}',
279}
281one_time_STRIPE_SESSION = json.loads(
282 '{"id": "cs_test_a12ftevGwzCAa236NeLPq6yRAdMt0V2S1gGjFcxfsY4xT4tiREPvbr5lhG", "object": "checkout.session", "after_expiration": null, "allow_promotion_codes": null, "amount_subtotal": 10000, "amount_total": 10000, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_address_collection": null, "cancel_url": "http://localhost:3000/donate?cancelled=true", "client_reference_id": "1", "client_secret": null, "consent": null, "consent_collection": null, "created": 1713046124, "currency": "usd", "currency_conversion": null, "custom_fields": [], "custom_text": {"after_submit": null, "shipping_address": null, "submit": null, "terms_of_service_acceptance": null}, "customer": "cus_Pv4uq0gT0rDZWN", "customer_creation": null, "customer_details": {"address": null, "email": "aapeli@couchers.org", "name": null, "phone": null, "tax_exempt": "none", "tax_ids": null}, "customer_email": null, "expires_at": 1713132523, "invoice": null, "invoice_creation": {"enabled": false, "invoice_data": {"account_tax_ids": null, "custom_fields": null, "description": null, "footer": null, "issuer": null, "metadata": {}, "rendering_options": null}}, "livemode": false, "locale": null, "metadata": {}, "mode": "payment", "payment_intent": null, "payment_link": null, "payment_method_collection": "if_required", "payment_method_configuration_details": null, "payment_method_options": {"card": {"request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "payment_status": "unpaid", "phone_number_collection": {"enabled": false}, "recovered_from": null, "setup_intent": null, "shipping_address_collection": null, "shipping_cost": null, "shipping_details": null, "shipping_options": [], "status": "open", "submit_type": "donate", "subscription": null, "success_url": "http://localhost:3000/donate?success=true", "total_details": {"amount_discount": 0, "amount_shipping": 0, "amount_tax": 0}, "ui_mode": "hosted", "url": "https://checkout.stripe.com/c/pay/cs_test_a12ftevGwzCAa236NeLPq6yRAdMt0V2S1gGjFcxfsY4xT4tiREPvbr5lhG#fidkdWxOYHwnPyd1blpxYHZxWjA0TkB%2FR3xMY1cwfzc8YjBua0NNSEZjVUhUd2h%2FYW1yQGlLaU9tXVNoMVE3ZE1QQEluajNiS3xEaVxxQ3xXT1J%2FU3dWb3NhSUhIf2tXTmpVNUpUMzJDaGZLNTVVTmhTcEJocycpJ2N3amhWYHdzYHcnP3F3cGApJ2lkfGpwcVF8dWAnPyd2bGtiaWBabHFgaCcpJ2BrZGdpYFVpZGZgbWppYWB3dic%2FcXdwYHgl"}'
283)
284RECURRING_STRIPE_SESSION = json.loads(
285 '{"id": "cs_test_a1JoMu1FbksL058ob6T6AC1byYR2DCXVRwi0ybLSZKwINYe868OQr25qaC", "object": "checkout.session", "after_expiration": null, "allow_promotion_codes": null, "amount_subtotal": 2500, "amount_total": 2500, "automatic_tax": {"enabled": false, "liability": null, "status": null}, "billing_address_collection": null, "cancel_url": "http://localhost:3000/donate?cancelled=true", "client_reference_id": "1", "client_secret": null, "consent": null, "consent_collection": null, "created": 1713046244, "currency": "usd", "currency_conversion": null, "custom_fields": [], "custom_text": {"after_submit": null, "shipping_address": null, "submit": null, "terms_of_service_acceptance": null}, "customer": "cus_Pv4w8dxBpTVUsQ", "customer_creation": null, "customer_details": {"address": null, "email": "aapeli@couchers.org", "name": null, "phone": null, "tax_exempt": "none", "tax_ids": null}, "customer_email": null, "expires_at": 1713132644, "invoice": null, "invoice_creation": null, "livemode": false, "locale": null, "metadata": {}, "mode": "subscription", "payment_intent": null, "payment_link": null, "payment_method_collection": "always", "payment_method_configuration_details": null, "payment_method_options": {"card": {"request_three_d_secure": "automatic"}}, "payment_method_types": ["card"], "payment_status": "unpaid", "phone_number_collection": {"enabled": false}, "recovered_from": null, "setup_intent": null, "shipping_address_collection": null, "shipping_cost": null, "shipping_details": null, "shipping_options": [], "status": "open", "submit_type": null, "subscription": null, "success_url": "http://localhost:3000/donate?success=true", "total_details": {"amount_discount": 0, "amount_shipping": 0, "amount_tax": 0}, "ui_mode": "hosted", "url": "https://checkout.stripe.com/c/pay/cs_test_a1JoMu1FbksL058ob6T6AC1byYR2DCXVRwi0ybLSZKwINYe868OQr25qaC#fid2cGd2ZndsdXFsamtQa2x0cGBrYHZ2QGtkZ2lgYSc%2FY2RpdmApJ2R1bE5gfCc%2FJ3VuWnFgdnFaMDROQH9HfExjVzB%2FNzxiMG5rQ01IRmNVSFR3aH9hbXJAaUtpT21dU2gxUTdkTVBASW5qM2JLfERpXHFDfFdPUn9Td1Zvc2FJSEh%2Fa1dOalU1SlQzMkNoZks1NVVOaFNwQmhzJyknY3dqaFZgd3Ngdyc%2FcXdwYCknaWR8anBxUXx1YCc%2FJ3Zsa2JpYFpscWBoJyknYGtkZ2lgVWlkZmBtamlhYHd2Jz9xd3BgeCUl"}'
286)