es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo almacenar el pedido en mi base de datos después de que el pago sea exitoso en Django?

Soy un traductor español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en el markdown.

Soy principiante, estoy trabajando en la aplicación de comercio electrónico. Quiero hacer algo para crear y almacenar un pedido en la base de datos si el pago del usuario es exitoso.

Finalmente he encontrado una forma de integrar la pasarela de pago y cuando la transacción es exitosa, redirige a una página de éxito.

El problema que tengo aquí es cómo crear el pedido cuando el pago es exitoso.

Aquí está mi código.

¿Cómo puedo hacerlo? ¿Qué valor debo pasar a la vista?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear un pedido cuando el pago es exitoso, puedes pasar los valores necesarios a la vista mediante la función de retorno de llamada en el código JavaScript.

    En la función de retorno de llamada, después de la redirección a la página de éxito, puedes hacer una solicitud AJAX a una vista de Django para crear el pedido en la base de datos.

    Puedes utilizar los datos de respuesta devueltos por la pasarela de pago como parámetros para la solicitud AJAX, como el correo electrónico del cliente, el monto, la moneda, la referencia de transacción y cualquier metadato adicional.

    En la vista de Django, puedes recuperar los parámetros de la solicitud AJAX y utilizarlos para crear una nueva instancia de pedido con los campos apropiados, como el usuario, el producto, el precio y el estado de la transacción.

    Después de crear la instancia de pedido, puedes guardarla en la base de datos y devolver una respuesta adecuada a la solicitud AJAX, indicando que el pedido se ha creado correctamente.

    Aquí tienes un ejemplo de implementación:

    <script>
        const API_publicKey = "<AGREGA TU CLAVE PÚBLICA AQUÍ>";
    
        function payWithRave() {
            var x = getpaidSetup({
                PBFPubKey: API_publicKey,
                customer_email: '{{address.email}}',
                amount: '{{cart.get_total_price}}',
                customer_phone: "234099940409",
                currency: "NGN",
                txref: "rave-123456",
                meta: [{
                    metaname: "flightID",
                    metavalue: "AP1234"
                }],
                onclose: function() {},
                callback: function(response) {
                    var txref = response.data.txRef; // recopila txRef devuelto y pásalo a una página del servidor para completar la verificación del estado.
                    console.log("Esta es la respuesta devuelta después de realizar un cargo", response);
                    if (
                        response.data.chargeResponseCode == "00" ||
                        response.data.chargeResponseCode == "0"
                    ) {
                        // redirige a una página de éxito
                        window.location.href = "{% url 'checkout:payment_complete' %}";
    
                        // realiza la solicitud AJAX para crear el pedido
                        $.ajax({
                            type: "POST",
                            url: "{% url 'checkout:create_order' %}",
                            data: {
                                customer_email: '{{address.email}}',
                                amount: '{{cart.get_total_price}}',
                                currency: "NGN",
                                txref: txref,
                                flightID: "AP1234"
                            },
                            success: function(data) {
                                console.log(data);
                            },
                            error: function(xhr, status, error) {
                                console.log(xhr.responseText);
                            }
                        });
    
                    } else {
                        // redirige a una página de fracaso.
                        window.location.href = "{% url 'checkout:payment_failure' %}";
                    }
    
                    x.close(); // utiliza esto para cerrar el modal inmediatamente después del pago.
                }
            });
        }
    </script>
    

    En la vista de Django para crear el pedido, puedes recuperar los parámetros de la solicitud AJAX utilizando el diccionario request.POST, crear una nueva instancia de pedido con los campos apropiados y guardarla en la base de datos.

    from django.shortcuts import render
    from django.http import JsonResponse
    from django.contrib.auth.decorators import login_required
    from .models import Order
    
    
    @login_required
    def create_order(request):
        if request.method == "POST":
            customer_email = request.POST.get("customer_email")
            amount = request.POST.get("amount")
            currency = request.POST.get("currency")
            txref = request.POST.get("txref")
            flightID = request.POST.get("flightID")
    
            # crea una nueva instancia de pedido
            order = Order.objects.create(
                usuario=request.user,
                producto=flightID,
                precio=amount,
                referencia_transaccion=txref,
                estado="PAGADO"  # establece el estado en "PAGADO" para un pago exitoso
            )
    
            return JsonResponse({"exitoso": True})
    
        return JsonResponse({"exitoso": False})
    

    Ten en cuenta que esta implementación es solo un ejemplo y es posible que deba adaptarse para cumplir con tus requisitos específicos e implementación de la aplicación de comercio electrónico.

Comments are closed.