mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	billing: Expand default_source object when retrieving customer.
This commit is contained in:
		@@ -91,7 +91,7 @@ def catch_stripe_errors(func: CallableT) -> CallableT:
 | 
			
		||||
 | 
			
		||||
@catch_stripe_errors
 | 
			
		||||
def get_stripe_customer(stripe_customer_id: str) -> stripe.Customer:
 | 
			
		||||
    stripe_customer = stripe.Customer.retrieve(stripe_customer_id)
 | 
			
		||||
    stripe_customer = stripe.Customer.retrieve(stripe_customer_id, expand=["default_source"])
 | 
			
		||||
    if PRINT_STRIPE_FIXTURE_DATA:
 | 
			
		||||
        print(''.join(['"retrieve_customer": ', str(stripe_customer), ',']))  # nocoverage
 | 
			
		||||
    return stripe_customer
 | 
			
		||||
@@ -113,15 +113,6 @@ def extract_current_subscription(stripe_customer: stripe.Customer) -> Any:
 | 
			
		||||
            return stripe_subscription
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
@catch_stripe_errors
 | 
			
		||||
def payment_source(stripe_customer: stripe.Customer) -> Optional[stripe.Card]:
 | 
			
		||||
    if stripe_customer.default_source is None:
 | 
			
		||||
        return None  # nocoverage -- no way to get here yet
 | 
			
		||||
    for source in stripe_customer.sources.data:
 | 
			
		||||
        if source.id == stripe_customer.default_source:
 | 
			
		||||
            return source
 | 
			
		||||
    raise AssertionError("Default source not in sources.")
 | 
			
		||||
 | 
			
		||||
@catch_stripe_errors
 | 
			
		||||
def do_create_customer_with_payment_source(user: UserProfile, stripe_token: str) -> stripe.Customer:
 | 
			
		||||
    realm = user.realm
 | 
			
		||||
 
 | 
			
		||||
@@ -138,7 +138,31 @@
 | 
			
		||||
        "account_balance": 0,
 | 
			
		||||
        "created": 1529990750,
 | 
			
		||||
        "currency": "usd",
 | 
			
		||||
        "default_source": "card_1Ch9gVGh0CmXqmnwv94RombT",
 | 
			
		||||
        "default_source": {
 | 
			
		||||
            "address_city": "Pacific",
 | 
			
		||||
            "address_country": "United States",
 | 
			
		||||
            "address_line1": "Under the sea",
 | 
			
		||||
            "address_line1_check": "pass",
 | 
			
		||||
            "address_line2": null,
 | 
			
		||||
            "address_state": "FL",
 | 
			
		||||
            "address_zip": "33333",
 | 
			
		||||
            "address_zip_check": "pass",
 | 
			
		||||
            "brand": "Visa",
 | 
			
		||||
            "country": "US",
 | 
			
		||||
            "customer": "cus_D7OT2jf5YAtZQL",
 | 
			
		||||
            "cvc_check": "pass",
 | 
			
		||||
            "dynamic_last4": null,
 | 
			
		||||
            "exp_month": 3,
 | 
			
		||||
            "exp_year": 2033,
 | 
			
		||||
            "fingerprint": "6dAXT9VZvwro65EK",
 | 
			
		||||
            "funding": "credit",
 | 
			
		||||
            "id": "card_1Ch9gVGh0CmXqmnwv94RombT",
 | 
			
		||||
            "last4": "4242",
 | 
			
		||||
            "metadata": {},
 | 
			
		||||
            "name": "Ada Starr",
 | 
			
		||||
            "object": "card",
 | 
			
		||||
            "tokenization_method": null
 | 
			
		||||
        },
 | 
			
		||||
        "delinquent": false,
 | 
			
		||||
        "description": "zulip (Zulip Dev)",
 | 
			
		||||
        "discount": null,
 | 
			
		||||
 
 | 
			
		||||
@@ -27,8 +27,8 @@ from zerver.models import UserProfile, Realm
 | 
			
		||||
from zerver.views.push_notifications import validate_token
 | 
			
		||||
from zilencer.lib.stripe import STRIPE_PUBLISHABLE_KEY, StripeError, \
 | 
			
		||||
    do_create_customer_with_payment_source, do_subscribe_customer_to_plan, \
 | 
			
		||||
    get_stripe_customer, get_upcoming_invoice, payment_source, \
 | 
			
		||||
    get_seat_count, extract_current_subscription, sign_string, unsign_string
 | 
			
		||||
    get_stripe_customer, get_upcoming_invoice, get_seat_count, \
 | 
			
		||||
    extract_current_subscription, sign_string, unsign_string
 | 
			
		||||
from zilencer.models import RemotePushDeviceToken, RemoteZulipServer, \
 | 
			
		||||
    Customer, Plan
 | 
			
		||||
 | 
			
		||||
@@ -249,9 +249,8 @@ def billing_home(request: HttpRequest) -> HttpResponse:
 | 
			
		||||
        prorated_charges = 0
 | 
			
		||||
 | 
			
		||||
    payment_method = None
 | 
			
		||||
    source = payment_source(stripe_customer)
 | 
			
		||||
    if source is not None:
 | 
			
		||||
        payment_method = "Card ending in %(last4)s" % {'last4': source.last4}
 | 
			
		||||
    if stripe_customer.default_source is not None:
 | 
			
		||||
        payment_method = "Card ending in %(last4)s" % {'last4': stripe_customer.default_source.last4}
 | 
			
		||||
 | 
			
		||||
    context.update({
 | 
			
		||||
        'plan_name': plan_name,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user