Search code examples
djangopaypal-sandboxdjango-paypal

Not getting notified on return/return_cancel using Django paypal


Am using django paypal for my e-commerce site and payments are all working correctly,but once payment is done it is not redirected back to my site.Am using paypal IPN in my localhost.is it because am running in my local machine,Following is the code for sending data to paypal.

def checkout(request,name):
    product=Products.objects.get(name=name)
    print "producttttttttttttttttttttt",product
    # What you want the button to do.
    paypal_dict = {
        "business": settings.PAYPAL_RECEIVER_EMAIL,
        "amount": product.price,
        "item_name": product.name,
        "invoice": "unique-invoice-id",
        "notify_url": "192.168.5.108:8000" + reverse('paypalipn'),
        "return_url": "192.168.5.108:8000/payment-complete/",
        "cancel_return": "192.168.5.108:8000",

    }
    form = PayPalPaymentsForm(initial=paypal_dict)
    context = {"form": form}
    return render_to_response("payment.html", context)

Following view is for getting data from paypal ipn:

def paypalipn(request,item_check_callable=None): ''' django paypal view to store the IPN . the notify url excecutes this view. ''' print "haaaaaaaaaaaaaaaaaaaaaaaaaaiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii" """ PayPal IPN endpoint (notify_url). Used by both PayPal Payments Pro and Payments Standard to confirm transactions. https://www.paypal.com/it/home

PayPal IPN Simulator:
https://developer.paypal.com/cgi-bin/devscr?cmd=_ipn-link-session
"""
#TODO: Clean up code so that we don't need to set None here and have a lot
#      of if checks just to determine if flag is set.
flag = None
ipn_obj = None

# Clean up the data as PayPal sends some weird values such as "N/A"
# Also, need to cope with custom encoding, which is stored in the body (!).
# Assuming the tolerate parsing of QueryDict and an ASCII-like encoding,
# such as windows-1252, latin1 or UTF8, the following will work:

encoding = request.POST.get('charset', None)

if encoding is None:
    flag = "Invalid form - no charset passed, can't decode"
    data = None
else:
    try:
        data = QueryDict(request.body, encoding=encoding)
    except LookupError:
        data = None
        flag = "Invalid form - invalid charset"

if data is not None:
    date_fields = ('time_created', 'payment_date', 'next_payment_date',
                   'subscr_date', 'subscr_effective')
    for date_field in date_fields:
        if data.get(date_field) == 'N/A':
            del data[date_field]

    form = PayPalIPNForm(data)
    if form.is_valid():
        try:
            #When commit = False, object is returned without saving to DB.
            ipn_obj = form.save(commit=False)
        except Exception, e:
            flag = "Exception while processing. (%s)" % e
    else:
        flag = "Invalid form. (%s)" % form.errors

if ipn_obj is None:
    ipn_obj = PayPalIPN()

#Set query params and sender's IP address
ipn_obj.initialize(request)

if flag is not None:
    #We save errors in the flag field
    ipn_obj.set_flag(flag)
else:
    # Secrets should only be used over SSL.
    if request.is_secure() and 'secret' in request.GET:
        ipn_obj.verify_secret(form, request.GET['secret'])
    else:
        ipn_obj.verify(item_check_callable)
ipn_obj.save()
return HttpResponse("OKAY")

Plese Help???


Solution

  • The issue happened because i was working on localhost,when i moved to development server it worked for me.The page was redirected back to my site.