Добрый день, я пытаюсь реализовать платёжную систему Robokassa в моём телеграмм-боте (Aiogram3.7), используя файл который загрузили сами разработчики, на сайт, вопрос в том что я не понимаю что мне нужно передавать в request в функции result_payment. Платёж создать удалось и оплатить его тоже, используя функцию generate_payment_link.
Платёжку я заменить не смогу, пароли указаны верно и ID тоже.
(Вот сам файл)
def calculate_signature(*args) -> str:
"""Create signature MD5.
"""
return hashlib.md5(':'.join(str(arg) for arg in args).encode()).hexdigest()
def parse_response(request: str) -> dict:
"""
:param request: Link.
:return: Dictionary.
"""
params = {}
for item in urlparse(request).query.split('&'):
key, value = item.split('=')
params[key] = value
return params
def check_signature_result(merchant_login,
order_number: int, # invoice number
received_sum: int, # cost of goods, RU
received_signature: hex, # SignatureValue
password: str # Merchant password
) -> bool:
signature = calculate_signature(merchant_login,received_sum, order_number, password)
return signature.lower() == received_signature.lower()
# Формирование URL переадресации пользователя на оплату.
def generate_payment_link(
number: int, # Invoice number
description: str, # Description of the purchase,
) -> str:
"""URL for redirection of the customer to the service.
"""
signature = calculate_signature(
PaymentConfig.merchant_login,
PaymentConfig.merchant_cost,
number,
PaymentConfig.merchant_password_1
)
data = {
'MerchantLogin': PaymentConfig.merchant_login,
'OutSum': PaymentConfig.merchant_cost,
'InvId': number,
'Description': description,
'SignatureValue': signature
}
return f'{"https://auth.robokassa.ru/Merchant/Index.aspx"}?{parse.urlencode(data)}'
# Получение уведомления об исполнении операции (ResultURL).
async def result_payment(merchant_password_1: str, request: str) -> str:
"""Verification of notification (ResultURL).
:param request: HTTP parameters.
"""
param_request = parse_response(request)
cost = param_request['OutSum']
number = param_request['InvId']
signature = param_request['SignatureValue']
print(param_request)
if check_signature_result(PaymentConfig.merchant_login,number, cost, signature, merchant_password_1):
return f'OK{param_request["InvId"]}'
return "bad sign"