Работа с платежными системами в django (paypal, webmoney)

28
Работа с платежными системами в Django (Paypal, WebMoney) Моргун Иван Моргун Иван blog blog : http://proft.com.ua : http://proft.com.ua twitter twitter : @proft : @proft PyCamp Kyiv 2010 PyCamp Kyiv 2010

Upload: proft

Post on 03-Jul-2015

4.833 views

Category:

Technology


3 download

TRANSCRIPT

Работа с платежными системами в Django (Paypal, WebMoney)

Моргун ИванМоргун Иван

blogblog : http://proft.com.ua : http://proft.com.uatwittertwitter: @proft: @proft

PyCamp Kyiv 2010 PyCamp Kyiv 2010

Почему Django?

Django — свободный фреймворк для веб-приложений на языке Python.

(wikipedia)

Полная документация Python ORM Встроенный сервер для разработки Готовая админка Богатый набор приложений Шаблоны Формы

8 причин использовать Django*

* @coderholic http://www.coderholic.com/8-reasons-why-you-should-try-django/

Про PaypalПро Paypal

основана в 1998 году куплена eBay в 2002 свыше 180,000 счетов доступна в более чем 100 странах 19 валют компании, основанные бывшими сотрудниками

Виды платежейВиды платежей

Website Payments Standard Instant Payment Notification (IPN) Payment Data Transfer (PDT) PayPal API Website Payments Pro Direct PaymentExpress Checkout

Виды счётовВиды счётов

Personal account (до 500 $)

Premier account (API, IPN, PDT)

Business account (API, отчеты, Multi-User Access)

Sandbox account (отладочный)

Статус счётаСтатус счёта

Verified Confirmed Limited Closed

Готовые HTML шаблоны для: Кнопка Buy Now — покупка одного товара Кнопка Donations — благотворительность Subscriptions — периодически повторяющиеся оплата PayPal Shopping Cart — заказ нескольких товаров Cart Upload — корзина, разработанная третьим лицом

Website Payments StandardWebsite Payments Standard

Website Payments StandardWebsite Payments Standard

Пример кнопки Buy NowПример кнопки Buy Now<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_xclick"/><input type="hidden" name="business" value="[email protected]"/><input type="hidden" name="item_name" value="Django book"/><input type="hidden" name="item_number" value="123"/><input type="hidden" name="amount" value="75.00"/><input type="hidden" name="no_shipping" value="2"/><input type="hidden" name="no_note" value="1"/><input type="hidden" name="currency_code" value="USD"/><input type="hidden" name="bn" value="PP-BuyNowBF"/><input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif"border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"/><img alt="" border="0" src="https://www.paypal.com/en_US/i/scr/pixel.gif"width="1" height="1"/></form>

• business — email продавца• item_name — имя товара• item_number — артикль товара• amount — сумма• currency_code — валюта• image — url изображения

Shopping CartShopping Cart

PayPal Shopping Cart Cart UploadПередаем в Paypal всю сумму для всех товаров в корзине

Передаем в Paypal сумму каждого товара отдельно, для всех товаров в корзине

Пример Shopping CartПример Shopping Cart

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"><input type="hidden" name="cmd" value="_cart"/><input type="hidden" name="upload" value="1"/><input type="hidden" name="business" value="[email protected]"/><input type="hidden" name="item_name_1" value="Shoes 1"/><input type="hidden" name="amount_1" value="1.00"/><input type="hidden" name="quantity_1" value="1"/><input type="hidden" name="item_name_2" value="Shoes 2"/><input type="hidden" name="amount_2" value="2.00"/><input type="hidden" name="quantity_2" value="3"/><input type="submit" value="PayPal"/></form>

Encrypted Website Payments (EWP)Encrypted Website Payments (EWP)

Email продавца URL возврата, после покупки Сумма Количество Любое другое поле

Payment Data TransferPayment Data Transfer

Индетификация покупателя по Transaction ID

Payment Data TransferPayment Data Transfer

Instant Payment NotificationInstant Payment Notification

PayPal APIPayPal API SOAP — объектно-ориентированный интерфейс, использующий объекты данных определенные схемой eBay Business Language (eBL). Запросы и ответы отсылаются как объекты через протокол SOAP. Name-Value Pair (NVP) — использует словарь переменных, похожих как в схеме eBL. Запросы и ответы отсылаются как простые строки через протокол HTTP.

Paypal API: MassPay, поиск транзакций, получение информации о транзакции и т.д.

Django-paypal — application для Django реализующий Website Payments Standard (Buy now) и Website Payments Pro (Direct Payment, Express Checkout)

http://goo.gl/M5Nfby

johnboxall [email protected]

django-paypaldjango-paypal

Пример использования django-paypal (IPN)Пример использования django-paypal (IPN)1. git clone git://github.com/johnboxall/django-paypal.git paypal

2. # settings.pyINSTALLED_APPS = (... 'paypal.standard.ipn', ...)PAYPAL_RECEIVER_EMAIL = "[email protected]"

3. Вид (views.py):from paypal.standard.forms import PayPalPaymentsFormdef view_that_asks_for_money(request):

paypal_dict = { "business": "[email protected]", "amount": "100", "item_name": "Shoes 1", "invoice": "101", "notify_url": "http://www.sait.com/ipn-location/", "return_url": "http://www.sait.com/return-location/", "cancel_return": "http://www.sait.com/cancel-location/", } form = PayPalPaymentsForm(initial=paypal_dict) context = {"form": form} return render_to_response("payment.html", context)

