""" Симулятор вебхука Pally для локального тестирования. Использование: python tests/send_test_webhook.py --user-id 123456789 --amount 300 --bill-id 1 Предварительно: - API должен быть запущен: uvicorn api.main:app --port 8000 - Пользователь с --user-id должен существовать в БД - Счёт с --bill-id должен существовать в БД и принадлежать этому пользователю """ import argparse import hashlib import os import httpx from dotenv import load_dotenv load_dotenv() ENDPOINT = "/pally/result" def calculate_signature( out_sum: str, inv_id: str, pally_token: str, ) -> str: raw = f"{out_sum}:{inv_id}:{pally_token}" return hashlib.md5(raw.encode()).hexdigest().upper() def main(): parser = argparse.ArgumentParser() parser.add_argument("--user-id", type=int, required=True) parser.add_argument("--amount", type=int, required=True) parser.add_argument("--bill-id", type=int, required=True) parser.add_argument("--host", default="http://127.0.0.1:8000") parser.add_argument( "--status", default="SUCCESS", choices=["SUCCESS", "FAIL", "PROCESS"], help="Статус платежа (по умолчанию SUCCESS)", ) args = parser.parse_args() pally_token = os.environ["PALLY_TOKEN"] inv_id = str(args.bill_id) out_sum = str(args.amount) trs_id = f"test_trs_{args.bill_id}" currency = "RUB" signature = calculate_signature(out_sum, inv_id, pally_token) payload = { "InvId": inv_id, "OutSum": out_sum, "Commission": "0", "TrsId": trs_id, "Status": args.status, "CurrencyIn": currency, "SignatureValue": signature, } print(f"{args.host}{ENDPOINT}") print(f"Отправляю вебхук: {payload}\n") response = httpx.post(f"{args.host}{ENDPOINT}", data=payload) print(f"Статус ответа: {response.status_code}") print(f"Тело ответа: {response.text}") if __name__ == "__main__": main()