В сети интернет очень мало информации данного рода. Интеграцию яндекс кассы в ваш Django проект придется проводить своими силами, так как единственный модуль написанный когда то самим яндексом уже не актуален. 

И так, если вы решили подключить яндекс кассу для своего проекта, то первым, что вам нужно сделать — это зарегистрироваться в яндекс кассе. Процесс регистрации в этой статье мы опустим, думаю вы сами с этим справитесь. 

Предположим у вас уже имеется аккаунт, в нем необходимо создать тестовый магазин.

Тестовый магазин на django

 

Так же в закладке HTTP-уведомлений необходимо указать url адрес, на который будут посылаться уведомления со статусом платежа от яндекс-кассы. Об этом чуть позже я напишу более подробно.

У яндекса есть готовые классы для работы с платежами ими мы и воспользуемся. Для этого перейдем в раздел для разработчиков https://kassa.yandex.ru/developers и откроем вкладку быстрый платеж. Яндекс нам предоставляет пример на python

import uuid

from yandex_checkout import Configuration, Payment

Configuration.account_id = <Идентификатор магазина>
Configuration.secret_key = <Секретный ключ>

payment = Payment.create({
    "amount": {
        "value": "100.00",
        "currency": "RUB"
    },
    "confirmation": {
        "type": "redirect",
        "return_url": "https://www.merchant-website.com/return_url"
    },
    "capture": True,
    "description": "Заказ №1"
}, uuid.uuid4())

Как видно из кода, нам необходимо знать идентификатор магазина (shopid) и секретный ключ (API ключ), все это мы можем посмотреть в настройках тестового магазина. Яндекс предоставляет нам объект Payment, с ним мы и будем работать. Все параметры этого объекта вы можете посмотреть на странице для разработчиков. Приступим к интеграции.

Создаем файл с название payment.py, суда мы вынесем все вьюхи необходимые для работы с платежами. Нам понадобится всего две функции, первая -создание платежа, вторая обработка уведомлений от яндекс кассы.

from django.shortcuts import render, HttpResponseRedirect

from order.models import *
from django.views.generic import View
import uuid

from yandex_checkout import Configuration, Payment
from django.utils import timezone, dateformat

from rest_framework.views import APIView
from rest_framework.permissions import AllowAny

from core.models import *


Configuration.account_id = ваш id магазина
Configuration.secret_key = 'Ваш ключ'



class YandexPayment(View):
   """Создание платежа"""
   def get(self, type_id):
      value = self.request.GET.get('sum')

      payment = Payment.create({
         "amount": {
            "value": value,
            "currency": "RUB"
         },
         "payment_method_data": {
            "type": "bank_card"
         },
         "confirmation": {
            "type": "redirect",
            "return_url": "https://deti.herokuapp.com/"
         },
         "description": "Заказ №1",
      }, uuid.uuid4())


      order = Order(number='Заказ ' + dateformat.format(timezone.now(), 'd-m-Y H:i:s'), order_item = OrderItem(child_id = self.request.GET.get('childid')), user=self.request.GET.get('email'),
                       sum=value, status=False, hash=payment.id, pay_type='bank_card')
      
      order.order_item.save()
      order.save()
      return HttpResponseRedirect(payment.confirmation.confirmation_url)
Импортируем все необходимое, в нашем случае это модели Order и OrderItem, если у вас магазин, то возможно структура самого заказа у вас будет такая же(модель заказа и модель orderitem ). Выше мы создаем платеж, передаем в него необходимые параметры(весь список в документации для разработчиков), в нашем случае только обязательные: amount,payment_method_data,confirmation,description и не забываем про uuid4. После создания платежа нам нужно создать заказ, в нашем случае это Order, заполняем все поля модели и сохраняем orderitem и order. Эта функция будет обрабатывать вашу форму оплаты, я например, в данном примере в форме собираю почту, способ оплаты, сумму и id объекта. И теперь обязательное условие, после создания платежа и заказа, нам необходимо редиректить пользователя на форму оплаты яндекс кассы. Делается это с помощью payment.confirmation.confirmation_url. Все, после редиректа пользователь оплачивает ваш заказ, либо нет, после оплаты вам прийдет уведомление от яндекс кассы на адрес, указанный в личном кабинете кассы, в закладке HTTP-уведомления уведомления от яндекс кассы Теперь нам необходимо эти уведомления обработать. Для этого напишем функцию обработчик. Вот пример уведомления от яндекс в формате json:
{
  "id": "22e12f66-000f-5000-8000-18db351245c7",
  "status": "succeeded",
  "paid": true,
  "amount": {
    "value": "2.00",
    "currency": "RUB"
  },
  "captured_at": "2018-07-18T11:17:33.483Z",
  "created_at": "2018-07-18T10:51:18.139Z",
  "description": "Заказ №72",
  "metadata": {
    
  },
  "payment_method": {
    "type": "bank_card",
    "id": "22e12f66-000f-5000-8000-18db351245c7",
    "saved": false,
    "card": {
      "first6": "555555",
      "last4": "4444",
      "expiry_month": "07",
      "expiry_year": "2022",
      "card_type": "MasterCard",
      "issuer_country": "RU",
      "issuer_name": "Sberbank"
    },
    "title": "Bank card *4444"
  },
  "recipient": {
    "account_id": "100001",
    "gateway_id": "1000001"
  },
  "refundable": true,
  "refunded_amount": {
    "value": "0.00",
    "currency": "RUB"
  },
  "test": false
}

 

Напишем функцию обработчик ответа:
class YandexNotification(APIView):
   """Обработка платежа"""

   permission_classes = [AllowAny]

   def post(self, request):
      payment_id = self.request.data['object']['id']
      Payment.capture(payment_id)
      order = Order.objects.get(hash=payment_id)
      order.status = True
      order.save()

      return HttpResponse(status=200)



Я использовал django restframework, а конкретно APIView, можно просто класс View использовать для нашего обработчика. Здесь мы принимаем пост запрос от яндекса, получаем наш платеж, обрабатываем и теперь нам необходимо перевести наш заказ в статут оплачено, сохраняем и готово.

Впринципе этого вполне достаточно для обработки платежей в упрощенном виде, конечно по хорошему необходимо сделать обработку статусов платежей, но если вы установите галочку в HTTP-уведомлениях только на success, то другие уведомления вам приходить не будут, а значит, если не пришло уведомление, то оставляем заказ в статусе не оплачено.  

Как видно из статьи python и yandex kassa это не сложно. Для большей информации читайте документацию для разработчиков, она у них очень удобная. У нас вы можете заказать сайт на django.

Комментарии ()

    Адрес веб студии
    Позвонить

    Городской: +7(8793)33-16-17
    Мобильный: +7(928)911-74-69

    email веб студии
    Написать

    manager@kmv-it.ru

    Доехать до веб студии
    Приехать

    г.Пятигорск переулок Первомайский 18

    Логотип Кухня сайтов