- Notifications
You must be signed in to change notification settings - Fork19
Django app for Sberbank payment API
License
NotificationsYou must be signed in to change notification settings
madprogrammer/django-sberbank
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Это Django-приложение позволяет быстро приделать к сайту на Django прием оплаты с банковских карт с помощью платежного API Сбербанка. Приложение поддерживает:
- Оплату через веб-формы (пользователь вводит данные карты на сервере Сбербанка)
- Оплату с помощью Apple Pay и Google Pay
- Привязку банковских карт и получение списка привязанных карт
- Отслеживание истории транзакций и журналирование обмена с API Сбербанка в БД
- Добавить
sberbankв список INSTALLED_APPS:
INSTALLED_APPS= [ ...'sberbank', ...]
- Добавить параметры мерчанта в
settings.py:
MERCHANTS= {%merchant_id%: {'username':'%merchant_username%','password':'%merchant_password%','success_url':'http://ваш.домен/sberbank/payment/success','fail_url':'http://ваш.домен/sberbank/payment/fail','app_success_url':'http://ваш.домен/payment/success','app_fail_url':'http://ваш.домен/payment/fail', }}
- Добавить URL-ы приложения в ваш
urls.py:
urlpatterns= [ ...url('/sberbank',include('sberbank.urls'))]
- Запустить
python manage.py migrateчтобы создать модели.
Переменная окружения:ENVIRONMENT
Возможные значения:
development-https://securepayments.sberbank.ru/paymentproduction-https://3dsec.sberbank.ru/payment
По-умолчанию:development
success_url- на данный URL Сбербанк будет перенаправлять браузер после успешного платежаfail_url- на данный URL Сбербанк будет перенаправлять браузер после неуспешного платежаapp_success_url- это URL, с помощью которого ваше приложение может среагировать на успешный платеж после того, как отработает коллбэкsuccess_url.app_fail_url- это URL, с помощью которого ваше приложение может среагировать на неуспешный платеж после того, как отработает коллбэкfail_url.
fromsberbank.serviceimportBankServicefromsberbank.modelsimportPayment,Status...try:# Сумма в рубляхamount=10.0# Уникальный ID пользователя, используется для привязки карт# Если None, пользователь не сможет выбрать ранее привязанную карту# или привязать карту в процессе оплатыclient_id=request.data.get("client_id")svc=BankService(%merchant_id%)# url - адрес, на который следует перенаправить пользователя для оплаты# payment - объект Payment из БД, содержит информацию о платеже# description - назначение платежа в веб-форме банка# params - произвольные параметры, которые можно привязать к платежуpayment,url=svc.pay(amount,params={'foo':'bar'},client_id=client_id,description="Оплата заказа №1234")returnHttpResponseRedirect(url)exceptExceptionasexc:# Что-то пошло не такraise
fromsberbank.serviceimportBankServicefromsberbank.modelsimportPayment,Status...try:# Уникальный ID пользователя, используется для привязки карт# параметр необходимо передавать при использовании функции привязки карт# через списание и возвратclient_id=request.data.get("client_id")ifclient_idisNone:returnHttpResponseBadRequest()svc=BankService(%merchant_id%)# url - адрес, на который следует перенаправить пользователя для оплаты# payment - объект Payment из БД, содержит информацию о платежеpayment,url=svc.bind_refund(client_id=client_id)returnHttpResponseRedirect(url)exceptExceptionasexc:# Что-то пошло не такraise
fromsberbank.serviceimportBankServicefromsberbank.modelsimportPayment,Status...try:# Уникальный ID пользователя, используется для привязки карт# параметр необходимо передавать при использовании функции привязки карт# через списание и возвратclient_id=request.data.get("client_id")# Сумма платежа в рубляхamount=10.0# Токен, переданный приложением для Apple/Android# библиотека сама определяет тип платежа по формату# переданного токена и вызывает соответствующее API Сбербанкаtoken=request.data.get("token")# IP адрес клиентаip=request.META.get('REMOTE_ADDR','127.0.0.1')svc=BankService(%merchant_id%)payment,response=svc.mobile_pay(amount,token,ip,client_id=client_id,params={'foo':'bar'},description="Оплата заказа №1234")ifresponse['success']!=True:returnResponse({"status":"error"})ifpayment.status==Status.SUCCEEDED:# Платеж успешенjson_response= {"status":"success"}# Платежи с некоторых карт требуют особой обработки на клиенте# При наличии в ответе acsUrl клиенту нужно перенаправить пользователя# на адрес redirect_url, POST-запросом передав параметры в виде x-www-form-urlencodedifresponse['data'].get('acsUrl'):json_response.update({"redirect_url":response['data'].get('acsUrl','')})json_response.update({"params": {'paReq':response['data'].get('paReq',''),'termUrl':response['data'].get('termUrl',''),'orderId':response['data'].get('orderId','')}})returnResponse(json_response)exceptExceptionasexc:# Что-то пошло не такraise
fromdatetimeimporttimedeltafromcelery.taskimportperiodic_taskfromsberbank.tasksimportcheck_payments@periodic_task(run_every=timedelta(minutes=20))deftask_check_payments():check_payments()
About
Django app for Sberbank payment API
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Releases
No releases published
Packages0
No packages published
Uh oh!
There was an error while loading.Please reload this page.