我无法理解。我正在编写代码:它在日志中写道:Tinkoff 的响应:{'Success':False,'ErrorCode':'204','Message':'无效参数。','详细信息':'无效令牌。检查 TerminalKey/SecretKey 对。'}。 SecretKey 是什么意思?我附上了终端和密码,但汀卡发誓。告诉
async def create_tinkoff_payment(amount: int, order_id: str, description: str, success_url: str) -> str:
"""
Создание платежа через Tinkoff API.
"""
async with httpx.AsyncClient() as client:
payload = {
"TerminalKey": TINKOFF_TERMINAL_KEY,
"Amount": amount * 100, # Tinkoff ожидает сумму в копейках
"OrderId": order_id,
"Description": description,
"SuccessURL": success_url,
}
payload["Token"] = generate_tinkoff_token(payload)
# Логирование отправляемого запроса
print("Отправляемый запрос:", payload)
response = await client.post(TINKOFF_API_URL, json=payload)
response_data = response.json()
# Логирование ответа от Tinkoff
print("Ответ от Tinkoff:", response_data)
if response_data.get("Success"):
return response_data["PaymentURL"]
else:
raise Exception(f"Ошибка при создании платежа: {response_data.get('Message')}")
def generate_tinkoff_token(payload: dict) -> str:
"""
Генерация токена для Tinkoff API.
"""
token_str = (
f"{TINKOFF_SECRET_KEY}{payload['Amount']}{payload['OrderId']}"
f"{payload['Description']}{payload['TerminalKey']}"
)
return hashlib.sha256(token_str.encode("utf-8")).hexdigest()
@router.message(Command("start"))
async def start_handler(message: types.Message):
try:
order_id = f"{message.from_user.id}_{message.message_id}"
payment_url = await create_tinkoff_payment(
amount=100, # Сумма в рублях
order_id=order_id,
description="Оплата тестового товара",
success_url="https://securepay.tinkoff.ru/html/payForm/success.html", # Ссылка на успешную оплату
)
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Оплатить", url=payment_url)]
]
)
await message.answer("Оплатите, пожалуйста:", reply_markup=keyboard)
except Exception as e:
await message.answer(f"Ошибка: {str(e)}")
我们来看看文档。
[{"Amount": "19200"},{"Description": "1000 卢布礼品卡"},{"OrderId": "21090"},{"Password": "usaf8fw8fsw21g"},{"TerminalKey": “商户终端密钥”}]
“192001000卢布的礼品卡21090usaf8fw8fsw21gMerchantTerminalKey”
“0024a00af7c350a3a67ca168ce06502aa72772456662e38696d48b56ee9c97d9”
您生成令牌的字段顺序错误。它可能是正确的,如下所示:
嗯,
SecretKey显然这就是TINKOFF_SECRET_KEY你所说的。