Что делать дальше после Ajax success?

Здравствуйте!

Пытаюсь сделать автоматический возврат денег, если клиент желает отменить трансфер.

Логика следующая:
1. Клиент получает email с подтверждением трансфера в котором есть так же ссылка отмены вида - mysite.ru/cancel-order.php?order_id=CIEKGMI
2. при переходе по ссылке парсим order_id и Ajax-ом отправляем на обработчик
spoiler

cancel-order.php
$url_queries = array();
parse_str($_SERVER['QUERY_STRING'], $url_queries);
$order_id = $url_queries['order_id'];


$(document).ready(function() {
                'use strict';

                $.ajax({
                    type: "POST",
                    url: "cancel-order-controller.php",
                    dataType: "json",
                    data: {
                        order_id: "<?php echo $order_id; ?>"
                    },
                    success: function(data) {
                        console.log(data.code);
                        if (data.code == "200") {
                            console.log(data.msg);
                        } else {
                            console.log(data.msg);
                        }
                    },
                    error: function() {
                        console.log('error', arguments);
                    },
                    complete: function() {
                        console.log('complete', arguments);
                    }
                }).done(function() {
                    console.log('done', arguments);
                });
                return false;
            });



В обработчике чекаем базу и проводи логические действия:

spoiler

cancel-order-controller.php
function getPercentOfNumber($number, $percent){
	    return ($percent / 100) * $number;
	}

    $connection = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    $connection->set_charset("utf8");
    
    if (!$connection) {
        die("Connection failed: " . mysqli_connect_error());
    }

    $order_id = $_POST['order_id'];

    $sql = "SELECT *, HOUR(TIMEDIFF(pickupdate , NOW())) AS diff FROM orders WHERE id = '$order_id'";
    $check_query = mysqli_query($connection,$sql);
    $row = mysqli_fetch_array($check_query);

    if( $row >= 1 ) {

        if($row['diff'] > 24){
            // if pickup date more 24h

            $online_payment = $row['online_payment'] * 100;
            $driver_payment = $row['driver_payment'] * 100;

            // if online payment = 100%
            if($driver_payment == 0){
                if($online_payment >= 500 && $online_payment <= 2499){
                    $amount = $online_payment - 100;
                } else {
                    $amount = getPercentOfNumber($online_payment, 3);
                }
            } else{
                if($online_payment <= 100 ){
                    $amount = 0;
                } else if($online_payment >= 101 && $online_payment <= 2499){
                    $amount = $online_payment - 100;
                } else {
                    $amount = getPercentOfNumber($online_payment, 3);
                }
            }

            // $refund = \Stripe\Refund::create([
            //     'payment_intent' => $row['stripe_pi'],
            //     'amount' => $amount,
            //     'reason' => 'Cancel order before 24h'
            // ]);

            $out = array(
                'id' => $row['stripe_pi'],
                'diff' => $row['diff'],
                'msg' => 'More 24h - you get '.$amount.'€',
                'refund' => $refund
            );

            echo json_encode(['code'=>200, 'msg'=>$out]);

        } else if($row['diff'] < 24 && $row['diff'] > 12) {
            // if pickuptime more 12h - refund 85% if payment online 100% and 0% if payment partial

            // $refund = \Stripe\Refund::create([
            //     'payment_intent' => $row['stripe_pi'],
            //     'amount' => $amount,
            //     'reason' => 'Cancel order before 12h'
            // ]);

            $out = array(
                'id' => $row['stripe_pi'],
                'diff' => $row['diff'],
                'msg' => 'More 12h',
            );

            echo json_encode(['code'=>200, 'msg'=> $out]);
        } else {
            // You are trying to cancel a transfer less than 12 hours before the time of booking. Your transfer payment becomes 15% of the price. Our regulation states that we do not return it
            $msg = 'You not get refund this time!';
            echo json_encode(['code'=>404, 'msg'=>$msg]);
        }
    } else {
        $msg = 'no DATA!';
        echo json_encode(['code'=>404, 'msg'=>$msg]);
    }

    mysqli_close($connection); // Connection Closed.



3. Вот нам Ajax возвращает что после обчислений мы клиенту вернем(или нет) n€.

4. Клиент должен подтвердить или оставить как есть.

5. Если клиент подтверждает нам нужно сделать refund (или нет) но обязательно в базе должны поменять статус заказа на "Canceled".

Вопрос:

Как дописать Ajax success/complete чтобы опять вернуться на обработчик и выполнить шаг 5. Можно ли в Ajax вставить еще один Ajax но как это обработать на сервере ? В новом файле или можно в том же cancel-order-controller.php ?

Спасибо!
  • Вопрос задан
  • 70 просмотров
Пригласить эксперта
Ответы на вопрос 1
@P747
Вам вообще не нужен тут ajax, делаете сразу ссылку на обработчик для отмены платежа, если нужно на сторонний сервер делаете запрос через curl например. Как все готово выдаете пользователю нужную информацию о статусе отмены или редирект на страницу. Вообщем один обработчик на сервере, никаких Ajax не нужно
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы