Тестовый платёж YooKassa

Creado el: 9 de enero de 2025

Respondido usando O1 por Chat01

Pregunta

привет напиши код на питоне для проведения тестовых платежей юкасса

Pensamiento

Crafting Python code
I’m working on coding Python for YooKassa test payments, focusing on creating and confirming payments. The request involves showcasing essential functionalities in the most concise manner.

Setting up YooKassa

I’m integrating the "yookassa" library, configuring shop_id and secret_key, and creating a test payment. Using a test mode, I’ll manage all necessary test details.

Thought about тестовые платежи Юкасса для 10 секунд

Respuesta

Ниже приведён пример простого скрипта на Python, который демонстрирует, как с помощью официальной библиотеки yookassa можно провести тестовый платёж. Предполагается, что у вас уже есть тестовые shop_id и secret_key (их можно получить в личном кабинете YooKassa).

Установка библиотеки

bash
pip install yookassa

Пример кода

python
from 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("Платёж не требует дополнительного подтверждения.")

Основные моменты

  1. Тестовые реквизиты. Перед тем как проводить тестовые платежи, в личном кабинете YooKassa необходимо включить тестовый режим и сгенерировать shop_id и secret_key для тестов.
  2. Конфигурация. Для работы с библиотекой нужно указать Configuration.account_id (Shop ID) и Configuration.secret_key (секретный ключ).
  3. Создание платежа. Метод Payment.create() принимает словарь с информацией о платеже. В нём обязательно должны присутствовать:
    • amount: сумма и валюта (value и currency),
    • confirmation: объект с типом (redirect или embedded) и return_url,
    • capture: признак автоматического списания,
    • description: описание платежа (опционально, но удобно для логирования).
  4. Подтверждение платежа. Для платежей с типом redirect пользователю нужно перейти по ссылке, находящейся в payment.confirmation.confirmation_url. При успешной оплате YooKassa вернёт покупателя по указанному return_url.

Этот скрипт предназначен исключительно для демонстрации основных шагов при работе с API YooKassa. Для production-приложений обязательно нужно обрабатывать webhook (уведомления о статусе платежа), хранить данные о заказе в базе и обеспечивать безопасность ключей.

Pregunta

а как вызвать команду эту? напиши прям полносью код

Pensamiento

Creating the script

I’m preparing a Python script to guide test payments in YooKassa. The script will include how to execute it from the command line, illuminating the essential steps from setup to running.

Setting up the script

I’m working on a Python script with argparse for test payments in YooKassa. The script uses command-line arguments for shop ID and secret key, and prints payment details, including confirmation URL.

Finalizing the script

I’m wrapping up a minimal Python script for test payments in YooKassa, incorporating argparse for command-line execution. The script handles payment creation and displays details and confirmation URL.

Thought about вызов тестового платежа для 11 секунд

Respuesta

Ниже приведён пример полноценного скрипта на Python, который:

  1. Принимает на вход тестовые реквизиты (Shop ID и Secret Key), сумму и валюту платежа.
  2. Создаёт тестовый платёж в YooKassa.
  3. Выводит в консоль основную информацию о платеже.

Вы можете сохранить этот код, например, в файл test_yoo_payment.py, затем запустить его командой:

bash
python 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()

Как запустить?

  1. Установите библиотеку:

    bash
    pip install yookassa
  2. Сохраните код в файл, например, test_yoo_payment.py.

  3. Запустите в консоли, передав свои тестовые реквизиты:

    bash
    python test_yoo_payment.py --shop-id 123456 --secret-key 'test_ABCDEF123456' --amount 200.0 --currency RUB
  4. Результат появится в консоли: вы увидите ID платежа, Статус платежа и (если требуется) ссылку, куда нужно переадресовать пользователя для подтверждения платежа.

Важно: Для полноценной интеграции в реальном проекте необходимо:
– Работать с вебхуками (Webhook) для получения нотификаций о статусе платежа.
– Безопасно хранить секретные ключи (например, в .env или переменных окружения).

Pregunta

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

Pensamiento

Identifying the issue

The user encountered an error while running the script, indicating the --currency parameter is missing an argument, such as RUB.

Thought about command-line argument issue для 8 секунд

Respuesta

Судя по сообщению об ошибке:

argument --currency: expected one argument

Вы указали флаг --currency, но не передали ему значение. То есть команда выглядит так:

bash
python SOSI.py --shop-id 999387 --secret-key 'TEST:98750' --amount 200.0 --currency

Однако скрипт ожидает, что после --currency будет валюта (например, RUB). Поэтому нужно дописать валюту в эту часть команды. Корректный пример вызова:

bash
python 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-скрипт не знает, какая именно валюта нужна, и выдаёт соответствующую ошибку.

Pregunta

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:>

Pensamiento

Suggestions for testing credentials include verifying accuracy, adding them to the YooKassa personal account, and matching modes for correct environment usage.

Clarifying test credentials

I’m working through users' confusion about valid test credentials. Clear instructions on using specific formats and ensuring correct environment setup are essential.

Thought about YooKassa authorization error для 6 секунд

Respuesta

Ошибка 401 Client Error: Authentication by given credentials failed говорит о том, что при запросе к API YooKassa отбрасываются неверные (или некорректно переданные) параметры аутентификации. Проще говоря, указанные shop_id или secret_key не распознаются как валидные.

Чтобы устранить проблему:

  1. Проверьте тестовые реквизиты

    • Убедитесь, что вы используете тестовые данные из личного кабинета YooKassa (в разделе «Тестовые аккаунты»).
    • Тестовый secret_key обычно начинается с префикса test_. Например:
      Configuration.secret_key = "test_QwertyuiopASDFGHJKL"
      
    • Тестовый shop_id может выглядеть как обычное число (например, 999999 или другое).
  2. Убедитесь, что тестовый режим включён

    • В личном кабинете YooKassa должен быть включён «Тестовый режим» для вашего аккаунта.
    • Если secret_key получен в Production-режиме, он не будет работать в тестовом запросе.
  3. Формат секретного ключа

    • Если у вас ключ вида TEST:98750 (или что-то похожее), скорее всего вы скопировали не тот формат.
    • Обычно тестовый ключ выглядит так: test_XXXXXXXXXXXXX.
    • Убедитесь, что вы действительно передаёте правильный ключ, а не какую-то другую строку (часто бывает, что ключ путают с токеном «OAuth» или неправильным форматом).
  4. Пример корректного кода
    Ваш скрипт может выглядеть так (условно назовём файл 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()

    А вызывать скрипт нужно так (обратите внимание на формат ключа):

    bash
    python SOSI.py --shop-id 999999 --secret-key 'test_XXXXXXXX' --amount 200.0 --currency RUB
  5. Проверьте, что вы не путаете prod- и test-ключи

    • Если в личном кабинете есть и «боевые» (production), и «тестовые» ключи, нужно брать именно тестовые.
    • Если вы пытаетесь провести тестовый платёж с боевым ключом или наоборот, тоже будет 401 ошибка.
  6. Уточните, что за значение у вас в secret_key

    • Если действительно есть строка вида TEST:98750, проверьте, не нужно ли вместо TEST: написать test_.
    • Удостоверьтесь, что ключ скопирован полностью, без лишних пробелов или переносов строк.

В общем, 401 Unauthorized почти всегда означает, что либо вы используете не ту пару (Shop ID + Secret Key), либо в личном кабинете не включён тестовый режим, либо формат ключа неверный. Сверьте ещё раз данные из своего «тестового» личного кабинета YooKassa и подставьте их правильно в скрипт.

Compartir este Q&A