Django创建订阅服务

时间:2020-06-23 19:17:31

标签: django stripe-payments

我一直在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)

0 个答案:

没有答案