Closed jozkotrapko closed 5 months ago
I played around with it a bit and came up with this, what do you think?
import streamlit as st
import stripe
def get_customer_id(email):
customers = stripe.Customer.list(email=email).auto_paging_iter()
for customer in customers:
return customer['id']
return None
def cancel_subscription(email):
customer_id = get_customer_id(email)
if customer_id is None:
st.write("No customer with the provided email.")
return
subscriptions = stripe.Subscription.list(customer=customer_id).auto_paging_iter()
for subscription in subscriptions:
if subscription['status'] != 'canceled':
if subscription['cancel_at_period_end']:
st.write(f"Your subscription {subscription['id']} was already accepted to be canceled after the end of the period.")
else:
stripe.Subscription.modify(
subscription['id'],
cancel_at_period_end=True,
)
st.write(f"Subscription {subscription['id']} will be canceled at the end of the current period.")
email = st.session_state.email
if 'confirm' not in st.session_state:
st.session_state.confirm = False
if st.button('Request to Cancel Subscription'):
st.session_state.confirm = not st.session_state.confirm
if st.session_state.confirm:
if st.button('Are you sure you want to cancel the subscription?'):
cancel_subscription(email)
st.session_state.confirm = False
getting this error, how did you approach this?
AttributeError: st.session_state has no attribute "email". Did you forget to initialize it? More info: https://docs.streamlit.io/library/advanced-features/session-state#initialization
How can a client cancel their subscription arbitrarily? By some button/page to manage the subscription.