Estoy administrando mis pagos usando Braintree Drop In y estoy usando Django. cuando el pago es exitoso, debe redirigir a la página de pago exitoso y cuando no tiene éxito, debe redirigir a la página de pago fallido. Defino las redirecciones en mis vistas.py pero no sé cómo debo manejar la redirección en ajax en este código después del pago, no pasa nada y la redirección no funciona. ¿Qué debo agregar a mi ajax para manejar la redirección?
Caída de Braintree en código Javascript:
<script> var braintree_client_token = "{{ client_token}}"; var button = document.querySelector('#submit-button'); braintree.dropin.create({ authorization: "{{client_token}}", container: '#braintree-dropin', card: { cardholderName: { required: false } } }, function (createErr, instance) { button.addEventListener('click', function () { instance.requestPaymentMethod(function (err, payload) { $.ajax({ type: 'POST', url: '{% url "payment:process" %}', data: { 'paymentMethodNonce': payload.nonce, 'csrfmiddlewaretoken': '{{ csrf_token }}' } }).done(function (result) { }); }); }); }); </script>
Vistas.py
@login_required def payment_process(request): order_id = request.session.get('order_id') order = get_object_or_404(Order, id=order_id) total_cost = order.get_total_cost() if request.method == 'POST': # retrive nonce nonce = request.POST.get('paymentMethodNonce', None) # create and submit transaction result = gateway.transaction.sale({ 'amount': f'{total_cost:.2f}', 'payment_method_nonce': nonce, 'options': { 'submit_for_settlement': True } }) if result.is_success: # mark the order as paid order.paid = True # store the unique transaction id order.braintree_id = result.transaction.id order.save() request.session['coupon_id'] = None return redirect('payment:done') else: return redirect('payment:canceled') else: # generate token client_token = gateway.client_token.generate() context = { 'order': order, 'client_token': client_token, } return render(request, 'process.html', context) def payment_done(request): return render(request, 'done.html') def payment_canceled(request): return render(request, 'canceled.html')
todo funciona bien excepto las redirecciones