#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(функция (подробности){}); } },