Как получить ссылку на оплату в Модульбанке?
Не понимаю в чем проблема приполучении ссылки на оплату для пользователя. Вот код, который я написал для тестирования оплаты.
def get_raw_signature(params):
chunks = []
for key in sorted(params.keys()):
if key == 'signature':
continue
value = params[key]
if isinstance(value, str):
value = value.encode('utf8')
else:
value = str(value).encode('utf-8')
if not value:
continue
value_encoded = base64.b64encode(value)
chunks.append('%s=%s' % (key, value_encoded.decode()))
raw_signature = '&'.join(chunks)
return raw_signature
'''Двойное шифрование sha1 на основе секретного ключа'''
def double_sha1(secret_key, data):
sha1_hex = lambda s: hashlib.sha1(s.encode('utf-8')).hexdigest()
digest = sha1_hex(secret_key + sha1_hex(secret_key + data))
return digest
'''Вычисляем подпись (signature). Подпись считается на основе склеенной
строки из отсортированного массива параметров, исключая из расчета пустые
поля и элемент "signature" '''
def get_signature(secret_key: str, params: dict) -> str:
return double_sha1(secret_key=secret_key, data=get_raw_signature(params))
def get_date():
today = datetime.datetime.today()
return str(int(today.timestamp()))
def func1():
headers = {
"Authorization": "Bearer",
'Content-Type': 'application/json'
}
params = {
"merchant": "<Идентификатор магазина>",
"amount": '973',
"description": "Заказ №14425840",
"testing": "1",
"receipt_contact": "<Почта>",
"receipt_items": """[{"discount_sum": 40, "name": "Товар 1", "payment_method": "full_prepayment", "payment_object": "commodity", "price": 48, "quantity": 10, "sno": "osn", "vat": "vat10"}, {"name": "Товар 2", "payment_method": "full_prepayment", "payment_object": "commodity", "price": 533, "quantity": 1, "sno": "osn", "vat": "vat10"}]""",
"unix_timestamp": get_date(),
"salt": "GfudKOAsXobWVpNovJHCreKmJXNkLqtA"
}
params["signature"] = get_signature(params=params, secret_key="<Секретный ключ>")
print(params)
request = requests.post(url="https://pay.modulbank.ru/api/v1/bill/", params=params, headers=headers)
print(request.text)
В результате выполнения кода вылазит ошибка
{
"message": "Не заполнены поля: текущая дата на сервере, криптографическая подпись, amount, описание заказа; Идентификатор магазина: Неверный идентификатор магазина",
"status": "error"
}
Подскажите, пожалуйста, в чем проблема