Using PayPal Payments Pro (WPP)
===============================
.. toctree::
:maxdepth: 2
detail
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 ``settings.py`` and add ``paypal.standard`` and ``paypal.pro`` to your
``INSTALLED_APPS`` and put in your PayPal Pro API credentials.
.. code-block:: python
INSTALLED_APPS = [
# ..
'paypal.standard',
'paypal.pro',
]
PAYPAL_TEST = True
PAYPAL_WPP_USER = "???"
PAYPAL_WPP_PASSWORD = "???"
PAYPAL_WPP_SIGNATURE = "???"
3. :doc:`/updatedb`
4. Write a wrapper view for ``paypal.pro.views.PayPalPro``:
In views.py:
.. code-block:: python
from paypal.pro.views import PayPalPro
def nvp_handler(nvp):
# This is passed a PayPalNVP object when payment succeeds.
# This should do something useful!
pass
def buy_my_item(request):
item = {"paymentrequest_0_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
ppp = PayPalPro(
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
nvp_handler=nvp_handler)
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.
payment.html:
.. code-block:: html
Show me the money
confirmation.html:
.. code-block:: html
Are you sure you want to buy this thing?
6. Add your view to ``urls.py``, and add the IPN endpoint to receive callbacks
from PayPal:
.. code-block:: python
from django.conf.urls import url, include
from myproject import views
urlpatterns = [
...
url(r'^payment-url/$', views.buy_my_item),
url(r'^paypal/', include('paypal.standard.ipn.urls')),
]
7. Profit.
Alternatively, if you want to get down to the nitty gritty and perform some
more advanced operations with Payments Pro, use the :class:`paypal.pro.helpers.PayPalWPP` class directly.
If you are testing locally using the WPP sandbox and are having SSL
problems, please see `issue 145
`_.