@AntonIgin

Как настроить HTTP-уведомления от Яндекс.Деньгах в Django?

Собственно, суть моей проблемы в заголовке. Нужно принимать HTTP-запрос, приходящий после перевода на Яндекс.Деньги. Для этих целей зашел в настройки уведомления: https://money.yandex.ru/myservices/online.xml

В поле адреса указал ссылку на представление-обработчик, а если точнее, то rankoff.pythonanywhere.com/order/check_order/.

Для теста взял переменную test_notification, которая, если я верно понял документацию, должна быть в запросе. Вот ссылка на документ: https://tech.yandex.ru/money/doc/dg/reference/noti...

Вот только не приходит ничего. Не подскажете, в чем может быть проблема?

Код представления, которое принимает уведомление

def CheckOrder(request):
    if request.method=='POST':
        changed_good = Product.objects.get(pk=1)
        changed_good.description='Проверка' #Для проверки факта, что запрос вообще пришел на сервер
        changed_good.save()
        amount = request.POST.get('amount')
        sender = request.POST.get('sender')
        note = ''
        if request.POST.get('test_notification'):
            note = request.POST.get('test_notification')
        mail_host = 'oriflamesender@gmail.com'
        recipients= ['a_igin@mail.ru',]
        message = '''
            Вам пришел перевод! Вот данные:
            Сумма:{0}
            Отправитель:{1}
            Секретный код: {2}'''.format(amount, sender, note)
        subject= 'Данные о переводе'
        send_mail(subject, message, mail_host, recipients, fail_silently=False)
    return redirect('/')


Карточка объекта Product, указанная в начале представления, нужна мне, чтобы видеть, что письмо вообще пришло и начало обрабатываться. Но даже карточка не меняется, то есть то ли условие if не выполнено, то ли вообще ссылка в настройках Яндекса указана неправильно. Для проверки прилагаю два файла urls.

Главный urls.py
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^cart/', include('shop_cart.urls', namespace='cart')),
    url(r'^order/', include('orders.urls', namespace='orders')),
    url(r'', include('main_site.urls')),
] +static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

urls.py приложения order

urlpatterns = [
    url(r'^create/$', views.OrderCreate, name='OrderCreate'),
    url(r'^payment/$', views.Payment, name='Payment'),
    url(r'^check_order/$', views.CheckOrder, name='CheckOrder'),

]


Что я сделал не так? Буду рад любым подсказкам.
  • Вопрос задан
  • 702 просмотра
Пригласить эксперта
Ответы на вопрос 1
@FulTupFul
Итак первая возможная проблема это кросс доменные запросы.
https://developer.mozilla.org/ru/docs/Web/HTTP/CORS
Яндекс отсылает вам подтверждения со своих серверов и вам нужно их внести в белый список, а также разрешить метода post и get. Можете разрешить cors запросы при помощи django-cors:
https://pypi.org/project/django-cors-headers/
Также смотрите логи
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы