Use payment method instead of token and PaymentIntent all over
This commit is contained in:
parent
35cc9d4229
commit
c3286a68a5
8 changed files with 245 additions and 121 deletions
|
|
@ -83,12 +83,15 @@ class StripeUtils(object):
|
|||
customer.save()
|
||||
|
||||
@handleStripeError
|
||||
def associate_customer_card(self, stripe_customer_id, token,
|
||||
def associate_customer_card(self, stripe_customer_id, id_payment_method,
|
||||
set_as_default=False):
|
||||
customer = stripe.Customer.retrieve(stripe_customer_id)
|
||||
card = customer.sources.create(source=token)
|
||||
stripe.PaymentMethod.attach(
|
||||
id_payment_method,
|
||||
customer=stripe_customer_id,
|
||||
)
|
||||
if set_as_default:
|
||||
customer.default_source = card.id
|
||||
customer.invoice_settings.default_payment_method = id_payment_method
|
||||
customer.save()
|
||||
return True
|
||||
|
||||
|
|
@ -100,6 +103,7 @@ class StripeUtils(object):
|
|||
|
||||
@handleStripeError
|
||||
def update_customer_card(self, customer_id, token):
|
||||
# TODO replace token with payment intent
|
||||
customer = stripe.Customer.retrieve(customer_id)
|
||||
current_card_token = customer.default_source
|
||||
customer.sources.retrieve(current_card_token).delete()
|
||||
|
|
@ -188,6 +192,24 @@ class StripeUtils(object):
|
|||
}
|
||||
return card_details
|
||||
|
||||
@handleStripeError
|
||||
def get_cards_details_from_payment_method(self, payment_method_id):
|
||||
payment_method = stripe.PaymentMethod.retrieve(payment_method_id)
|
||||
# payment_method does not always seem to have a card with id
|
||||
# if that is the case, fallback to payment_method_id for card_id
|
||||
card_id = payment_method_id
|
||||
if hasattr(payment_method.card, 'id'):
|
||||
card_id = payment_method.card.id
|
||||
card_details = {
|
||||
'last4': payment_method.card.last4,
|
||||
'brand': payment_method.card.brand,
|
||||
'exp_month': payment_method.card.exp_month,
|
||||
'exp_year': payment_method.card.exp_year,
|
||||
'fingerprint': payment_method.card.fingerprint,
|
||||
'card_id': card_id
|
||||
}
|
||||
return card_details
|
||||
|
||||
def check_customer(self, stripe_cus_api_id, user, token):
|
||||
try:
|
||||
customer = stripe.Customer.retrieve(stripe_cus_api_id)
|
||||
|
|
@ -207,11 +229,11 @@ class StripeUtils(object):
|
|||
return customer
|
||||
|
||||
@handleStripeError
|
||||
def create_customer(self, token, email, name=None):
|
||||
def create_customer(self, id_payment_method, email, name=None):
|
||||
if name is None or name.strip() == "":
|
||||
name = email
|
||||
customer = self.stripe.Customer.create(
|
||||
source=token,
|
||||
payment_method=id_payment_method,
|
||||
description=name,
|
||||
email=email
|
||||
)
|
||||
|
|
@ -494,19 +516,19 @@ class StripeUtils(object):
|
|||
return tax_id_obj
|
||||
|
||||
@handleStripeError
|
||||
def get_payment_intent(self, amount):
|
||||
"""
|
||||
Adds VM metadata to a subscription
|
||||
:param amount: the amount of payment_intent
|
||||
:return:
|
||||
def get_payment_intent(self, amount, customer):
|
||||
""" Create a stripe PaymentIntent of the given amount and return it
|
||||
:param amount: the amount of payment_intent
|
||||
:return:
|
||||
"""
|
||||
payment_intent_obj = stripe.PaymentIntent.create(
|
||||
amount=amount,
|
||||
currency='chf'
|
||||
currency='chf',
|
||||
customer=customer
|
||||
)
|
||||
return payment_intent_obj
|
||||
|
||||
def compare_vat_numbers(self, vat1, vat2):
|
||||
_vat1 = vat1.replace(" ", "").replace(".", "").replace("-","")
|
||||
_vat2 = vat2.replace(" ", "").replace(".", "").replace("-","")
|
||||
return True if _vat1 == _vat2 else False
|
||||
return True if _vat1 == _vat2 else False
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue