Package: tochka-api
🎉 Tochka APIУдобная обёртка над открытым API Банка Точка📥 Установка📦 Из pip:python-mpipinstall-utochka_api🏗 Из репозитория:gitclonehttps://github.com/WhiteApfel/tochka_api.gitcdtochka_api
pythonsetup.pyinstall🚧 Прогресс разработкиАвторизацияБалансыСчетаWebhooksВыпискиКартыКлиентыПлатежиРазрешенияСпециальные счетаСБПQRТСП (Merchant)Компании (Legal)Возвраты🧑‍🏫 Как использовать💰 Уточнения по типу данных для суммыDecimalandstr- amount in rublesint- amount in kopecksРазличия user_code и customer_codeuser_codeэто код клиента, который имеет доступ к компанииcustomer_codeэто код компании(ИП), на которую открыты счетаimportasynciofromdecimalimportDecimalfromtochka_apiimportTochkaAPI,context_user_codefromtochka_api.modelsimportPermissionsEnumclient_id="<<client_id>>"client_secret="<<client_secret>>"redirect_uri="https://tochka-api.pfel.cc/"tochka=TochkaAPI(client_id,client_secret,redirect_uri=redirect_uri)asyncdefadd_user():consents_token,consents_expires_in=awaittochka.get_consents_token()consents_request=awaittochka.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=awaittochka.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=awaitregister_merchant(user_code=tokens.user_code)awaitregister_qr(merchant_id=merchant_id)asyncdefget_accounts():# user_code будет унаследован из context_user_code# Это thread-safe и loop-safefor_inrange(25):awaittochka.get_accounts()awaitasyncio.sleep(2)asyncdefregister_merchant(user_code)->str:# Будет использоваться указанный user_code# Даже если в context_user_code было задано другое значениеaccounts=awaittochka.get_accounts(user_code=user_code)customer_info=awaittochka.sbp_get_customer_info(customer_code=accounts[0].customer_code)legal_entity=awaittochka.sbp_get_legal_entity(customer_info.legal_id)merchant=awaittochka.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(*(awaittochka.sbp_get_merchants(legal_id=legal_entity.legal_id)).merchants,sep="\n",)returnmerchant.merchant_idasyncdefregister_qr(merchant_id):# user_code будет унаследован из context_user_code# Это thread-safe и loop-safeaccounts=awaittochka.get_accounts()customer_info=awaittochka.sbp_get_customer_info(customer_code=accounts[0].customer_code)legal_entity=awaittochka.sbp_get_legal_entity(customer_info.legal_id)sbp_accounts=awaittochka.sbp_get_accounts(legal_entity.legal_id)qr=awaittochka.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=awaittochka.sbp_register_qr(merchant_id=merchant_id,account=sbp_accounts[0].account,is_static=True,amount=Decimal("100.00"),# или Decimal(100), или 10000purpose="Оплата аренды борделя",media_type="image/svg+xml",)print("Статичный с суммой:\n",qr.image.content)qr=awaittochka.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)asyncdefrefund():accounts=awaittochka.get_accounts()customer_info=awaittochka.sbp_get_customer_info(customer_code=accounts[0].customer_code)sbp_accounts=awaittochka.sbp_get_accounts(customer_info.legal_id)payments=awaittochka.sbp_get_payments(customer_info.customer_code,from_date=1,)print(payments)last_payment=payments.payments[0]refund_response=awaittochka.sbp_start_refund(account=sbp_accounts[0].account,amount=Decimal("1.25"),# или 125qrc_id=last_payment.qrc_id,trx_id=last_payment.trx_id,)print("Refund: ",refund_response)asyncdefmain():# Добавить два пользователя.# Это могут быть бухгалтер и владелец одной компании# или совершенно разные люди из разных компаний.# Приложение может работать с несколькими пользователями# либо в однопользовательском режиме, тогда надо указать# tochka = TochkaAPI(client_id, client_secret, redirect_uri=redirect_uri, one_customer_mode=True)# и тогда после добавления одного пользователя, система его запомнит.# Указывать context_user_code не придётсяprint("Введите что-либо, чтобы добавить пользователей")print("Для пропуска нажмите Enter")ifinput(">>> "):awaitadd_user()awaitadd_user()else:# можно не указывать, если one_customer_mode=Truecontext_user_code.set("212332030")awaitrefund()balances=awaittochka.get_balances()print(balances[0].amount)asyncio.run(main())