22

I am designing a website in Python (using Django), and I need to sell things through it.

Can somebody help me with the source code to integrate the paypal-pro (do-direct payment) or else paypal-standard (express checkout)?

Dominic Rodger
  • 97,747
  • 36
  • 197
  • 212
GS.
  • 229
  • 1
  • 2
  • 3

5 Answers5

28

You might want to try django-paypal, there's even a tutorial right there on the front page.

Antony Hatchkins
  • 31,947
  • 10
  • 111
  • 111
Dominic Rodger
  • 97,747
  • 36
  • 197
  • 212
13

paypal.standard.ipn

PayPal API Generates a Button which will call its API through paypal.standard.ipn.

For API Integration you have to follow below given steps:

Install django-paypal:

pip install django-paypal

Update settings.py file:

INSTALLED_APPS = [
    'paypal.standard.ipn',
]

PAYPAL_RECEIVER_EMAIL = 'XXXXX'
PAYPAL_TEST = True

Write Email address of Receiver. PAYPAL_TEST = True means you want a Test API payment. You can write "False" for Original payment API.

Run command:

python manage.py migrate 

In urls.py:

url(r'^paypal/', include('paypal.standard.ipn.urls')),
url(r'^payment_process/$', api_views.payment_process, name='payment_process' ),
url(r'^payment_done/$', TemplateView.as_view(template_name= "pets/payment_done.html"), name='payment_done'),
url(r'^payment_canceled/$', TemplateView.as_view(template_name= "pets/payment_canceled.html"), name='payment_canceled'),*

In views.py:

from django.conf import settings
from django.urls import reverse
from django.shortcuts import render, get_object_or_404
from paypal.standard.forms import PayPalPaymentsForm


def payment_process(request):
    host = request.get_host()
    paypal_dict = {
        'business': settings.PAYPAL_RECEIVER_EMAIL,
        'amount': '100',
        'item_name': 'Item_Name_xyz',
        'invoice': 'Test Payment Invoice',
        'currency_code': 'USD',
        'notify_url': 'http://{}{}'.format(host, reverse('paypal-ipn')),
        'return_url': 'http://{}{}'.format(host, reverse('payment_done')),
        'cancel_return': 'http://{}{}'.format(host, reverse('payment_canceled')),
    }
    form = PayPalPaymentsForm(initial=paypal_dict)
    return render(request, 'pets/payment_process.html', {'form': form})

Follow video tutorial for django-code given in reference.

In payment_process.html:

{{ form.render }}

For calling API you have request for /payment_process/. It will generate a button on HTML which calls PayPal API for transaction. Further process will be done on PayPal end, Login or Card Payment.

daaawx
  • 3,273
  • 2
  • 17
  • 16
  • Can you please elaborate following code because I am new on django . you used pets/....... what is pets ? is it your app or generic app ?url(r'^paypal/', include('paypal.standard.ipn.urls')), url(r'^payment_process/$', api_views.payment_process, name='payment_process' ), url(r'^payment_done/$', TemplateView.as_view(template_name= "pets/payment_done.html"), name='payment_done'), url(r'^payment_canceled/$', TemplateView.as_view(template_name= "pets/payment_canceled.html"), name='payment_canceled'),* – Satinder Singh Apr 12 '20 at 08:10
  • @SatinderSingh, "pets" is a Django app which is the main app in this project. – Harshdeep Khatke Apr 18 '20 at 07:01
  • Thank you for your reply . Can we customize that button like its color or size etc . Can you give me some idea . – Satinder Singh Apr 19 '20 at 03:50
3

Did you look at pypaypal? You could create a view that connects to PayPal and submit your payment commands.

Reto Aebersold
  • 16,306
  • 5
  • 55
  • 74
  • Can we send payments from a paypal personal account? All the blogs and tutorials that I have seen shows it on business account. – Nomi Sep 06 '22 at 20:08
1

Better will be to use "native" docs from owner: docs paypal

mexekanez
  • 266
  • 3
  • 7
0

This tutorial guides how to accept Paypal apps payment via sandbox ClientId & SecretKey without any third party library.

You can also send payment tracking id as custom_id in purchase_units list's dictionary object to create_order.request_body function.
As shown below:

create_order.request_body (
        {
            "intent": "CAPTURE",
            "purchase_units": [
                {
                    "custom_id": "YOUR_TRACKING_ID",
                    "amount": {
                        "currency_code": "USD",
                        "value": course.price,
                        "breakdown": {
                            "item_total": {
                                "currency_code": "USD",
                                "value": course.price
                            }
                            },
                        },                               


                }
            ]
        }
    )
Kuldeep
  • 74
  • 4