4. Шаблон (payment.html)

<b>Hello user! You buy now 'Shoe 1'!</h1>{{ form.render }}

Пример использования django-paypal (IPN)Пример использования django-paypal (IPN)

5. При покупке товара PayPal сделает POST запрос к notify_url.

# urls.pyurlpatterns = patterns('', (r'^ipn-location/', include('paypal.standard.ipn.urls')),)

6. После обработки IPN — будет отправлен сигнал с результатом транзакции. Два сигнала для обычных транзакции:

payment_was_succesful payment_was_flagged

и 4 для Subscription.

# models.pyfrom paypal.standard.ipn.signals import payment_was_successful

def show_me_the_money(sender, **kwargs): ipn_obj = sender if ipn_obj.custom == "Upgrade all users!": Users.objects.update(paid=True) payment_was_successful.connect(show_me_the_money)

Пример использования django-paypal (WPS+Пример использования django-paypal (WPS+EWPEWP))

1. Для шифрования кнопки нам понадобится библиотека M2Crypto easy_install M2Crypto

2. Создаем приватный ключ, который будет использоватся в сертификате для зашифрованной кнопки: openssl genrsa -out paypal.pem 1024

3. Создаем публичный ключ:openssl req -new -key paypal.pem -x509 -days 365 -out pubpaypal.pem

4. Загружаем публичный ключ в свой Paypal Account или Sandbox:https://www.paypal.com/us/cgi-bin/webscr?cmd=_profile-website-certhttps://www.sandbox.paypal.com/us/cgi-bin/webscr?cmd=_profile-website-cert

5. Копируем CertID.

6. Скачиваем публичный ключ от Paypal.

7. В settings.py добавляем: PAYPAL_PRIVATE_CERT = '/path/to/paypal.pem'PAYPAL_PUBLIC_CERT = '/path/to/pubpaypal.pem'PAYPAL_CERT = '/path/to/paypal_cert.pem'PAYPAL_CERT_ID = 'get-from-paypal-website'

Пример использования django-paypal (WPS+Пример использования django-paypal (WPS+EWPEWP))

8. В view.py заменяем PayPalPaymentsForm на PayPalEncryptedPaymentsForm

from paypal.standard.forms import PayPalEncryptedPaymentsForm

def view_that_asks_for_money(request):

paypal_dict = { "business": "[email protected]", "amount": "100", "item_name": "Shoes 1", "invoice": "101", "notify_url": "http://www.sait.com/ipn-location/", "return_url": "http://www.sait.com/return-location/", "cancel_return": "http://www.sait.com/cancel-location/", } form = PayPalEncryptedPaymentsForm(initial=paypal_dict) context = {"form": form} return render_to_response("payment.html", context)

Коротко о WebmoneyКоротко о Webmoney

работает в Украине на протяжении 6 лет гривневый оборот составил 1 млрд. 397 млн. WMU (на 2009 год) количество зарегистрированных в системе украинских граждан достигло 1 млн. 550 тыс. человек.

Прием платежей через интерфейс Прием платежей через интерфейс сервиса Web Merchant Interfaceсервиса Web Merchant Interface

Два шага для обеспечения приема WM на своем веб-сайте через сервис Web Merchant Interface:

1. Настроить сервис Web Merchant Interface для обработки платежей, выполняемых клиентом на ваш кошелек, в разделе Настройки;

2. Создать 3 HTML страницы - платежную страницу, страницу успешно выполненного платежа и страницу невыполненного платежа;

Шаг 2. Создание 3-х HTML страницШаг 2. Создание 3-х HTML страницШ

pay.html <html> <head> <title>Pay</title> </head> <body> <form id=pay name=pay method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp"> <p>пример платежа через сервис Web Merchant Interface</p> <p>заплатить 1 WMZ...</p> <p> <input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1.0"> <input type="hidden" name="LMI_PAYMENT_DESC" value="тестовый платеж"> <input type="hidden" name="LMI_PAYMENT_NO" value="1"> <input type="hidden" name="LMI_PAYEE_PURSE" value="Z145179295679"> <input type="hidden" name="LMI_SIM_MODE" value="0"> </p> <p> <input type="submit" value="submit"> </p> </form> </body> </html><

Шаг 2. Создание 3-х HTML страницШаг 2. Создание 3-х HTML страницШ

success.html <html> <head> <title>Success</title> </head> <body> <p>Платеж был выполнен.</p> </body> </html>

fail.html

<html> <head> <title>Fail</title> </head> <body> <p>Платеж не был выполнен.</p> </body> </html>

Developer Central – developer.paypal.com Integration Center – paypal.com/integration PayPalDev.org – paypaldev.org Pro PayPal E-Commerce by Damon Williams (Apress)

Ресурсы для разработчиковРесурсы для разработчиков

WebmoneyWebmoney

PaypalPaypal

Программные интерфейсы http://www.webmoney.ru/rus/developers/interfaces/index.shtml

Описание интерфейса сервиса Web Merchant Interface https://merchant.webmoney.ru/conf/guide.asp

Django-payment-webmoney http://goo.gl/ucmx

Спасибо за внимание!

Вопросы ???

Моргун ИванМоргун Иван

blogblog : http://proft.com.ua : http://proft.com.uatwittertwitter: @proft: @proft

PyCamp Kyiv 2010 PyCamp Kyiv 2010