Skip to content
Last updated
logo (3).svg

 

Поддержка: support@haskaplan.ru

Стать клиентом: clients@haskaplan.ru

Пользовательское соглашение




 

Хаскаплан помогает бизнесу автоматизировать массовые выплаты и документооборот с физлицами и самозанятыми, например, с клиентами или исполнителями.
 

Авторизация

Для авторизации необходимо передать три заголовка в каждом запросе:

  • client-id - Идентификатор клиента
  • client-secret - Секретный ключ клиента
  • request-signature - Цифровая подпись запроса для верификации целостности данных
Получение ключей доступа

Для получения client-id и client-secret обратитесь к нам на почту clients@haskaplan.ru

Генерация ключей для подписи

Клиент должен сгенерировать пару RSA ключей и передать нам публичный ключ:

# 1. Генерируем приватный ключ (PKCS#8)
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out private.pem

# 2. Извлекаем публичный ключ (в формате PKIX)
openssl rsa -pubout -in private.pem -out public.pem

Отправьте содержимое файла public.pem нам на почту clients@haskaplan.ru

Формирование подписи запроса

Подпись запроса формируется путем подписания тела запроса приватным ключом с использованием алгоритма SHA-256:

Bash/OpenSSL:

echo -n "<request-body>" | openssl dgst -sha256 -sign private.pem | base64 -w 0

Пример на Go:

package main

import (
    "crypto"
    "crypto/rand"
    "crypto/rsa"
    "crypto/sha256"
    "crypto/x509"
    "encoding/base64"
    "encoding/pem"
    "fmt"
    "os"
)

func signRequest(privateKeyPath string, requestBody []byte) (string, error) {
    // Читаем приватный ключ
    keyData, err := os.ReadFile(privateKeyPath)
    if err != nil {
        return "", err
    }

    // Декодируем PEM
    block, _ := pem.Decode(keyData)
    if block == nil {
        return "", fmt.Errorf("failed to parse PEM block")
    }

    // Парсим приватный ключ
    privateKey, err := x509.ParsePKCS8PrivateKey(block.Bytes)
    if err != nil {
        return "", err
    }

    rsaPrivateKey, ok := privateKey.(*rsa.PrivateKey)
    if !ok {
        return "", fmt.Errorf("not an RSA private key")
    }

    // Хэшируем тело запроса
    hashed := sha256.Sum256(requestBody)

    // Подписываем
    signature, err := rsa.SignPKCS1v15(rand.Reader, rsaPrivateKey, crypto.SHA256, hashed[:])
    if err != nil {
        return "", err
    }

    // Кодируем в base64
    return base64.StdEncoding.EncodeToString(signature), nil
}

func main() {
    requestBody := []byte(`{"field": "value"}`)
    signature, err := signRequest("private.pem", requestBody)
    if err != nil {
        panic(err)
    }
    fmt.Println("request-signature:", signature)
}

Пример HTTP запроса:

POST /v1/registries HTTP/1.1
Host: client-api.dev.haskaplan.net
Content-Type: multipart/form-data
client-id: your-client-id
client-secret: your-client-secret
request-signature: <base64-encoded-signature>

[request body]



 

Справочники

Типы договоров исполнителей agreement_type

  • ФЛ - Физлицо;
  • СЗ - Самозанятый;
  • ИП - Индивидуальный предприниматель.
     

Статус реестра

  • created - В очереди на обработку;
  • processing - В обработке;
  • completed - Реестр успешно начислен;
  • partially_completed - Реестр начислен, часть платежей завершились с ошибкой;
  • failed - Все платежи в реестре завершились с ошибкой.
     

Статус платежа

  • pending - Платеж в процессе обработки;
  • processed - Платеж успешно проведен;
  • failed - Ошибка проведения платежа;
  • refunded - Ошибка проведения платежа после отправки в банк.
     

Основные коды ошибок

КодНазвание ошибкиОписание
10001InvalidQueryParametersErrorCodeНеверные параметры запроса
10004NotFoundErrorCodeРесурс не найден
10005EmptyRequestErrorCodeПустой запрос
10006FailedToCreatePaymentsErrorCodeНе удалось создать платежи
10007FailedToParseRequestBodyErrorCodeОшибка при разборе тела запроса
10008UnexpectedErrorCodeНеожиданная ошибка
10009UnauthorizedErrorCodeДоступ запрещён (неавторизован)
10010NothingToUpdateErrorCodeНет данных для обновления
10011InvalidCardNumberErrorCodeНеверный номер карты
10012NotImplementedErrorCodeФункция не реализована
10013InvalidIdНеверный идентификатор
10015InvalidParamsНеверные параметры
10017InvalidFileНеверный файл
10018ValidationErrorОшибка валидации



 

Поддержка и обратная связь

Если у вас возникнут вопросы или потребуется помощь, пожалуйста, свяжитесь с нашей службой поддержки через support@haskaplan.ru.