Невозможно обработать Paytm в django rest framework

Я пытаюсь интегрировать paytm с django rest framework. Но не знаю, почему я получаю несоответствие контрольной суммы. То есть при инициации платежа генерируется checksum, но при проверке контрольной суммы она отличается. #Виды - инициирование платежа

            context = {
                "MID": settings.PAYTM_MERCHANT_ID,
                "INDUSTRY_TYPE_ID": settings.PAYTM_INDUSTRY_TYPE_ID,
                "WEBSITE": settings.PAYTM_WEBSITE,
                "CHANNEL_ID": settings.PAYTM_CHANNEL_ID,
                "CALLBACK_URL": settings.PAYTM_CALLBACK_URL,
                "ORDER_ID": str(order.order_number),
                "TXN_AMOUNT": str(amount),
                "CUST_ID": str(user.id),
            }
            context["CHECKSUMHASH"] = Checksum.generate_checksum(
                context, settings.PAYTM_MERCHANT_KEY
            )
            return Response({"context": context})

После инициации я отправляю CHECKSUMHASH в почтовом запросе вместе с MID, ORDERID через postman и проверяю валидацию контрольной суммы

def VerifyPaytmResponse(response):
    response_dict = dict()
    print('in VerifyPaytmResponse 0')
    if response.method == "POST":
        data_dict = dict()
        form = response.POST
        for key in form.keys():
            data_dict[key] = form[key]
            print('ENTERING HERER')
            if key == 'CHECKSUMHASH':
                check_sum = data_dict[key]
        MID = data_dict['MID']
        ORDERID = data_dict['ORDERID']
        verify = Checksum.verify_checksum(
            data_dict, settings.PAYTM_MERCHANT_KEY, check_sum)
        if verify:
            STATUS_URL = settings.PAYTM_TRANSACTION_STATUS_URL
            headers = {
                'Content-Type': 'application/json',
            }
            data = '{"MID":"%s","ORDERID":"%s"}' % (MID, ORDERID)
            check_resp = requests.post(
                STATUS_URL, data=data, headers=headers).json()
            if check_resp['STATUS'] == 'TXN_SUCCESS':
                response_dict['verified'] = True
                response_dict['paytm'] = check_resp
                return (response_dict)
            else:
                response_dict['verified'] = False
                response_dict['paytm'] = check_resp
                return (response_dict)
        else:
            response_dict['verified'] = False
            return (response_dict)
    response_dict['verified'] = False
    return response_dict

Выполняется ошибка, потому что функция проверки контрольной суммы не совпадает. Ниже приведена проверяющая функция

def generate_checksum(param_dict, merchant_key, salt=None):
    params_string = __get_param_string__(param_dict)
    salt = salt if salt else __id_generator__(4)
    final_string = '%s|%s' % (params_string, salt)

    hasher = hashlib.sha256(final_string.encode())
    hash_string = hasher.hexdigest()

    hash_string += salt

    return __encode__(hash_string, IV, merchant_key)

def verify_checksum(param_dict, merchant_key, checksum):
    # Remove checksum
    if 'CHECKSUMHASH' in param_dict:
        param_dict.pop('CHECKSUMHASH')

    # Get salt
    paytm_hash = __decode__(checksum, IV, merchant_key)

    salt = paytm_hash[-4:]
    return calculated_checksum == checksum

В приведенной выше функции verify_checksum функция calculated_checksum не равна checksum. Поэтому верификация проходит неудачно.

Вернуться на верх