我知道如何使用python和stripe更新信用卡。但是,建议敏感信息不能通过我们的服务器。使用stripe.js将其提交到条带。我只看到了使用stripe.js创建信用卡的例子。我们如何使用python和stripe.js更新信用卡
请帮忙。提前谢谢。
答案 0 :(得分:8)
这类似于创建客户或为客户卡充电。您可以使用相同的条带按钮发布到另一个文件。您可以添加一个隐藏的输入,其中包含要替换的卡的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&amp; https://stripe.com/docs/api#create_card
答案 1 :(得分:0)
据推测,您希望替换现有条带客户的默认信用卡,而该客户的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
答案 2 :(得分:0)
我不认为Stripe.js supports我们正在考虑使用它,尽管它看起来像条纹API does。
也就是说,这里有一些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 =&#34; address_city&#34;,data-stripe =&#34; address_country&#34;等)现在将张贴到您的表单操作,而使用Stripe时.js独占,只传递卡片令牌。此时,您可以通过Stripe API更新卡详细信息,这可以通过完成 a&#34;新的信用卡令牌&#34;只需引用卡ID即可。
有关那里的文档,请参阅https://stripe.com/docs/api#update_card。
我刚刚与我的测试成功并获得了一个新活动:
jdoe@example.com updated a Visa ending in 4242. 2015/12/15 13:47:43