Тестовый платёж YooKassa
تم الإنشاء في: ٩ يناير ٢٠٢٥
تم الإنشاء في: ٩ يناير ٢٠٢٥
привет напиши код на питоне для проведения тестовых платежей юкасса
Ниже приведён пример простого скрипта на Python, который демонстрирует, как с помощью официальной библиотеки yookassa можно провести тестовый платёж. Предполагается, что у вас уже есть тестовые shop_id и secret_key (их можно получить в личном кабинете YooKassa).
bashpip install yookassa
pythonfrom yookassa import Configuration, Payment # Укажите свои тестовые идентификаторы Configuration.account_id = '<ВАШ_TEST_SHOP_ID>' Configuration.secret_key = '<ВАШ_TEST_SECRET_KEY>' def create_test_payment(amount=10.00, currency='RUB'): """ Создаёт тестовый платёж в YooKassa и возвращает информацию о нём. """ payment_data = { "amount": { "value": str(amount), "currency": currency }, "confirmation": { "type": "redirect", # Сюда придёт покупатель после оплаты (можно указать любой URL, например, ваш тестовый) "return_url": "https://www.example.com/return_url" }, # Если capture=True, то деньги будут списаны автоматически. # Если False, придётся списывать вручную через отдельный метод capture. "capture": True, "description": "Тестовый платёж" } payment = Payment.create(payment_data) return payment if __name__ == "__main__": payment_response = create_test_payment(amount=2.00) # Выводим некоторые ключевые поля ответа print("ID платежа:", payment_response.id) print("Статус платежа:", payment_response.status) # Ссылка для подтверждения платежа (покупатель должен перейти по ней) if payment_response.confirmation: print("URL для подтверждения платежа:", payment_response.confirmation.confirmation_url) else: print("Платёж не требует дополнительного подтверждения.")
shop_id и secret_key для тестов.Configuration.account_id (Shop ID) и Configuration.secret_key (секретный ключ).Payment.create() принимает словарь с информацией о платеже. В нём обязательно должны присутствовать:
value и currency),redirect или embedded) и return_url,redirect пользователю нужно перейти по ссылке, находящейся в payment.confirmation.confirmation_url. При успешной оплате YooKassa вернёт покупателя по указанному return_url.Этот скрипт предназначен исключительно для демонстрации основных шагов при работе с API YooKassa. Для production-приложений обязательно нужно обрабатывать webhook (уведомления о статусе платежа), хранить данные о заказе в базе и обеспечивать безопасность ключей.
а как вызвать команду эту? напиши прям полносью код
Ниже приведён пример полноценного скрипта на Python, который:
Вы можете сохранить этот код, например, в файл test_yoo_payment.py, затем запустить его командой:
bashpython test_yoo_payment.py --shop-id <ВАШ_TEST_SHOP_ID> --secret-key <ВАШ_TEST_SECRET_KEY>
python#!/usr/bin/env python3 # -*- coding: utf-8 -*- import argparse from yookassa import Configuration, Payment def create_test_payment(shop_id, secret_key, amount, currency): """ Создаёт тестовый платёж в YooKassa и возвращает информацию о нём. """ # Настраиваем идентификаторы Configuration.account_id = shop_id Configuration.secret_key = secret_key payment_data = { "amount": { "value": str(amount), "currency": currency }, "confirmation": { "type": "redirect", # URL, на который вернётся покупатель после оплаты "return_url": "https://www.example.com/return_url" }, # Если capture=True, то деньги будут списаны автоматически. "capture": True, "description": "Тестовый платёж" } # Создаём платёж через API YooKassa payment = Payment.create(payment_data) return payment def main(): # Аргументы командной строки parser = argparse.ArgumentParser( description="Скрипт для создания тестового платежа в YooKassa" ) parser.add_argument( "--shop-id", required=True, help="Тестовый Shop ID (из личного кабинета YooKassa в тестовом режиме)" ) parser.add_argument( "--secret-key", required=True, help="Тестовый Secret Key (из личного кабинета YooKassa в тестовом режиме)" ) parser.add_argument( "--amount", type=float, default=10.0, help="Сумма платежа (по умолчанию: 10.0)" ) parser.add_argument( "--currency", default="RUB", help="Валюта платежа (по умолчанию: RUB)" ) args = parser.parse_args() # Вызываем функцию для создания тестового платежа payment_response = create_test_payment( shop_id=args.shop_id, secret_key=args.secret_key, amount=args.amount, currency=args.currency ) # Выводим результаты print("ID платежа:", payment_response.id) print("Статус платежа:", payment_response.status) # Если в ответе есть confirmation_url, значит нужно переадресовать пользователя if payment_response.confirmation and payment_response.confirmation.confirmation_url: print("URL для подтверждения платежа:", payment_response.confirmation.confirmation_url) else: print("Платёж не требует дополнительного подтверждения.") if __name__ == "__main__": main()
Установите библиотеку:
bashpip install yookassa
Сохраните код в файл, например, test_yoo_payment.py.
Запустите в консоли, передав свои тестовые реквизиты:
bashpython test_yoo_payment.py --shop-id 123456 --secret-key 'test_ABCDEF123456' --amount 200.0 --currency RUB
Результат появится в консоли: вы увидите ID платежа, Статус платежа и (если требуется) ссылку, куда нужно переадресовать пользователя для подтверждения платежа.
Важно: Для полноценной интеграции в реальном проекте необходимо:
– Работать с вебхуками (Webhook) для получения нотификаций о статусе платежа.
– Безопасно хранить секретные ключи (например, в.envили переменных окружения).
python SOSI.py --shop-id 999387 --secret-key 'TEST:98750' --amount 200.0 --currency
usage: SOSI.py [-h] --shop-id SHOP_ID --secret-key SECRET_KEY [--amount AMOUNT] [--currency CURRENCY]
SOSI.py: error: argument --currency: expected one argument
Судя по сообщению об ошибке:
argument --currency: expected one argument
Вы указали флаг --currency, но не передали ему значение. То есть команда выглядит так:
bashpython SOSI.py --shop-id 999387 --secret-key 'TEST:98750' --amount 200.0 --currency
Однако скрипт ожидает, что после --currency будет валюта (например, RUB). Поэтому нужно дописать валюту в эту часть команды. Корректный пример вызова:
bashpython SOSI.py --shop-id 999387 --secret-key 'TEST:98750' --amount 200.0 --currency RUB
В таком случае, скрипт получит все нужные аргументы:
--shop-id (ID вашей тестовой витрины)--secret-key (тестовый секретный ключ)--amount (сумма платежа)--currency (валюта платежа, например, RUB)Если вы хотите использовать валюту по умолчанию (в коде, скорее всего, это RUB), то либо совсем не указывайте флаг --currency, либо указывайте вместе с нужным значением. Без аргумента после --currency Python-скрипт не знает, какая именно валюта нужна, и выдаёт соответствующую ошибку.
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\yookassa\client.py", line 86, in execute
self.log_response(raw_response.content, self.get_response_info(raw_response), raw_response.headers)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\yookassa\client.py", line 176, in get_response_info
"raise_for_status": response.raise_for_status(),
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\requests\models.py", line 1024, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: for url: https://api.yookassa.ru/v3/payments
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\SOSI.py", line 81, in <module>
main()
File "C:\SOSI.py", line 63, in main
payment_response = create_test_payment(
^^^^^^^^^^^^^^^^^^^^
File "C:\SOSI.py", line 31, in create_test_payment
payment = Payment.create(payment_data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\yookassa\payment.py", line 66, in create
response = instance.client.request(HttpVerb.POST, path, None, headers, params_object)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\yookassa\client.py", line 55, in request
self.__handle_error(e.response)
File "C:\Users\Kerpat\AppData\Local\Programs\Python\Python312\Lib\site-packages\yookassa\client.py", line 152, in __handle_error
raise UnauthorizedError(raw_response.json())
yookassa.domain.exceptions.unauthorized_error.UnauthorizedError: {'type': 'error', 'id': 'ad0808cb-2a18-414c-82cf-81e0ffbea605', 'code': 'invalid_credentials', 'description': 'Authentication by given credentials failed', 'parameter': 'Authorization'}
PS C:>
Ошибка 401 Client Error: Authentication by given credentials failed говорит о том, что при запросе к API YooKassa отбрасываются неверные (или некорректно переданные) параметры аутентификации. Проще говоря, указанные shop_id или secret_key не распознаются как валидные.
Чтобы устранить проблему:
Проверьте тестовые реквизиты
secret_key обычно начинается с префикса test_. Например:
Configuration.secret_key = "test_QwertyuiopASDFGHJKL"
shop_id может выглядеть как обычное число (например, 999999 или другое).Убедитесь, что тестовый режим включён
secret_key получен в Production-режиме, он не будет работать в тестовом запросе.Формат секретного ключа
TEST:98750 (или что-то похожее), скорее всего вы скопировали не тот формат.test_XXXXXXXXXXXXX.Пример корректного кода
Ваш скрипт может выглядеть так (условно назовём файл SOSI.py):
python#!/usr/bin/env python3 # -*- coding: utf-8 -*- import argparse from yookassa import Configuration, Payment def create_test_payment(shop_id, secret_key, amount, currency): # Настраиваем идентификаторы Configuration.account_id = shop_id Configuration.secret_key = secret_key payment_data = { "amount": { "value": str(amount), "currency": currency }, "confirmation": { "type": "redirect", "return_url": "https://www.example.com/return_url" }, "capture": True, "description": "Тестовый платёж" } payment = Payment.create(payment_data) return payment def main(): parser = argparse.ArgumentParser(description="Скрипт для создания тестового платежа в YooKassa") parser.add_argument("--shop-id", required=True, help="Тестовый Shop ID (из личного кабинета YooKassa)") parser.add_argument("--secret-key", required=True, help="Тестовый Secret Key (из личного кабинета YooKassa)") parser.add_argument("--amount", type=float, default=10.0, help="Сумма платежа (по умолчанию: 10.0)") parser.add_argument("--currency", default="RUB", help="Валюта платежа (по умолчанию: RUB)") args = parser.parse_args() payment_response = create_test_payment( shop_id=args.shop_id, secret_key=args.secret_key, amount=args.amount, currency=args.currency ) print("ID платежа:", payment_response.id) print("Статус платежа:", payment_response.status) if payment_response.confirmation and payment_response.confirmation.confirmation_url: print("URL для подтверждения платежа:", payment_response.confirmation.confirmation_url) else: print("Платёж не требует дополнительного подтверждения.") if __name__ == "__main__": main()
А вызывать скрипт нужно так (обратите внимание на формат ключа):
bashpython SOSI.py --shop-id 999999 --secret-key 'test_XXXXXXXX' --amount 200.0 --currency RUB
Проверьте, что вы не путаете prod- и test-ключи
Уточните, что за значение у вас в secret_key
TEST:98750, проверьте, не нужно ли вместо TEST: написать test_.В общем, 401 Unauthorized почти всегда означает, что либо вы используете не ту пару (Shop ID + Secret Key), либо в личном кабинете не включён тестовый режим, либо формат ключа неверный. Сверьте ещё раз данные из своего «тестового» личного кабинета YooKassa и подставьте их правильно в скрипт.