@QSaveSu

Как получить статус платежа Robokassa?

Добрый день, я пытаюсь реализовать платёжную систему 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"
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы