Идемпотентность запросов
Для некоторых интеграций требуется надежная защита от дублирования запросов, во избежание лишних отправок.

Мы предоставляет такую защиту через механизм идемпотентных запросов.

Для реализации механизма в доступных методах API, используется IDEMPOTENCY KEY, который можно получить в личном кабинете или в параметрах ответа при создании инстанса по API.

Во всех соответствующих запросах в headers должно содержаться следующее:
Генерация checksum_value:


Формирование checksum_value проводится путем преобразования параметров с помощью HMAC SHA-256. Параметры должны быть представлены в виде строки, которая состоит из значений параметров, предварительно отсортированных в алфавитном порядке по ключу. В качестве секретного ключа при применении HMAC SHA-256 преобразования, служит IDEMPOTENCY KEY.


Примеры:
cURL

curl --location --request POST 'https://api.pushsms.ru/api/v1/delivery?text=textsms&phone=71233456789&external_id=100' \
--header 'Authorization: Bearer {your token}'
--header 'checksum: {checksum_value}'
Ruby

params = {
   text: "text",
   phone: "71233456789",
   external_id: "100"
}
idempotency_key = "Z5F2idBj"
params_string = params.keys.sort.map{|e| params[e]}.join
"10071233456789text"

digest = OpenSSL::Digest.new('sha256')
checksum_value = OpenSSL::HMAC.hexdigest(digest, idempotency_key, params_string)
"ebb290126ea4302ebca339f5efe419b4a67edfe57e1ea844e7cec85ccef53f23"
При неверно сгенерированном значении checksum, ответ будет иметь: HTTP-код 400 (Bad Request) и будет содержать JSON:

{
   "meta": {
    "status": "fail",
    "message": "Invalid checksum",
    "code": 400
  }
}
При несовпадении ключа, ответ будет иметь: HTTP-код 409 (Conflict) и будет содержать JSON:

{
   "meta": {
    "status": "fail",
    "message": "Request with current params has already been received",
    "code": 409
  }
}