[英]Retrieve a Card with Customer is throwing an error
我正試圖在Django中為訂戶創建一種方式,將其默認付款方式更改為存檔的現有卡。 當我嘗試訪問條帶卡時,我收到錯誤“無法檢索沒有客戶,收件人或帳戶ID的卡。使用customer.sources.retrieve('card_id'),recipient.cards.retrieve('card_id')或者改為account.external_accounts.retrieve('card_id')。“ 盡管提供了客戶。
我試圖從視圖中刪除其他邏輯。 我不知道從哪里開始。
@login_required
# @is_subscriber
def update_payment(request):
title = 'Update Payment Methods'
description = title
key = settings.STRIPE_PUBLISHABLE_KEY
user_membership = UserMembership.objects.get(user=request.user)
current_payment_methods = stripe.PaymentMethod.list(customer=user_membership.stripe_customer_id,
type='card')
customer = stripe.Customer.retrieve(user_membership.stripe_customer_id)
if request.method == 'POST':
if request.POST.get('source_obj'):
logger.info('User is attempting to delete a paid payment method')
card_id = request.POST.get('source_obj')
if len(current_payment_methods) > 1:
stripe.Customer.delete_source(
user_membership.stripe_customer_id, card_id
)
message = 'This payment method has been removed from your account.'
messages.info(request, message=message)
logger.info('User has deleted a payment method')
elif len(current_payment_methods) <= 1:
message = 'You must have at least one payment method associated with your account.'
messages.error(request, message=message)
logger.info('User failed to delete only payment method.')
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
if request.POST.get('new_prim'):
logger.info('User is changing their default payment method.')
card_id = request.POST.get('new_prim')
print(card_id)
card = stripe.Card.retrieve(id=card_id, customer=user_membership.stripe_customer_id)
stripe.Customer.modify(user_membership.stripe_customer_id,
default_source=card)
message = 'You have changed your primary payment method.'
messages.success(request, message=message)
else:
logger.info('Customer is adding a payment method.')
stripe.Customer.create_source(
user_membership.stripe_customer_id,
source=request.POST.get('stripeToken')
)
message = 'You have added this payment method to your account.'
messages.success(request, message=message)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
return render(request, 'memberships/update_payment.html',
{'title': title, 'description': description, 'key': key,
'current_payment_methods': current_payment_methods,
'customer': customer})
返回此錯誤而不是成功響應。
“無法檢索沒有客戶,收件人或帳戶ID的卡。使用customer.sources.retrieve('card_id'),recipient.cards.retrieve('card_id')或account.external_accounts.retrieve('card_id')代替。”
解決方案是通過客戶對象檢索卡。
customer = stripe.Customer.retrieve(user_membership.stripe_customer_id)
card = customer.sources.retrieve(card_id)
stripe.Customer.modify(user_membership.stripe_customer_id,
default_source=card)
如果該卡已與客戶關聯,則只需一個API請求即可執行此操作:
customer = stripe.Customer.modify('cus_123',default_source='card_123')
檢索卡時,您也可以將其轉換為一個API請求,而無需先檢索客戶:
card = stripe.Customer.retrieve_source('cus_123', 'card_123')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.