我正在尝试让两个第三方应用程序相互通信:Django-PayPal和django-registration。付款成功后,PayPal向提供的 URL 发送 IPN 信号。我希望这个信号来验证注册了django注册的用户。
成功付款后,似乎 IPN 不是由沙箱发送PayPal但我不确定它只是我的信号代码设置方式没有问题。
signals.py 在 init 中导入.py
import signals
我正在使用 ngrok 允许PayPal沙盒访问我的本地主机。
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')),
可能是因为您使用的是测试端口(如 8000
)而不是标准端口80
。
当我切换到端口 80
时,我能够接收 IPN 通知、触发信号并适当地处理信号。
这个问题引导我走上了这条道路:我如何允许 django-merchant 接收PayPal IPN 构象?