NAV Navbar

Exchanger.Money API

shell C# ruby

Authentication

Образец кода:

require 'api-auth'
require 'rest-client'

headers = { 
  'Content-MD5' => "e59ff97941044f85df5297e1c302d260",
  'Content-Type' => "application/json",
  'Date' => "Mon, 23 Jan 1984 03:29:56 GMT" 
}
@request = RestClient::Request.new(url: "https://api.exchanger.money/v1/crypto/offers",
        :headers => headers,
        :method => :post)
@signed_request = ApiAuth.sign!(@request, @access_id, @secret_key, digest: 'sha256')
@headers = { 
             'Content-MD5' => "e59ff97941044f85df5297e1c302d260",
             'Content-Type' => "application/json",
             'Date' => "Mon, 23 Jan 1984 03:29:56 GMT",
             'Authorization' => @signed_request
           }

public class HmacClientHandler : DelegatingHandler
{
    private readonly string _applicationId;
    private readonly string _secretKey;

    public HmacClientHandler(string appId, string secretKey)
    {
        _applicationId = appId;
        _secretKey = secretKey;
    }

    protected async override Task<HttpResponseMessage>
       SendAsync(HttpRequestMessage request,
       CancellationToken cancellationToken)
    {
        HttpResponseMessage response = null;

        string url = Uri.EscapeUriString(request.RequestUri.AbsolutePath.ToLowerInvariant());
        string methodName = request.Method.Method;
        DateTime timestamp = DateTime.UtcNow;
        string contentType = methodName.Equals("GET") ? string.Empty : "application/json; charset=utf-8";

        string contentMd5 = string.Empty;
        if (request.Content != null)
        {
            byte[] content = await request.Content.ReadAsByteArrayAsync();
            MD5 md5 = MD5.Create();
            byte[] contentMd5Hash = md5.ComputeHash(content);
            contentMd5 = Convert.ToBase64String(contentMd5Hash);
            request.Content.Headers.ContentMD5 = contentMd5Hash;
        }

        //plain string = 'http method,content-type,content-MD5,request URI,timestamp'

        string authenticationKeyString = string.Format("{0},{1},{2},{3},{4}", methodName, contentType, contentMd5, url, timestamp.ToString("R"));

        byte[] secretKeByteArray = Encoding.UTF8.GetBytes(_secretKey);

        using (HMACSHA256 hmac = new HMACSHA256(secretKeByteArray))
        {
            byte[] authenticationKeyBytes = Encoding.UTF8.GetBytes(authenticationKeyString);
            byte[] authenticationHash = hmac.ComputeHash(authenticationKeyBytes);
            string hashedBase64String = Convert.ToBase64String(authenticationHash);
            request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("APIAuth-HMAC-SHA256", string.Format("{0}:{1}", _applicationId, hashedBase64String));

            request.Headers.Date = timestamp;
        }

        response = await base.SendAsync(request, cancellationToken);

        return response;
    }
}
HOST=https://api.exchanger.money
URI=/v1/crypto/offers
UUID=SOME_ACCESS_ID
SECRET_KEY=SOMEKEY
CONTENT_TYPE=application/json
DATE=$(TZ=GMT date "+%a, %d %b %Y %T %Z")
curl -H "Content-Type: $CONTENT_TYPE" -H "Authorization: APIAuth-HMAC-SHA256 $UUID:$(echo -n "GET,$CONTENT_TYPE,,$URI,$DATE" | openssl dgst -sha256 -binary -hmac $SECRET_KEY "$@" | base64)" -H "Date: $DATE" "$HOST$URI"

Для работы с сервисом необходимо иметь пару ключей: access_id и private_key. access_id - используюется для идентификации пользователя, а private_key для подписывания запроса.

Content-MD5 = "md5 хэш тела содержимого запроса"

Date = дата и время запроса в формате Mon, 23 Jan 1984 03:29:56 GMT

Authorization = APIAuth-HMAC-SHA256 'access_id':'signature'

где signature - Base64( HMAC-SHA256( private_key, UTF-8-Encoding-Of( StringToSign ) ) )

StringToSign - http method,content-type,content-MD5,request URI,timestamp

Crypto

Create Purse

Ответ сервиса

{
   "purse": "созданный адрес"
}

Образец кода:




Создает новый кошелек (криптографический адрес) для аккаунта пользователя в заданной валюте.

HTTP Request

POST https://api.exchanger.money/v1/purses/<currency>/

Query Parameters

Параметр Описание
currency Криптовалюта. Доступные значения: eth, btc, bch, btg, ltc, xmr, xrp, dash, iota

Possible Errors

Код ошибки Описание
404 Not found -- Если передана неверная криптовалюта.

Balance

Ответ сервиса

{
   "balance": "баланс на кошельке"
}

Образец кода:




Метод возвращает баланс на кошельке в заданной валюте

HTTP Request

GET https://api.exchanger.money/v1/crypto/purses/<currency>/balance/

Query Parameters

Параметр Описание
currency Криптовалюта. Доступные значения: eth, btc, bch, btg, ltc, xmr, xrp, dash, iota

Possible Errors

Код ошибки Описание
404 Not Found -- Если передана неизвестная валюта.

Offers List

Ответ сервиса

