tylerjrichards / st-paywall

A python package for creating subscription Streamlit apps
MIT License
235 stars 46 forks source link

how can customers cancel subscription #59

Open amanca9999 opened 4 months ago

amanca9999 commented 4 months ago

Please advise, thank you!

Btw, is there an easy way to manage users like tracking users queries, etc. ?

jozkotrapko commented 2 months ago
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)

    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('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 sub?'):
        cancel_subscription(email)
        st.session_state.confirm = False

Make sure you add write permission on Subscriptions in Stripe API key.

Please advise, thank you!

Btw, is there an easy way to manage users like tracking users queries, etc. ?

oscolabs commented 1 month ago

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