Как отменить заказ Paypal после утверждения пользователем? (API v2)

#javascript #asp.net #paypal

#javascript #asp.net #paypal

Вопрос:

Я на самом деле пытаюсь создать приложение, которое использует Papal API v2.

Я успешно создаю orader и получаю деньги в песочнице. Я использую JS метод Paypal onApprove для вызова order.capture, чтобы получить заказ и создать подписку в моих системах. Но если есть какая-то проблема в моем серверном коде, как я могу заблокировать заказ в API paypal, чтобы перестать получать деньги от пользователя, если что-то пойдет не так?

         paypal.Buttons({
            locale: 'it_IT',
            style: {
                shape: 'pill',
                color: 'blue',
                layout: 'vertical',
                label: 'buynow',
                fundingicons: 'true',
            },
            createOrder: function (data, actions) {
                return actions.order.create(my_PlanOrderDef);
            },
            onApprove: function (data, actions) {
                console.log(data)
                console.log(actions)
                return actions.order.capture().then(function (details) {
                    if (!CloseProcess(details)) {
                        console.log("FAIL! HERE SOMETHING GOING BAD ON MY LOGIC, AND I NEED TO CANCEL THE ORDER PAYMENT");
                        return false;
                    }
                });
            },
            onError: function (err) {
                console.log(err);
            }
        }).render('#btnPaypalContainer');
 

Метод CloseProcess просто вызовите мою серверную логику, чтобы создать подписку в моей системе.
Я, вероятно, что-то пропустил в логике paypal v2, поэтому прошу прощения, есть идеи для выполнения этой задачи?

Спасибо

Ответ №1:

Когда заказ создается, он действителен в течение 72 часов.

Когда заказ становится одобренным, он действителен в течение 3 часов.

Нет способа отменить заказ.

Если вы не хотите использовать заказ, удалите его идентификатор и не фиксируйте его.


Чтобы перейти на интеграцию на стороне сервера для создания и захвата заказов, следуйте руководству по настройке стандартных платежей и создайте на своем сервере 2 маршрута: один для «Создать заказ» и один для «Захватить заказ», описанный здесь . Оба маршрута должны возвращать только данные JSON (без HTML или текста). Внутри 2-го маршрута, когда API capture работает успешно, вы должны сохранить его результирующие платежные данные в своей базе данных (в частности purchase_units[0].payments.captures[0].id , идентификатор транзакции PayPal) и выполнить любую необходимую бизнес-логику (например, отправить электронное письмо с подтверждением или зарезервировать продукт) непосредственно перед отправкой вашего return JSON вызывающему интерфейсу.

Соедините эти 2 маршрута с потоком утверждения интерфейса: https://developer.paypal.com/demo/checkout/#/pattern/server

Комментарии:

1. Здравствуйте, спасибо за разъяснения, для меня не совсем ясно, что произойдет, если что-то пойдет не так после утверждения покупателем. Я вижу в песочнице, после утверждения пользователем оплата заказа обрабатывается и завершается мгновенно. Но если что-то пойдет не так в моей системе после закрытия окна утверждения paypal, и я не могу обработать заказ по техническим причинам, клиентская сторона не сможет помешать paypal получить деньги от покупателя. Это нормально?

2. Платеж не обрабатывается и не завершается автоматически после утверждения. Он завершается только после захвата. Итак, не записывайте немедленно, если вы не хотите, чтобы он был завершен немедленно. Создание и захват на стороне сервера — это наиболее надежное решение, для которого вам необходимо прекратить использование actions.order.create() и прекратить использование actions.order.capture() и перейти на интеграцию с REST API на стороне сервера. Обновите ответ с этими деталями.

3. Неясно, что вызывает CloseProcess(details) сбой в вашем примере, но эта логика может произойти до захвата. В качестве альтернативы, если эта логика должна выполняться только после успешного захвата, то при сбое этой логики вам необходимо будет вернуть платеж.

4. Спасибо, обычно в CloseProcess ничего плохого не происходит, но этот метод связывает сервер с тем, что платеж был одобрен пользователем, и поэтому он создает заказ в моей базе данных. В любом случае, если что-то пойдет не так во время создания заказа, я подумал, что могу остановить сбор заказов на стороне клиента.

5. Моя идея состояла в том, чтобы обработать заказ на стороне сервера, но, прочитав документацию по API v2, я подумал, что могу создать заказ ТОЛЬКО на стороне клиента с помощью Javascript, документация Paypal для меня немного неясна. В любом случае, если я полностью не понял ваш ответ, самое быстрое решение: onApprove: функция (данные, действия) { if (!CloseProcess()) { console.log(«СБОЙ») возвращает false; } else { return actions.order.capture().then(функция (подробности){}); } },