[
    {
      "id": "идентификатор предложения",
      "direction": "направление обмена",
      "provider": "Система денежных переводов",
      "details": {
        "bank_name": "Название банка, если provider - cards или wire"
      },
      "state": "статус предложения",
      "min_amount": "минимальная сумма сделки",
      "max_amount": "максимальная сумма сделки",
      "rate": "курс",
      "description": "дополнительные условия",
      "user": {
        "rating": "рейтинг пользователя"
      },
      "is_owner": "флаг, показывающий является ли пользователь создателем этого предложения"
    }
]

Образец кода:




Метод возвращает список предложений по заданному направлению обмена и системе денежных переводов

HTTP Request

GET https://api.exchanger.money/v1/crypto/offers/<direction>/<provider>

Query Parameters

Параметр Описание
direction Направление обмена
provider Система денежных переводов
page Номер страницы для пагинации

Possible Errors

Код ошибки Описание
404 Not Found -- Если передано неизвестное направление обмена или система денежных переводов.

Offers Info

Ответ сервиса

{
  "id": "идентификатор предложения",
  "direction": "направление обмена",
  "provider": "Система денежных переводов",
  "details": {
    "bank_name": "Название банка, если provider - cards или wire"
  },
  "state": "статус предложения",
  "min_amount": "минимальная сумма сделки",
  "max_amount": "максимальная сумма сделки",
  "rate": "курс",
  "description": "дополнительные условия",
  "user": {
    "rating": "рейтинг пользователя"
  },
  "is_owner": "флаг, показывающий является ли пользователь создателем этого предложения"
}

Образец кода:




Метод возвращает информацию по предложению

HTTP Request

GET https://api.exchanger.money/v1/crypto/offers/<id>/

Query Parameters

Параметр Описание
id Идентификатор предложения

Possible Errors

Код ошибки Описание
404 Not Found -- Если предложение не найдено.

Offers Create

Ответ сервиса

{
  "id": "идентификатор предложения",
  "direction": "направление обмена",
  "provider": "Система денежных переводов",
  "details": {
    "bank_name": "Название банка, если provider - cards или wire"
  },
  "state": "статус предложения",
  "min_amount": "минимальная сумма сделки",
  "max_amount": "максимальная сумма сделки",
  "rate": "курс",
  "description": "дополнительные условия",
  "user": {
    "rating": "рейтинг пользователя"
  },
  "is_owner": "флаг, показывающий является ли пользователь создателем этого предложения"
}

Образец кода:




Метод создает новое предложение

HTTP Request

POST https://api.exchanger.money/v1/crypto/offers/

Query Parameters

Параметр Описание
direction направление обмена
provider система денежных переводов
rate_type тип курса (фиксированный, плавающий)
rate курс
min_amount минимальная сумма
max_amount максимальная сумма
money_purse куда переводить фиат (только для yandex, qiwi, skrill, paypal, alipay, wechat)
card_number номер банковской карты (только для cards)
bank_name банк (только для cards, wire)
bank_details информация о счете (только для wire)
description дополнительные условия сделки
email адрес электронной почты для связи
working_hours рабочие часы (в остальное время предложение не будет видно)

Possible Errors

Код ошибки Описание
400 Bad Request -- Ошибка валидации.

Offers Update

Ответ сервиса

{
  "id": "идентификатор предложения",
  "direction": "направление обмена",
  "provider": "Система денежных переводов",
  "details": {
    "bank_name": "Название банка, если provider - cards или wire"
  },
  "state": "статус предложения",
  "min_amount": "минимальная сумма сделки",
  "max_amount": "максимальная сумма сделки",
  "rate": "курс",
  "description": "дополнительные условия",
  "user": {
    "rating": "рейтинг пользователя"
  },
  "is_owner": "флаг, показывающий является ли пользователь создателем этого предложения"
}

Образец кода:




Метод обновляет данные предложения

HTTP Request

PATCH https://api.exchanger.money/v1/crypto/offers/

Query Parameters

Параметр Описание
rate_type тип курса (фиксированный, плавающий)
rate курс
min_amount минимальная сумма
max_amount максимальная сумма
money_purse куда переводить фиат (только для yandex, qiwi, skrill, paypal, alipay, wechat)
card_number номер банковской карты (только для cards)
bank_name банк (только для cards, wire)
bank_details информация о счете (только для wire)
description дополнительные условия сделки
email адрес электронной почты для связи
working_hours рабочие часы (в остальное время предложение не будет видно)

Possible Errors

Код ошибки Описание
400 Bad Request -- Ошибка валидации.

Offers Delete

Ответ сервиса

Образец кода:




Метод удаляет предложение

HTTP Request

DELETE https://api.exchanger.money/v1/crypto/offers/<id>/

Query Parameters

Параметр Описание
id Идентификатор предложения

Possible Errors

Код ошибки Описание
404 Not Found -- Если предложение не найдено.

Errors

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API key is wrong.
403 Forbidden -- The requested info is hidden for administrators only.
404 Not Found -- The specified info could not be found.
405 Method Not Allowed -- You tried to access API with an invalid method.
406 Not Acceptable -- You requested a format that isn't json.
410 Gone -- The requested info has been removed from our servers.
418 I'm a teapot.
429 Too Many Requests -- There are too many requests! Slow down!
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.