Using PayPal Payments Pro (WPP)ΒΆ

PayPal Payments Pro (or “Website Payments Pro”) is a more awesome version of PayPal that lets you accept payments on your site. This is now documented by PayPal as a Classic API and should not be confused with the “PayPal Payments Pro (Payflow Edition)” which is a newer API.

The PayPal Payments Pro solution reuses code from paypal.standard so you’ll need to include both apps. django-paypal makes the whole process incredibly easy to use through the provided PayPalPro class.

  1. Obtain PayPal Pro API credentials: login to PayPal, click My Account, Profile, Request API credentials, Set up PayPal API credentials and permissions, View API Signature.

  2. Edit and add paypal.standard and to your INSTALLED_APPS and put in your PayPal Pro API credentials.

        # ..
    PAYPAL_TEST = True
    PAYPAL_WPP_USER = "???"
  3. Update the database

  4. Write a wrapper view for


    from import PayPalPro
    def buy_my_item(request):
        item = {"amt": "10.00",             # amount to charge for item
                "inv": "inventory",         # unique tracking variable paypal
                "custom": "tracking",       # custom tracking variable for you
                "cancelurl": "http://...",  # Express checkout cancel url
                "returnurl": "http://..."}  # Express checkout return url
        kw = {"item": item,                            # what you're selling
              "payment_template": "payment.html",      # template name for payment
              "confirm_template": "confirmation.html", # template name for confirmation
              "success_url": "/success/"}              # redirect location after success
        ppp = PayPalPro(**kw)
        return ppp(request)
  5. Create templates for payment and confirmation. By default both templates are populated with the context variable form which contains either a PaymentForm or a Confirmation form.


    <h1>Show me the money</h1>
    <form method="post" action="">
      {{ form }}
      <input type="submit" value="Pay Up">


    <!-- confirmation.html -->
    <h1>Are you sure you want to buy this thing?</h1>
    <form method="post" action="">
      {{ form }}
      <input type="submit" value="Yes I Yams">
  6. Add your view to, and add the IPN endpoint to receive callbacks from PayPal:

    urlpatterns = ('',
        (r'^payment-url/$', 'myproject.views.buy_my_item')
        (r'^some/obscure/name/', include('paypal.standard.ipn.urls')),
  7. Connect to the provided signals in and have them do something useful:

    • payment_was_successful
    • payment_was_flagged
  8. Profit.

Alternatively, if you want to get down to the nitty gritty and perform some more advanced operations with Payments Pro, use the class directly.