Note
This application is suitable only for russian web services, so I don't provide English readme. If you need English docs, please contact me.
Простое приложение для подключения в Django оплаты через Яндекс.Кассу. Поддерживает Python 2.7, 3.4 и 3.5. Совместимо со всеми версиями Django>=1.8.
В приложении реализован протокол интеграции, описанный в официальной документации
Перед тем приступить к настройке приложения, убедитесь, что у вас уже есть аккаунт в kassa.yandex.ru и вы знаете SCID, ShopID и платежный пароль.
Устанавливаем пакет:
pip install django-yandex-cash-register
Добавляем приложение
yandex_cash_register
вsettings.INSTALLED_APPS
:INSTALLED_APPS = ( ... 'yandex_cash_register', ... )
Указываем в
settings.py
следующие настройки:# True - Использование тестого платежного сервиса, False - основного YANDEX_CR_DEBUG = False # Идентификатор магазина, полученный в Яндекс.Кассе YANDEX_CR_SCID = 12345 # Идентификатор витрины магазина, полученный в Яндекс.Кассе YANDEX_CR_SHOP_ID = 123456 # Платежный пароль магазина YANDEX_CR_SHOP_PASSWORD = 'password' # Идентификаторы используемых видов оплаты (https://tech.yandex.ru/money/doc/payment-solution/reference/payment-type-codes-docpage/) YANDEX_CR_PAYMENT_TYPE = ['pc', 'ac', 'wm'] # Название модели заказа. Модель должна соответствовать # интерфейсу yandex_cash_register.interfaces.IPayableOrder YANDEX_CR_ORDER_MODEL = 'your_app.Order' # Публичный домен магазина YANDEX_CR_SHOP_DOMAIN = 'https://example.com'
Создаем таблицы в базе данных:
python manage.py migrate
Добавляем приложение в
urls.py
, обязательно указываяnamespace
иapp_name
:url(r'^money/', include('yandex_cash_register.urls', namespace='yandex_cash_register', app_name='yandex_cash_register')),
Если ваш домен example.com и вы указали money как урл приложения, то ваш checkURL в настройках должен быть https://example.com/money/order-check/, а paymentAvisoURL - https://example.com/money/payment-aviso/. URL успеха и провала платежа указывать не нужно.
Первым делом нужно имплементировать интерфейс
yandex_cash_register.interfaces.IPayableOrder
в модели заказа своего приложения для того, чтобы по завершении платежа вернуть клиента на соответствующую страницу.Для создания платежа достаточно знать уникальный идентификатор заказа, почтовый адрес и телефон клиента (требование Яндекс.Кассы), а также сумму заказа и (опционально) выбранный клиентом способ оплаты:
from yandex_cash_register.models import Payment payment = Payment( order_sum=Decimal('100.50'), # Сумма к оплате order_id='unique_id', # Идентификатор заказа cps_email='customer@example.com', # Почтовый адрес клиента cps_phone='70000000000', # Телефон клиента, 11 цифр без символов payment_type='wm', # Способ оплаты (опционален), если его не задать, # клиент будет выбирать его на стороне Яндекс.Кассы ) payment.save() # После создания заказа можно получить платежную форму, которую нужно отобразить клиенту # c method="post" и target="yandex_cash_register.conf.TARGET" # После ее сабмита (можно это сделать автоматически) клиент попадет в # интерфейс Яндекс.Кассы, где сможет завершить платеж form = payment.form()
Для получения информации о результатах оплаты, нужно начать слушать сигналы из модуля
yandex_cash_register.signals
. В наличии три сигнала:- payment_process - отсылается при получении Яндекс.Кассой информации о платеже
- payment_success - отсылается при успешном платеже
- payment_fail - отсылается при ошибочном платеже
В качестве sender сигнала выступает объект
yandex_cash_register.Payment
, для которого этот сигнал актуален.