django-yandex-kassa
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ
ΠΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²
- ΠΠ΄Π΅ΠΌ Π½Π° kassa.yandex.ru
- Π Π΅Π³ΠΈΡΡΡΠΈΡΡΠ΅ΠΌΡΡ
- Π‘ΠΎΠ·Π²Π°Π½ΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΡΠ°ΠΏΠΎΡΡΠΎΠΌ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠΊΠ°Π½Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ SCID & ShopID
ΠΡΠ΄Π΅Π»ΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π΄ΠΎΠ³ΠΎΠ²Π°ΡΠΈΠ²Π°ΡΡΡΡ (ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ΄Π°Π²Π°ΡΡ Π΄ΠΎΠΏ. ΠΏΠ°ΠΊΠ΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΎΠ²) Π½Π° ΠΏΡΠΈΠ΅ΠΌ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ ΡΠ΅ΡΠ΅Π·
- Π‘Π±Π΅Ρ, Ρ.ΠΊ. ΠΎΠ½ Π½Π΅ ΡΠΌΠ΅Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈ, Π²ΠΎΠΎΠ±ΡΠ΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠΉ;
- ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΠ΅ ΠΏΠ»Π°ΡΠ΅ΠΆΠΈ: Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ 'ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΠ»Π°ΡΡ ΡΠ°ΠΉΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΠΎΡΠΎΡΠΊΡ Π±ΠΎΠ»Π΅Π΅ 30ΡΡ Π² ΠΌΠ΅ΡΡΡ +ΠΏΡΠΎΡΠ΅Π½Ρ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΎΠ³ΠΎΠ²Π°ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ;
- QiWi;
- MasterPass.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
-
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ°ΠΊΠ΅Ρ:
pip install django-yandex-kassa
-
ΠΠΎΠ±Π°Π²ΠΈΡΡ
yandex_kassa
Π²settings.INSTALLED_APPS
:INSTALLED_APPS = ( ... 'yandex_kassa', ... )
-
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ ΠΠ:
python manage.py syncdb
-
ΠΠΎΠ±Π°Π²ΠΈΡΡ Π²
urls.py
:urlpatterns = patterns('', # ... url(r'^kassa/', include('yandex_kassa.urls')), )
-
Π£ΠΊΠ°Π·Π°ΡΡ Π² settings ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ:
YANDEX_KASSA_DEBUG = False YANDEX_KASSA_SCID = 123123 YANDEX_KASSA_SHOP_ID = 123123 YANDEX_KASSA_SHOP_PASSWORD = 'password' YANDEX_KASSA_DISPLAY_FIELDS = ['paymentType', 'cps_email', 'cps_phone'] YANDEX_KASSA_CALLBACK_URL = '/kassa/callback/' YANDEX_KASSA_FAIL_URL = '/kassa/fail/' YANDEX_KASSA_SUCCESS_URL = '/kassa/success/' YANDEX_KASSA_PAYMENT_TYPE = ['ab', 'ac', 'gp', 'pb', 'pc', 'wm']
-
Π£ΠΊΠ°Π·Π°ΡΡ Π² ΡΠ°Π±ΠΎΡΠ΅ΠΌ Π―Π½Π΄Π΅ΠΊΡ ΠΠ°ΡΡΡ ΠΊΠ°Π±ΠΈΠ½Π΅ΡΠ΅ Π½Π°ΡΡΡΠΉΠΎΠΊΠΈ Π΄Π»Ρ ΠΏΡΠΈΠ΅ΠΌΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ:
- paymentAvisoURL: https://example.com/kassa/payment-aviso/
- checkURL: https://example.com/kassa/order-check/
- failURL: https://example.com/kassa/fail/
- successURL: https://example.com/kassa/success/
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎΠ»Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ
-
Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΡΠΎΠ²Π°ΡΠ° ΠΈ Π·Π°ΠΊΠ°Π·Π°:
# -*- coding: utf-8 -*- # ... class HomeView(TemplateView): template_name = 'home.html' def get_context_data(self, **kwargs): count = randint(1, 3) item = Item.objects.all().order_by('?').first() amount = count * item.price payment = Payment(order_amount=amount) payment.save() order = Order(item=item, count=count, amount=amount, payment=payment) order.save() ctx = super(HomeView, self).get_context_data(**kwargs) ctx['order'] = order ctx['form'] = PaymentForm(initial=dict(orderNumber=order.uuid, sum=amount, customerNumber=payment.customer_number)) return ctx
# -*- coding: utf-8 -*- # ... class Item(models.Model): name = models.CharField('ΠΠ°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅', max_length=32) price = models.PositiveIntegerField('Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ') def __unicode__(self): return truncatechars(self.name, 16) class Meta: verbose_name = 'Π’ΠΎΠ²Π°Ρ' verbose_name_plural = 'Π’ΠΎΠ²Π°ΡΡ' class Order(models.Model): uuid = models.CharField('ID Π·Π°ΠΊΠ°Π·Π°', max_length=64, default=get_uuid, primary_key=True) item = models.ForeignKey('app.Item', verbose_name='Π’ΠΎΠ²Π°Ρ') count = models.PositiveIntegerField('ΠΠΎΠ»-Π²ΠΎ', default=1) payment = models.ForeignKey('yandex_kassa.Payment', verbose_name='ΠΠ»Π°ΡΠ΅ΠΆ') amount = models.PositiveIntegerField('Π‘ΡΠΌΠΌΠ° Π·Π°ΠΊΠ°Π·Π°') class Meta: verbose_name = 'ΠΠ°ΠΊΠ°Π·' verbose_name_plural = 'ΠΠ°ΠΊΠ°Π·Ρ'
-
Π¨Π°Π±Π»ΠΎΠ½ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΠΎΠΉ ΡΠΎΡΠΌΡ:
<div class="col-lg-6 col-md-6 col-sm-6 col-xs-6"> <form action="{{ form.target }}" method="post" class="form" name="ShopForm" id="payment_form_id"> {% bootstrap_form form %} {% buttons %} <button type="submit" class="btn btn-success"> {% bootstrap_icon "shopping-cart" %} ΠΠΏΠ»Π°ΡΠΈΡΡ "{{ order.item.name }}" x{{ order.count }} ΡΡ </button> {% endbuttons %} </form> </div>