我在models.py文件末尾有这段代码
from paypal.standard.ipn.signals import payment_was_successful
def confirm_payment(sender, **kwargs):
# it's important to check that the product exists
logging.debug('** CONFIRMED PAYMENT ***') #never reached this point
try:
bfeat = BuyingFeature.objects.get(slug=sender.item_number)
except BuyingFeature.DoesNotExist:
return
# And that someone didn't tamper with the price
if int(bfeat.price) != int(sender.mc_gross):
return
# Check to see if it's an existing customer
try:
customer = User.objects.get(email=sender.payer_email)
except User.DoesNotExist:
customer = User.objects.create(
email=sender.payer_email,
first_name=sender.first_name,
last_name=sender.last_name
)
# Add a new order
CustomerOrder.objects.create(customer=customer, feature=bfeat, quantity=1, paypal_email=sender.payer_email, invoice=sender.invoice, remarks='')
payment_was_successful.connect(confirm_payment)
整个过程运行正常。付款已完成。 return_url和cancel_url工作正常。 notify_url是通过paypal沙盒的测试工具测试的,并且工作正常。但是,从未收到信号。
信号代码放在models.py的末尾,django-paypal代码放在我项目的目录中。
(代码被here''偷走')
我必须做一些完全错误的事情。任何帮助将不胜感激!
答案 0 :(得分:2)
在django-paypal中,基本交易有两个信号:
payment_was_successful
payment_was_flagged
你必须处理这两个信号。
答案 1 :(得分:1)
我遇到了这个问题 - 并且已经针对一些类似的问题找到了针对我的具体案例的解决方案。我在这里提到它以防其他人撞到这堵墙。
我没有彻底研究过,但看起来它高度依赖于你从哪个版本/存储库中获取django-paypal的副本。具体来说,我下载的版本未更新以适应{%csrf_token%}惯用法。为了实现这一点,我必须将@csrf_exempt装饰器添加到两个视图中:
答案 2 :(得分:0)
django-paypal
中有settings.INSTALLED_APPS
吗?
我没有看到任何其他原因导致信号不被触发,否则。