0

Я пытаюсь заставить два сторонних приложения разговаривать друг с другом: Django-paypal и django-registration. После успешной оплаты PayPal отправляет IPN-сигнал на предоставленный URL-адрес. Я хочу, чтобы этот сигнал аутентифицировал пользователя, зарегистрированного в django-registration.PayPal IPN сигналы для регистрации пользователя

После успешной оплаты выяснилось, что IPN не отправляется в виде песочницы paypal, но я не уверен, что это просто неверно с тем, как я установил свой код.

signals.py импортируется в инициализации .py с

import signals 

И я использую ngrok, чтобы позволить PayPal песочнице, чтобы получить доступ к моей Localhost.

views.py:

def payment(request): 

    """ 
    This is the view for the page a new user is redirected 
    to after registering (not activating) a new account. 
    """ 

    paypal_dict = { 
     "cmd": "_xclick-subscriptions", 
     "business": settings.PAYPAL_RECEIVER_EMAIL, 
     "a3": "7.99", 
     "p3": "1", 
     "t3": "M", 
     "src": "1", 
     "sra": "1", 
     "no_note": "1", 
     "item_name": "My Item", 
     "notify_url": "http://localhost:8000/accounts/register/account_activated/", 
     "return_url": "http://localhost:8000/", 
     "cancel_return": "http//www.example.com/cancel-location/", 


    } 

    form = PayPalPaymentsForm(initial=paypal_dict, button_type="subscribe") 
    context = {"form": form} 
    return render_to_response("registration/registration_complete.html", context) 

signlas.py:

from paypal.standard.models import ST_PP_COMPLETED 
from paypal.standard.ipn.signals import valid_ipn_received, payment_was_flagged 

from registration.models import RegistrationProfile 
from registration.views import ActivationView 

def payment_signal(sender, **kwargs): 
    ipn_object = sender 
    if ipn_object.payment_status == ST_PP_COMPLETED: 
     print "payment_status == ST_PP_COMPLETED" 

     """ 
     Here use django-registration to authenticate 
     the User 
     """ 

     activate_user(activation_key) 

     activation_key = ACTIVATED 

     #ActivationView.activate() 

    else: 
     print str(ipn_object.payment_status) 
     print "error" 

valid_ipn_received.connect(payment_signal) 
payment_was_flagged.connect(payment_signal) 

print "SIGNALS MODULE IMPORTED" 

urls.py:

url(r'^accounts/register/account_activated/$', include('paypal.standard.ipn.urls')), 
+0

Вы можете быть заинтересованы в статье я писал о [как проверить PayPal IPN] (https://www.angelleye.com/test-paypal-ipn/). Если вы выполните эти шаги, я уверен, что вы найдете свою проблему. –

ответ

0

Это может быть потому, что вы используете тестовый порт (например, 8000), а не стандартный порт 80.

Когда я переключился на порт 80, я смог получить уведомление IPN, вызвать сигнал и соответствующим образом обработать сигнал.

Этот вопрос привел меня по этому пути: How do I allow django-merchant to receive paypal IPN conformations?

+0

Я смог сделать это, и используя ngrok и тестер IPN, я могу отправить IPN и получить код 200 из ngrok, но на моей консоли сервера разработки django я вижу код «200 502» –

+0

. Я считаю, что это означает, что ваш Сервер разработки django подтверждает получение HTTP-пакета [см. код 200 OK] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Зарегистрировали ли вы приемники для сигналов IPN от django-paypal в методе app.ready()? Если нет, тогда IPN уведомит django, но ваше приложение ничего не сделает с данными. – w8s