Задержка Django PayPal

#django #paypal #paypal-sandbox #paypal-ipn #django-paypal

#django #paypal #paypal- песочница #paypal-ipn #django-paypal

Вопрос:

Я создаю платежную систему для проекта, над которым я работаю, и я использую django-paypal. Я последовал их руководству и внедрил сигналы, и все работает правильно (пользователь нажимает на кнопку -> перенаправляется на paypal -> если все хорошо, отображается страница успеха). Дело в том, что в моих сигналах у меня есть вещь, в которой я хочу давать пользователям очки при выполнении функции покупки. У меня есть это в моих сигналах, но есть задержка между отображением страницы успеха и фактическим сигналом, получающим данные и выполняемым. Я не знаю, связано ли это с тем, что я использую такие вещи, как ngrok и localtunnel, или это что-то еще.

Это мой signals.py

 from paypal.standard.models import ST_PP_COMPLETED
from paypal.standard.ipn.signals import valid_ipn_received, invalid_ipn_received
from account.models import Account

def show_me_the_money(sender, **kwargs):
    ipn_obj = sender
    if ipn_obj.payment_status == ST_PP_COMPLETED:
        if ipn_obj.receiver_email != "**":
            # Not a valid payment
            print("BAD EMAIL")
        else:
            print("ALL GOOD")
            acc = Account.objects.get(account_url=ipn_obj.custom)
            acc.coins = acc.coins   int(ipn_obj.mc_gross)
            acc.save()
    else:
        print("FAIL")

valid_ipn_received.connect(show_me_the_money)
 

Итак, если я все понимаю, все правильно, но по какой-то причине происходит задержка, и я не знаю, что ее вызывает.

Ответ №1:

IPN — это асинхронная отправка сообщений с серверов PayPal на ваши, поэтому вы всегда можете ожидать некоторой неопределенной задержки, которая может варьироваться. Это не совсем «мгновенный», несмотря на название (только более мгновенный, чем проверка вашей электронной почты, что было понятием, когда оно появилось десятилетия назад). Это старая технология и, конечно, не идеальное решение, на которое можно положиться.

Рекомендуемым решением было бы выполнить интеграцию текущего API PayPal на стороне сервера. Создайте на своем сервере два маршрута, которые возвращают JSON, один для ‘Create Order’ и один для ‘Capture Order’, описанные здесь . Второй маршрут может проверять успешность и выполнять свою show_me_the_money или любую другую бизнес-логику прямо перед возвратом ответа JSON.

Поток утверждения для сопряжения с вашими двумя вышеупомянутыми маршрутами таков: https://developer.paypal.com/demo/checkout/#/pattern/server