Тип объекта <class 'str'> не может быть передан в код C CCAvenue payment gateway interation pycryptodome::3.10.1

Я хочу интегрировать платежный шлюз CCAvenue в мой сайт, для этого мне нужно отправить все требования, такие как Merchant ID, рабочий ключ и т.д. в зашифрованном виде на их страницу для оплаты. Для шифрования я использую pycryptodome==3.10.1. Вот метод, который я использую для шифрования моих данных.

def encrypt(plain_text, working_key):

"""
Method to encrypt cc-avenue hash.
:param plain_text: plain text
:param working_key: cc-avenue working key.
:return: md5 hash
"""

iv = '\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'
plain_text = pad(plain_text)

byte_array_wk = bytearray()
byte_array_wk.extend(map(ord, working_key))

enc_cipher = AES.new(hashlib.md5(byte_array_wk).digest(), AES.MODE_CBC, iv) #error line
hexl = hexlify(enc_cipher.encrypt(plain_text)).decode('utf-8')

return hexl

В третьей последней строке я получаю эту ошибку Object type <class 'str'> cannot be passed to C code. Вот данные, которые я шифрую, на всякий случай, если они вам понадобятся.

merchant_data = 'merchant_id=' + p_merchant_id + \
                '&' + 'order_id=' + p_order_id + \
                '&' + "currency=" + p_currency + \
                '&' + 'amount=' + p_amount + \
                '&' + 'redirect_url=' + p_redirect_url + \
                '&' + 'cancel_url=' + p_cancel_url + \
                '&' + 'language=' + p_language + \
                '&' + 'billing_name=' + p_billing_name + \
                '&' + 'billing_address=' + p_billing_address + \
                '&' + 'billing_city=' + p_billing_city + \
                '&' + 'billing_state=' + p_billing_state + \
                '&' + 'billing_zip=' + p_billing_zip + \
                '&' + 'billing_country=' + p_billing_country + \
                '&' + 'billing_tel=' + p_billing_tel + \
                '&' + 'billing_email=' + p_billing_email + \
                '&' + 'delivery_name=' + p_delivery_name + \
                '&' + 'delivery_address=' + p_delivery_address + \
                '&' + 'delivery_city=' + p_delivery_city + \
                '&' + 'delivery_state=' + p_delivery_state + \
                '&' + 'delivery_zip=' + p_delivery_zip + \
                '&' + 'delivery_country=' + p_delivery_country + \
                '&' + 'delivery_tel=' + p_delivery_tel + \
                '&' + 'merchant_param1=' + p_merchant_param1 + \
                '&' + 'merchant_param2=' + p_merchant_param2 + \
                '&' + 'merchant_param3=' + p_merchant_param3 + \
                '&' + 'merchant_param4=' + p_merchant_param4 + \
                '&' + 'merchant_param5=' + p_merchant_param5 + \
                '&' + 'promo_code=' + p_promo_code + \
                '&' + 'customer_identifier=' + p_customer_identifier + \
                '&'

Traceback:

    Traceback (most recent call last):
      File "C:\Users\Asus\Envs\test\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
        response = get_response(request)
      File "C:\Users\Asus\Envs\test\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "C:\Users\Asus\Desktop\python3-ccavenue\ccpay\pay\views.py", line 79, in checkout
        encryption = encrypt(merchant_data, settings.CC_WORKING_KEY)
      File "C:\Users\Asus\Desktop\python3-ccavenue\ccpay\pay\utils.py", line 45, in encrypt
        enc_cipher = AES.new(hashlib.md5(byte_array_wk).digest(), AES.MODE_CBC, iv)
      File "C:\Users\Asus\Envs\test\lib\site-packages\Crypto\Cipher\AES.py", line 232, in new
        return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
      File "C:\Users\Asus\Envs\test\lib\site-packages\Crypto\Cipher\__init__.py", line 79, in _create_cipher
        return modes[mode](factory, **kwargs)
      File "C:\Users\Asus\Envs\test\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 293, in _create_cbc_cipher
        return CbcMode(cipher_state, iv)
      File "C:\Users\Asus\Envs\test\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 97, in __init__
        c_uint8_ptr(iv),
      File "C:\Users\Asus\Envs\test\lib\site-packages\Crypto\Util\_raw_api.py", line 232, in c_uint8_ptr
        raise TypeError("Object type %s cannot be passed to C code" % type(data))
    TypeError: Object type <class 'str'> cannot be passed to C code
    [25/Aug/2021 21:02:14] "GET / HTTP/1.1" 500 100786
Вернуться на верх