Bearer Token
Принцип передачи
Для авторизации с помощью Bearer токена необходимо передавать в запросе два HTTP заголовка:
Пример Header'ов
В заголовке Authorization передается Bearer токен, полученный в личном кабинете. В заголовке Sign передается хеш, сформированный определенным образом из параметров запроса. Правила формирования заголовка Sign меняется в зависимости от вызываемого метода API.
Для примера разберем вызов метода CreateInvoice. Правила формирования заголовка Sign для него выглядит так:
Правила формирования заголовка Sign метода CreateInvoice
Вместо названий параметров, перечисленных в правиле, нужно подставить значения, передаваемые в метод. Если какой-то из параметров не был передан, то на его место подставляется пустая строка. Вместо signSecretKey подставляется секретный ключ, полученный вместе с токеном в личном кабинете.
При вызове метода CreateInvoice с параметрами
Пример параметров, передаваемых в CreateInvoice
строка с подставленными значениями будет выглядеть так:
Строка для заголовка Sign
Эту строку нужно закодировать в UTF–8 и посчитать от нее SHA256 хеш. Для строки выше получается такой хеш:
Этот хеш передается в заголовке Sign.
Пример вызова API с использованием токена
Далее дан пример кода на C#, позволяющий вызвать функцию CreateInvoice. Чтобы им воспользоваться, нужно заменить данные в некоторых строках на свои.
public static void CreateInvoice() {
// для работы примера выставьте Secret Key из настроек магазина -> прием платежей.
string eshopSecretKey = "1234abcd";
// параметры запроса
var param = new Dictionary<string, string>
{
["eshopId"] = "499999", // для работы примера выставьте номер своего магазина
["orderId"] = "мой заказ",
["recipientAmount"] = "10.00",
["recipientCurrency"] = "TST", // пример предполагает, что в магазине выставлена тестовая валюта.
["email"] = "youremail@gmail.com", // для работы примера выставьте email на который зарегистрирован аккаунт организации на сайте intellectmoney.
};
// Этот параметр не связан с заголовком Sign и с авторизацией по bearer токену. Это другой хеш, использующийся для валидации параметров при вызове метода CreateInvoice.
param["hash"] = GetCreateInvoiceHash(param, eshopSecretKey);
// токен и секретный ключ из личного кабинета
string bearerToken = "808e1cc4630440858f5109e4c0a3e707";
string signSecretKey = "670bcc16e5c9483fa85096c16ce8c413";
// генерируем хеш для заголовка Sign
string signHashString = $"{param["eshopId"]}::{param["orderId"]}::::{param["recipientAmount"]}::{param["recipientCurrency"]}::::{param["email"]}::::::::::::::::{signSecretKey}";
string signHash = GetHashSHA256(signHashString);
// отправляем запрос
HttpClientHandler clientHandler = new HttpClientHandler();
using (var content = new FormUrlEncodedContent(param))
{
using (HttpClient client = new HttpClient(clientHandler))
{
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {bearerToken}");
client.DefaultRequestHeaders.Add("Sign", signHash);
using (HttpResponseMessage response = client.PostAsync($"https://api.intellectmoney.ru/merchant/createInvoice", content).Result)
{
string responseText = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(responseText);
Console.ReadKey();
}
}
}
}
private static string GetCreateInvoiceHash(Dictionary<string, string> param, string eshopSecretKey)
{
return GetHashMD5($"{param["eshopId"]}::{param["orderId"]}::::{param["recipientAmount"]}::{param["recipientCurrency"]}::::{param["email"]}::::::::::::::::{eshopSecretKey}");
}
private static string GetHashMD5(string source)
{
byte[] data = Encoding.UTF8.GetBytes(source);
using (MD5 md5 = new MD5CryptoServiceProvider())
{
data = md5.ComputeHash(data);
}
return BitConverter.ToString(data).Replace("-", "").ToLower();
}
private static string GetHashSHA256(string source)
{
byte[] data = Encoding.UTF8.GetBytes(source);
using (var sha256 = new SHA256CryptoServiceProvider())
{
data = sha256.ComputeHash(data);
}
return BitConverter.ToString(data).Replace("-", "").ToLower();
}