Simple Tochka Bank Open API client
Project description
🎉 Tochka API
Удобная обёртка над открытым API Банка Точка
📥 Установка
📦 Из pip:
python -m pip install -u tochka_api
🏗 Из репозитория:
git clone https://github.com/WhiteApfel/tochka_api.git
cd tochka_api
python setup.py install
🚧 Прогресс разработки
- Авторизация
- Балансы
- Счета
- Webhooks
- Выписки
- Карты
- Клиенты
- Платежи
- Разрешения
- Специальные счета
- СБП
- QR
- ТСП (Merchant)
- Компании (Legal)
- Возвраты
🧑🏫 Как использовать
💰 Уточнения по типу данных для суммы
Decimalandstr- amount in rublesint- amount in kopecks
Различия user_code и customer_code
user_codeэто код клиента, который имеет доступ к компанииcustomer_codeэто код компании(ИП), на которую открыты счета
import asyncio
from decimal import Decimal
from tochka_api import TochkaAPI, context_user_code
from tochka_api.models import PermissionsEnum
client_id = "<<client_id>>"
client_secret = "<<client_secret>>"
redirect_uri = "https://tochka-api.pfel.cc/"
tochka = TochkaAPI(client_id, client_secret, redirect_uri=redirect_uri)
async def add_user():
consents_token, consents_expires_in = await tochka.get_consents_token()
consents_request = await tochka.create_consents(
consents_token, PermissionsEnum.all()
)
auth_url = tochka.generate_auth_url(consent_id=consents_request.consent_id)
print("Auth:", auth_url)
code = input("Code >>> ")
token_id = input("Token_id >>> ")
tokens = await tochka.get_access_token(
code=code, token_id=token_id
)
print(f"User {tokens.user_code=} are authorized.")
context_user_code.set(tokens.user_code)
asyncio.create_task(get_accounts())
merchant_id = await register_merchant(user_code=tokens.user_code)
await register_qr(merchant_id=merchant_id)
async def get_accounts():
# user_code будет унаследован из context_user_code
# Это thread-safe и loop-safe
for _ in range(25):
await tochka.get_accounts()
await asyncio.sleep(2)
async def register_merchant(user_code) -> str:
# Будет использоваться указанный user_code
# Даже если в context_user_code было задано другое значение
accounts = await tochka.get_accounts(user_code=user_code)
customer_info = await tochka.sbp_get_customer_info(
customer_code=accounts[0].customer_code
)
legal_entity = await tochka.sbp_get_legal_entity(customer_info.legal_id)
merchant = await tochka.sbp_register_merchant(
legal_id=legal_entity.legal_id,
name="TochkaExample",
mcc="7277",
address=" 1-й Вешняковский проезд, д. 1, стр. 8, этаж 1, помещ. 43",
city="Москва",
region_code="45",
zip_code="109456",
phone_number="+78002000024",
)
print(f"New merchant {merchant.merchant_id=}")
print(
*(await tochka.sbp_get_merchants(legal_id=legal_entity.legal_id)).merchants,
sep="\n",
)
return merchant.merchant_id
async def register_qr(merchant_id):
# user_code будет унаследован из context_user_code
# Это thread-safe и loop-safe
accounts = await tochka.get_accounts()
customer_info = await tochka.sbp_get_customer_info(
customer_code=accounts[0].customer_code
)
legal_entity = await tochka.sbp_get_legal_entity(customer_info.legal_id)
sbp_accounts = await tochka.sbp_get_accounts(legal_entity.legal_id)
qr = await tochka.sbp_register_qr(
merchant_id=merchant_id,
account=sbp_accounts[0].account,
is_static=True,
purpose="Перечисление по договору минета",
media_type="image/svg+xml",
)
print("Статичный без суммы:\n",qr.image.content)
qr = await tochka.sbp_register_qr(
merchant_id=merchant_id,
account=sbp_accounts[0].account,
is_static=True,
amount=Decimal("100.00"), # или Decimal(100), или 10000
purpose="Оплата аренды борделя",
media_type="image/svg+xml",
)
print("Статичный с суммой:\n",qr.image.content)
qr = await tochka.sbp_register_qr(
merchant_id=merchant_id,
account=sbp_accounts[0].account,
is_static=False,
amount=10000, # или Decimal(100)
ttl=60, # 0 - максимально возможное ограничение, иначе в минутах
purpose="Оплата поставки презервативов",
media_type="image/svg+xml",
)
print("Динамический с суммой:\n",qr.image.content)
async def refund():
accounts = await tochka.get_accounts()
customer_info = await tochka.sbp_get_customer_info(
customer_code=accounts[0].customer_code
)
sbp_accounts = await tochka.sbp_get_accounts(customer_info.legal_id)
payments = await tochka.sbp_get_payments(
customer_info.customer_code, from_date=1,
)
print(payments)
last_payment = payments.payments[0]
refund_response = await tochka.sbp_start_refund(
account=sbp_accounts[0].account,
amount=Decimal("1.25"), # или 125
qrc_id=last_payment.qrc_id,
trx_id=last_payment.trx_id,
)
print("Refund: ", refund_response)
async def main():
# Добавить два пользователя.
# Это могут быть бухгалтер и владелец одной компании
# или совершенно разные люди из разных компаний.
# Приложение может работать с несколькими пользователями
# либо в однопользовательском режиме, тогда надо указать
# tochka = TochkaAPI(client_id, client_secret, redirect_uri=redirect_uri, one_customer_mode=True)
# и тогда после добавления одного пользователя, система его запомнит.
# Указывать context_user_code не придётся
print("Введите что-либо, чтобы добавить пользователей")
print("Для пропуска нажмите Enter")
if input(">>> "):
await add_user()
await add_user()
else:
# можно не указывать, если one_customer_mode=True
context_user_code.set("212332030")
await refund()
balances = await tochka.get_balances()
print(balances[0].amount)
asyncio.run(main())
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tochechka-0.0.0.tar.gz.
File metadata
- Download URL: tochechka-0.0.0.tar.gz
- Upload date:
- Size: 25.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b9a0958768aad79ae2c95b5aa734905bdd027efe7584ecdc824c928e5c1a95e3
|
|
| MD5 |
ca5c1d4076ac6c4347d31647c2485fbe
|
|
| BLAKE2b-256 |
291b74b6af18d3656c6e50a15418698fa0bc10d444a5dae6fbf3cead144ad885
|
Provenance
The following attestation bundles were made for tochechka-0.0.0.tar.gz:
Publisher:
pypi-publish.yml on Ramedon1/tochechka
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tochechka-0.0.0.tar.gz -
Subject digest:
b9a0958768aad79ae2c95b5aa734905bdd027efe7584ecdc824c928e5c1a95e3 - Sigstore transparency entry: 787433770
- Sigstore integration time:
-
Permalink:
Ramedon1/tochechka@4cecb8bf32a5edcd87c3334217e942e828d95b02 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/Ramedon1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@4cecb8bf32a5edcd87c3334217e942e828d95b02 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tochechka-0.0.0-py3-none-any.whl.
File metadata
- Download URL: tochechka-0.0.0-py3-none-any.whl
- Upload date:
- Size: 34.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0a3bf2049f0a4028ee5163a37972734c2172aa28c76e9ddd2707885ce0e430a
|
|
| MD5 |
320b28506fff4689732b1e7292a677ed
|
|
| BLAKE2b-256 |
53cfd67fcbe513a12ae5e5dc1dd3d75b16e55e1bece07ecd8ccd4e83dfb8492b
|
Provenance
The following attestation bundles were made for tochechka-0.0.0-py3-none-any.whl:
Publisher:
pypi-publish.yml on Ramedon1/tochechka
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tochechka-0.0.0-py3-none-any.whl -
Subject digest:
a0a3bf2049f0a4028ee5163a37972734c2172aa28c76e9ddd2707885ce0e430a - Sigstore transparency entry: 787433776
- Sigstore integration time:
-
Permalink:
Ramedon1/tochechka@4cecb8bf32a5edcd87c3334217e942e828d95b02 -
Branch / Tag:
refs/tags/v1.0.3 - Owner: https://github.com/Ramedon1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@4cecb8bf32a5edcd87c3334217e942e828d95b02 -
Trigger Event:
push
-
Statement type: