У меня не получается переписать код с php на python?

`

<?php

$apiKey = "";
$secret = "";


$ch = curl_init("https://pikassa.io/merchant-api/api/v2/invoices");

$payload = json_encode(array(
    "externalId" => uniqid(),
    "amount" => 105.05,
    "currency" => "RUB",
    "description" => "Оплата заказа",
    "customerPhone" => "+74994550185",
    "customerEmail" => "[email protected]",
    "customData" => array("key1" => "value1", "key2" => 5),
    "successUrl" => "https://mysite.com/successUrl",
    "failUrl" => "https://mysite.com/failUrl",
    "deliveryMethod" => "URL",
    "expirationDate" => "2021-03-14 11:08:24.090915+03:00",
    "ofdData" => null,
    "preAuth" => false
), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
var_dump($payload);

$sign = base64_encode(md5($payload . $secret, true));

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type:application/json",
    "X-Api-Key:" . $apiKey,
    "X-Sign:" . $sign
));
$res = curl_exec($ch);
var_dump($res);

if (curl_errno($ch)) {
    var_dump(curl_error($ch));
}

curl_close($ch);
?>

url = "https://pikassa.io/merchant-api/api/v2/invoices"

secret = "26737e7a9f0c435a80f68cd0431ae216"
apiKey = "aeb13fd8-3803-4e93-8e33-3ded29d144a6"

params = {
    "externalId": "3c5301df-d806-4fb0-9f96-f44d5d2d3827",
    "amount": 105.05,
    "currency": "RUB",
    "description": "Оплата заказа",
    "deliveryMethod": "EMAIL",
}

params2 = json.dumps(params) + secret
sign = hashlib.md5(params2.encode("utf-8")).hexdigest()
sign2 = base64.b64encode(sign.encode())


headers = {
  "Content-Type": "application/json; charset=utf-8",
  "X-Api-Key": apiKey,
  "X-Sign": sign2.decode('utf-8')
}

data = json.dumps(params)
key = json.dumps(headers)

test = json.loads(key)

res = requests.post(url, headers=test, data=data)
print(res.text)

` Пытаюсь отправлять запросы но возникает ошибка неправильный X-Sign, не понимаю что я не так делаю. Документация к api https://pikassa.io/docs/#6bad239f3a

Получаю в ответ

{
    "success": false,
    "error": {

        "code": "-1",
        "message": "Forbidden",
        "correlationId": "1a4acf90-ffa4-4224-93c1-78ccb6db09fc"    }
}

Ответы (1 шт):

Автор решения: Nonen_Hook

Попробуйте этот код:

import json
import hashlib
import base64
import requests

api_key = ""
secret = ""

url = "https://pikassa.io/merchant-api/api/v2/invoices"

payload = json.dumps({
    "externalId": uniqid(),
    "amount": 105.05,
    "currency": "RUB",
    "description": "Оплата заказа",
    "customerPhone": "+74994550185",
    "customerEmail": "[email protected]",
    "customData": {"key1": "value1", "key2": 5},
    "successUrl": "https://mysite.com/successUrl",
    "failUrl": "https://mysite.com/failUrl",
    "deliveryMethod": "URL",
    "expirationDate": "2021-03-14 11:08:24.090915+03:00",
    "ofdData": None,
    "preAuth": False,
}, ensure_ascii=False)

sign = base64.b64encode(hashlib.md5(payload.encode() + secret.encode()).digest()).decode()

headers = {
    "Content-Type": "application/json",
    "X-Api-Key": api_key,
    "X-Sign": sign,
}

res = requests.post(url, data=payload, headers=headers)

print(res.text)
→ Ссылка