簡體   English   中英

如何使用stripe.js和python更新信用卡

[英]How to update credit card using stripe.js and python

我知道如何使用python和stripe更新信用卡。 但是,建議敏感信息不能通過我們的服務器。 使用stripe.js將其提交到條帶。 我只看到了使用stripe.js創建信用卡的例子。 我們如何使用python和stripe.js更新信用卡

請幫忙。 提前致謝。

這將類似於創建客戶或對客戶卡充電。 您可以使用相同的條帶按鈕發布到另一個文件。 您可以添加一個隱藏的輸入,其中包含要替換的卡的customerID。

<form action='PYTHON FILE' method='POST'>
    <input type='hidden' name='cuid' value='<?php echo $cuid?>'/>
    <script
        src='https://checkout.stripe.com/checkout.js' class='stripe-button'
        data-key='YOUR TOKEN'
        data-panel-label='Change Card'
        data-label='Change Card'
        data-name='Change Card'
        data-description='Change your card'
        data-billing-address='false'>
    </script>
</form>

在此PYTHON FILE頁面上,您將連接到條帶,檢索您的客戶並使用發布的令牌條帶添加新卡(或“源”是條帶調用它)。 然后,您將獲得新創建的卡的ID,並將您客戶的默認卡更新為此ID!

import stripe
stripe.api_key ="YOUR KEY" #ENTER YOUR KEY HERE
token = request.POST['stripeToken']
try:
    cuid = request.POST['cuid'];

    #GET CUSTOMER ON FILE
    customer = stripe.Customer.retrieve(cuid)

    #CREATE NEW CARD THAT WAS JUST INPUTTED USING THE TOKEN
    card = customer.sources.create(source=token)

    #GET NEW CARD ID
    newcardID = card.id

    #SET CUSTOMER'S NEW CARD ID TO TO DEFAULT
    customer.default_source = newcardID

    #SAVE NEW CARD
    customer.save()

except stripe.error.CardError, e:
# The card has been declined
pass

所有文件都記錄在條紋上: https//stripe.com/docs/api#retrieve_customer&https//stripe.com/docs/api#create_card

據推測,您希望替換現有條帶客戶的默認信用卡,該客戶的ID是您所知道的。

您需要從stripe.js獲取卡令牌,就像創建新卡時一樣。

卡令牌將提交給您的python應用程序,該應用程序檢索條帶Customer並附加新的卡令牌。

# get the stripe customer
cu = stripe.Customer.retrieve({CUSTOMER_ID})
# change the card property
cu.card = {CARD_TOKEN}
# save the customer
cu.save()

有關詳細信息,請參閱Stripe文檔: https//stripe.com/docs/api#update_customer

我不認為Stripe.js 支持我們要找這個做的,雖然看起來條紋API

也就是說,這里是我編寫的一些jQuery,可以很好地使用現有的Stripe.js表單,讀取這些Stripe數據屬性的值,並在提交時附加表單(這實際上是我現在看到的唯一解決方法)。

/*
 * Finds elements in form by data-KEY attributes where KEY in fields array
 */
var includeStripeData = function(form, fields)
{
    for (var i in fields)
    {
        // Skip if <input name="k" /> already exists (won't overwrite)
        var k = fields[i];
        if (form.find('input[name=' + k + ']').length)
        {
            console.log('Field exists: input[name=' + k + ']');
            continue;
        }

        // Skip if <input data-stripe-k="..." /> is not found
        var field = form.find('input[data-stripe=' + k + ']');
        if (!field)
        {
            console.log('Stripe field not found: input[data-stripe=' + k + ']');
            continue;
        }

        // Append to form
        form.append($('<input type="hidden" />').attr('name', k).val(field.val()));
    }
}

$('.update-card').submit(function() {
    var stripeFields = [
        'name',
        'address_line1',
        'address_line2',
        'address_city',
        'address_state',
        'address_zip',
        'address_country'
    ];

    includeStripeData($(this), stripeFields);
});

注意:這些字段(即data-stripe =“address_city”,data-stripe =“address_country”等)現在將張貼到您的表單操作,而當僅使用Stripe.js時,只傳遞卡令牌。 此時,您可以通過Stripe API更新卡詳細信息,只需參考卡ID即可在沒有 “新信用卡令牌”的情況下完成。

有關文檔,請參閱https://stripe.com/docs/api#update_card

我剛剛與我的測試成功並獲得了一個新的事件:

jdoe@example.com updated a Visa ending in 4242. 2015/12/15 13:47:43

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM