Django: как преобразовать скрипт PayPal для оплаты по прибытии?

На данный момент мне не нужны онлайн-платежи. Я настраиваю свой сайт электронной коммерции так, чтобы курьер отправлял посылки и собирал плату. Как я могу настроить скрипт PayPal, чтобы он пропускал проверки и пока регистрировал платежи только как по прибытии (добавив другую новую кнопку для выполнения этой задачи)?

Вот мой код: Шаблоны:

<script>
        //generare CSRFToken
        function getCookie(name) {
            let cookieValue = null;
            if (document.cookie && document.cookie !== '') {
                const cookies = document.cookie.split(';');
                for (let i = 0; i < cookies.length; i++) {
                    const cookie = cookies[i].trim();
                    // Does this cookie string begin with the name we want?
                    if (cookie.substring(0, name.length + 1) === (name + '=')) {
                        cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                        break;
                    }
                }
            }
            return cookieValue;
        }

        const csrftoken = getCookie('csrftoken');
        var amount = "{{ grand_total }}"
        var url = "{% url 'payments' %}"
        var orderID = "{{ order.order_number }}"
        var payment_method = 'ramburs'
        var redirect_url = "{% url 'order_complete' %}"
        // Render the PayPal button into #paypal-button-container
        paypal.Buttons({

            // Set up the transaction
            createOrder: function(data, actions) {
                return actions.order.create({
                    purchase_units: [{
                        amount: {
                            value: amount,
                        }
                    }]
                });
            },

            // Finalize the transaction
            onApprove: function(data, actions) {
                return actions.order.capture().then(function(orderData) {
                    console.log('Capture result', orderData, JSON.stringify(orderData, null, 2));
                    var transaction = orderData.purchase_units[0].payments.captures[0];
                    sendData();
                    function sendData(){
                       fetch(url, {
                           method: "POST",
                           headers: {
                            "Content-type": "application/json",
                            "X-CSRFToken": csrftoken,
                           },
                           body: JSON.stringify({
                               orderID: orderID,
                               transID: orderData.id,
                               payment_method: payment_method,
                               status: orderData.status,
                           }),
                       })
                       .then((response) => response.json())
                       .then((data) => {
                           window.location.href = redirect_url + '?order_number='+data.order_number+'&payment_id='+data.transID;
                        });
                   }
                });
            }

        }).render('#paypal-button-container');
    </script>
<script src="https://www.paypal.com/sdk/js?client-id=xxx&currency=USD"></script>

Просмотров:

def payments(request):
    body = json.loads(request.body)
    order = Order.objects.get(user=request.user, is_ordered=False, order_number=body['orderID'])     

    payment = Payment(
        user = request.user,
        payment_id = body['transID'],
        payment_method = body['payment_method'],
        amount_paid = order.order_total,
        status = body['status'],
    )
    payment.save()
    order.payment = payment
    order.is_ordered = True
    order.save()

    JSONResponse
    data = {
        'order_number': order.order_number,
        'transID': payment.payment_id,
    }

    return JsonResponse(data)

Поскольку нам больше не нужна дополнительная информация, необходимая для платежей paypal, нам больше не нужно использовать javascript. Таким образом, код должен быть изменен следующим образом:

В шаблонах нам нужна только кнопка:

<a href="{% url 'payments' %}" id="payment" class="btn btn-primary btn-block">Order </a>

А в видах:

def payments(request):
    order = Order.objects.get(user=request.user, is_ordered=False) 
    #generate payment id
    yr = int(datetime.date.today().strftime('%Y'))
    dt = int(datetime.date.today().strftime('%d'))
    mt = int(datetime.date.today().strftime('%m'))
    d = datetime.date(yr,mt,dt)
    current_date = d.strftime("%Y%m%d")
    payment_number = current_date + str(order.id)

 payment = Payment(
        user = request.user,
        payment_id = payment_number,
        payment_method = 'pay on arrival',
        amount_paid = order.order_total,
        status = 'completed',
    )
    payment.save()
    order.payment = payment
    order.is_ordered = True
    order.save()

return redirect('store')

Back to Top