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

6,388 views

Published on

Published in: Technology
  • Be the first to comment

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

  1. 1. Работа с платежными системами в Django (Pa yp al, WebMoney ) Моргун Иван blog : http://proft.com.ua twitter : @proft PyCamp Kyiv 2010
  2. 2. Почему Django ? Django — свободный фреймворк для веб-приложений на языке Python. (wikipedia)
  3. 3. <ul><li>Полная документация
  4. 4. Python
  5. 5. ORM
  6. 6. Встроенный сервер для разработки
  7. 7. Готовая админка
  8. 8. Богатый набор приложений
  9. 9. Шаблоны
  10. 10. Формы </li></ul>8 причин использовать Django * * @coderholic http://www.coderholic.com/8-reasons-why-you-should-try-django/
  11. 11. Про Paypal <ul><li>основана в 1998 году
  12. 12. куплена eBay в 2002
  13. 13. свыше 180,000 счетов
  14. 14. доступна в более чем 100 странах
  15. 15. 19 валют
  16. 16. к омпании, основанные бывшими сотрудниками </li></ul>
  17. 17. Виды платежей <ul><li>Website Payments Standard
  18. 18. Instant Payment Notification (IPN)
  19. 19. Payment Data Transfer (PDT)
  20. 20. PayPal API
  21. 21. Website Payments Pro </li><ul><li>Direct Payment
  22. 22. Express Checkout </li></ul></ul>
  23. 23. Виды счётов <ul><li>Personal account (до 500 $)
  24. 24. Premier account (API, IPN, PDT)
  25. 25. Business account (API, отчеты, Multi-User Access)
  26. 26. Sandbox account (отладочный) </li></ul>
  27. 27. Статус счёта <ul><li>Verified
  28. 28. Confirmed
  29. 29. Limited
  30. 30. Closed </li></ul>
  31. 31. <ul>Готовые HTML шаблоны для: <li>Кнопка Buy Now — покупка одного товара
  32. 32. Кнопка Donations — благотворительность
  33. 33. Subscriptions — периодически повторяющиеся оплата
  34. 34. PayPal Shopping Cart — заказ нескольких товаров
  35. 35. Cart Upload — корзина, разработанная третьим лицом </li></ul>Website Payments Standard
  36. 36. Website Payments Standard
  37. 37. Пример кнопки Buy Now <form action=&quot;https://www.paypal.com/cgi-bin/webscr&quot; method=&quot;post&quot;> <input type=&quot;hidden&quot; name=&quot; cmd &quot; value=&quot;_xclick&quot;/> <input type=&quot;hidden&quot; name=&quot; business &quot; value=&quot;seller@sait.com&quot;/> <input type=&quot;hidden&quot; name=&quot; item_name &quot; value=&quot;Django book&quot;/> <input type=&quot;hidden&quot; name=&quot; item_number &quot; value=&quot;123&quot;/> <input type=&quot;hidden&quot; name=&quot; amount &quot; value=&quot;75.00&quot;/> <input type=&quot;hidden&quot; name=&quot;no_shipping&quot; value=&quot;2&quot;/> <input type=&quot;hidden&quot; name=&quot;no_note&quot; value=&quot;1&quot;/> <input type=&quot;hidden&quot; name=&quot; currency_code &quot; value=&quot;USD&quot;/> <input type=&quot;hidden&quot; name=&quot;bn&quot; value=&quot;PP-BuyNowBF&quot;/> <input type=&quot; image &quot; src=&quot;https://www.paypal.com/en_US/i/btn/x-click-but23.gif&quot; border=&quot;0&quot; name=&quot;submit&quot; alt=&quot;Make payments with PayPal - it's fast, free and secure!&quot;/> <img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://www.paypal.com/en_US/i/scr/pixel.gif&quot; width=&quot;1&quot; height=&quot;1&quot;/> </form> • business — email продавца • item_name — имя товара • item_number — артикль товара • amount — сумма • currency_code — валюта • image — url изображения
  38. 38. Shopping Cart <ul><li>PayPal Shopping Cart
  39. 39. Cart Upload </li></ul><ul><ul><li>Передаем в Paypal всю сумму для всех товаров в корзине
  40. 40. Передаем в Paypal сумму каждого товара отдельно, для всех товаров в корзине </li></ul></ul>
  41. 41. Пример Shopping Cart <form action=&quot;https://www.paypal.com/cgi-bin/webscr&quot; method=&quot;post&quot;> <input type=&quot;hidden&quot; name=&quot; cmd &quot; value=&quot;_cart&quot;/> <input type=&quot;hidden&quot; name=&quot;upload&quot; value=&quot;1&quot;/> <input type=&quot;hidden&quot; name=&quot; business &quot; value=&quot;seller@sait.com&quot;/> <input type=&quot;hidden&quot; name=&quot; item_name_1 &quot; value=&quot;Shoes 1&quot;/> <input type=&quot;hidden&quot; name=&quot; amount_1 &quot; value=&quot;1.00&quot;/> <input type=&quot;hidden&quot; name=&quot; quantity_1 &quot; value=&quot;1&quot;/> <input type=&quot;hidden&quot; name=&quot; item_name_2 &quot; value=&quot;Shoes 2&quot;/> <input type=&quot;hidden&quot; name=&quot; amount_2 &quot; value=&quot;2.00&quot;/> <input type=&quot;hidden&quot; name=&quot; quantity_2 &quot; value=&quot;3&quot;/> <input type=&quot;submit&quot; value=&quot;PayPal&quot;/> </form>
  42. 42. Encrypted Website Payments (EWP) <ul><li>Email продавца
  43. 43. URL возврата, после покупки
  44. 44. Сумма
  45. 45. Количество
  46. 46. Любое другое поле </li></ul>
  47. 47. Payment Data Transfer Индетификация покупателя по Transaction ID
  48. 48. Payment Data Transfer
  49. 49. Instant Payment Notification
  50. 50. PayPal API <ul><li>SOAP — объектно-ориентированный интерфейс, использующий объекты данных определенные схемой eBay Business Language ( eBL ). Запросы и ответы отсылаются как объекты через протокол SOAP.
  51. 51. Name-Value Pair (NVP) — использует словарь переменных, похожих как в схеме eBL. Запросы и ответы отсылаются как простые строки через протокол HTTP.
  52. 52. Paypal API : MassPay, поиск транзакций, получение информации о транзакции и т.д. </li></ul>
  53. 53. Django-paypal — application для Django реализующий Website Payments Standard (Buy now) и Website Payments Pro (Direct Payment, Express Checkout) http://goo.gl/M5Nf by johnboxall [email_address] django-paypal
  54. 54. Пример использования django-paypal (IPN) 1. git clone git://github.com/johnboxall/django-paypal.git paypal 2. # settings.py INSTALLED_APPS = (... 'paypal.standard.ipn', ...) PAYPAL_RECEIVER_EMAIL = &quot;seller@sait.com&quot; 3. Вид (views.py): from paypal.standard.forms import PayPalPaymentsForm def view_that_asks_for_money(request): paypal_dict = { &quot;business&quot;: &quot;seller@sait.com&quot;, &quot;amount&quot;: &quot;100&quot;, &quot;item_name&quot;: &quot;Shoes 1&quot;, &quot;invoice&quot;: &quot;101&quot;, &quot;notify_url&quot;: &quot;http://www.sait.com/ipn-location/&quot;, &quot;return_url&quot;: &quot;http://www.sait.com/return-location/&quot;, &quot;cancel_return&quot;: &quot;http://www.sait.com/cancel-location/&quot;, } form = PayPalPaymentsForm(initial=paypal_dict) context = {&quot;form&quot;: form} return render_to_response(&quot;payment.html&quot;, context) 4. Шаблон (payment.html) <b>Hello user! You buy now 'Shoe 1'!</h1> {{ form.render }}
  55. 55. Пример использования django-paypal (IPN) 5. При покупке товара PayPal сделает POST запрос к notify_url. # urls.py urlpatterns = patterns('', (r'^ipn-location/', include('paypal.standard.ipn.urls')), ) 6. После обработки IPN — будет отправлен сигнал с результатом транзакции. Два сигнала для обычных транзакции: <ul><li>payment_was_succesful
  56. 56. payment_was_flagged </li></ul>и 4 для Subscription. # models.py from paypal.standard.ipn.signals import payment_was_successful def show_me_the_money(sender, **kwargs): ipn_obj = sender if ipn_obj.custom == &quot;Upgrade all users!&quot;: Users.objects.update(paid=True) payment_was_successful.connect(show_me_the_money)
  57. 57. Пример использования django-paypal (WPS+ EWP ) 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-cert https://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'
  58. 58. Пример использования django-paypal (WPS+ EWP ) 8. В view.py заменяем PayPalPaymentsForm на PayPalEncryptedPaymentsForm from paypal.standard.forms import PayPalEncryptedPaymentsForm def view_that_asks_for_money(request): paypal_dict = { &quot;business&quot;: &quot;seller@sait.com&quot;, &quot;amount&quot;: &quot;100&quot;, &quot;item_name&quot;: &quot;Shoes 1&quot;, &quot;invoice&quot;: &quot;101&quot;, &quot;notify_url&quot;: &quot;http://www.sait.com/ipn-location/&quot;, &quot;return_url&quot;: &quot;http://www.sait.com/return-location/&quot;, &quot;cancel_return&quot;: &quot;http://www.sait.com/cancel-location/&quot;, } form = PayPalEncryptedPaymentsForm (initial=paypal_dict) context = {&quot;form&quot;: form} return render_to_response(&quot;payment.html&quot;, context)
  59. 59. Коротко о Webmoney <ul><li>работает в Украине на протяжении 6 лет
  60. 60. гривневый оборот составил 1 млрд. 397 млн. WMU (на 2009 год)
  61. 61. количество зарегистрированных в системе украинских граждан достигло 1 млн. 550 тыс. человек . </li></ul>
  62. 62. Прием платежей через интерфейс сервиса Web Merchant Interface Два шага для обеспечения приема WM на своем веб-сайте через сервис Web Merchant Interface: 1. Настроить сервис Web Merchant Interface для обработки платежей, выполняемых клиентом на ваш кошелек, в разделе Настройки; 2. Создать 3 HTML страницы - платежную страницу, страницу успешно выполненного платежа и страницу невыполненного платежа;
  63. 63. Шаг 2. Создание 3-х HTML страниц  pay.html <html> <head> <title>Pay</title> </head> <body> <form id=pay name=pay method=&quot;POST&quot; action=&quot;https://merchant.webmoney.ru/lmi/payment.asp&quot;> <p>пример платежа через сервис Web Merchant Interface</p> <p>заплатить 1 WMZ...</p> <p> <input type=&quot;hidden&quot; name=&quot; LMI_PAYMENT_AMOUNT &quot; value=&quot;1.0&quot;> <input type=&quot;hidden&quot; name=&quot; LMI_PAYMENT_DESC &quot; value=&quot;тестовый платеж&quot;> <input type=&quot;hidden&quot; name=&quot; LMI_PAYMENT_NO &quot; value=&quot;1&quot;> <input type=&quot;hidden&quot; name=&quot; LMI_PAYEE_PURSE &quot; value=&quot;Z145179295679&quot;> <input type=&quot;hidden&quot; name=&quot; LMI_SIM_MODE &quot; value=&quot;0&quot;> </p> <p> <input type=&quot;submit&quot; value=&quot;submit&quot;> </p> </form> </body> </html> 
  64. 64. Шаг 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>
  65. 65. <ul><li>Developer Central – developer.paypal.com
  66. 66. Integration Center – paypal.com/integration
  67. 67. PayPalDev.org – paypaldev.org
  68. 68. Pro PayPal E-Commerce by Damon Williams (Apress) </li></ul>Ресурсы для разработчиков Webmoney Paypal <ul><li>Программные интерфейсы http://www.webmoney.ru/rus/developers/interfaces/index.shtml
  69. 69. Описание интерфейса сервиса Web Merchant Interface https://merchant.webmoney.ru/conf/guide.asp
  70. 70. Django-payment-webmoney http://goo.gl/ucmx </li></ul>
  71. 71. Спасибо за внимание! Вопросы ??? Моргун Иван blog : http://proft.com.ua twitter : @proft PyCamp Kyiv 2010

×