Как получить json представление тела запроса?
Тут просят:
Формирование подписи запросов
"Подпись запроса необходимо передавать в заголовках запроса в параметре Authorization. Пример:
Authorization: 0ed9166cbb3595ec9bdaf4cbb79b94196d8d8be5
Сама подпись является sha1 хешем полученной из конкатенированной строки, содержащей в себе: «json представление тела запроса» + «API ключ»"
Я разобрался с заголовками, с шифрованием sha1, но как мне получить «json представление тела запроса»?
Вот мой код:
import requests
import json
import hashlib
url ='https://*****.taxicrm.ru/api/public/v1/user/list'
key = "Мой ключ"
json_key = key + "json тело"
h = hashlib.sha1(json_key.encode('utf-8')).hexdigest()
req = requests.post(url, headers = {"Authorization": h})
try:
resp = req.json()
except Exception as e:
print(e)
resp = None
print(resp)
Копипаста рабочего кода от поставщика API:
<?php
include('config.php');
$key = $_POST['api'];
$server = $_POST['server'];
$date_start = $_POST['date_start'];
$date_stop = $_POST['date_stop'];
function getDates($startTime, $endTime)
{
$day = 86400;
$format = 'Y-m-d';
$startTime = strtotime($startTime);
$endTime = strtotime($endTime);
# $numDays = round(($endTime - $startTime) / $day); // без +1
$numDays = round(($endTime - $startTime) / $day) + 1;
$days = array();
for ($i = '0'; $i < $numDays; $i++) {
$days[] = date($format, ($startTime + ($i * $day)));
}
return $days;
}
# Берем все даты на загрузку (в днях)
$days = getDates($date_start, $date_stop);
$url_car_transaction = "https://".$server.".taxicrm.ru/api/public/v1/car/transaction/list";
# Перебор массива всех дней
foreach ($days AS $day)
{
$method = "POST";
$post_data = [
"timestamp" => time(),
"filters" => [
"date_start" => $day,
"time_start" => "00:00:00",
"date_end" => $day,
"time_end" => "23:59:59",
]
];
$data_json = json_encode($post_data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Authorization: '. sha1($data_json . $key),
'Content-Type:application/json'
));
curl_setopt($curl, CURLOPT_URL, $url_car_transaction);
$html = html_entity_decode(curl_exec($curl), ENT_HTML401, 'UTF-8');
$array = json_decode($html);
curl_close($curl);
foreach ($array->{"transactions_list"} as $line)
{
// добавляем транзакции в базу
$sql = "INSERT INTO `***`
(`***`, `***`, `***`, ... `***`) VALUES
('".$line->{"transaction_id"}."', ... '".$line->{"car_id"}."')";
mysqli_query($conn, $sql);
}
}
?>