我一直在Django 3中提供订阅类型服务,我正在关注有关如何使用Django 2进行该操作的教程,然后将其放入Django 3上下文中。 我一直为我的stripeToken收到MultiValueDictKeyError,但实际上看不到为什么。 这是我的模板和脚本-
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
event.preventDefault();
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error.
var errorElement = document.getElementById('card-errors');
errorElement.textContent = result.error.message;
} else {
// Send the token to your server.
stripeTokenHandler(result.token);
}
});
});
var successElement = document.getElementById('stripe-token-handler');
document.querySelector('.wrapper').addEventListener('click', function() {
successElement.className = 'is-hidden';
});
function stripeTokenHandler(token) {
successElement.className = '';
successElement.querySelector('.token').textContent = token.id;
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
// Submit the form
form.submit();
}
模板-
<form id="payment-form">
{% csrf_token %}
<div id="card-element" class="MyCardElement">
<!-- Elements will create input elements here -->
</div>
<div id="card-errors" role="alert"></div>
<button class="btn mt-5" type="submit">Submit</button>
<div id="stripe-token-handler" class="is-hidden">Success! Got token: <span class="token"></span></div>
</form>
,如果有什么用,下面是使用令牌变量的模板:
def payments(request):
user_membership = get_user_membership(request)
selected_membership = get_selected_membership(request)
if request.method == "POST":
token = request.POST['stripeToken']
customer = stripe.Customer.retrieve(user_membership.stripe_customer_id)
customer.source = token
customer.save()
subscription = stripe.Subscription.create(
customer=user_membership.stripe_customer_id,
items=[
{ "plan": selected_membership.stripe_plan_id },
]
)
context = {
'subscription_id': subscription.id
}
return redirect(reverse('update-transactions', context))
context = {
'selected_membership':selected_membership
}
return render(request, 'memberships/payment.html', context)