3.2.2.1. Метод CertificateLogin
|
|
Метод CertificateLogin получает сертификат ключа ЭП (DER) x.509 (http://tools.ietf.org/html/rfc5280) и возвращает маркер временного доступ в виде строки (256 байт). Этот маркер зашифрован, его следует расшифровать с помощью личного ключа ЭП, сертификат которого был использован при вызове метода.
Этот маркер следует записывать в обязательное поле Assistant-Key заголовка HTTP-запроса при вызове других методов Такском-Доклайнз Web API.
Время действия маркера составляет 5 минут, считая от момента его получения или последнего использования в запросе. При использовании в запросе просроченного маркера доступа будет получен код HTTP ошибки 401.
При вызове метода CertificateLogin новый маркер доступа не создаётся, если не закончился срок действия предыдущего маркера.
HTTP-запрос
HTTP-Method: POST
Адрес запроса (URI)
| |
https://<server>.taxcom.ru/v<version>/API/CertificateLogin
| |
Заголовок запроса
| |
Integrator-Id
|
Идентификатор интеграционного решения. Формат этого идентификатора:
COMPANY_AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA
|
Тело запроса
| |
Успешный HTTP-ответ сервера:
HTTP/1.1 200 OK
Content-Length: 824
<Бинарное представление зашифрованного маркера временного доступа (session token)>.
Пример кода C# :
// Get the certificate from the *.CER (DER)
var certificateData = certificate GetCertificate ("1.cer");
// Create POST-request to CertificateLogin method
// Software application ID
var request = CreatePostRequest("https://api-invoice.taxcom.ru/v1.3/API/CertificateLogin", null, "vendorId");
request.ContentType = "application/pkcs7-mime";
request.ContentLength = certificateData.Length;
try
{
// Write certificate attributes into POST-request
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(certificateData, 0, certificateData.Length);
}
// Request is sent
var response = request.GetResponse();
using (var responseStream = response.GetResponseStream())
using (var ms = new MemoryStream())
{
responseStream.CopyTo(ms);
ms.Position = 0;
// Read encrypted token from the HTTP-response
var encryptedToken = ms.ToArray();
// Encrypt the token with the private key
var tokenData = DecryptMessage(encryptedToken);
// Save the token for further use to call other Web API methods
var tokenText = Encoding.ASCII.GetString(tokenData);
}
}
catch (Exception exception)
{
WriteMessageToOutput(exception);
}
}
private static X509Certificate2 GetCertificate(string fileName)
{
return new X509Certificate2(GetCertificateBody(fileName));
}
public byte[] DecryptMessage(byte[] message)
{
try
{
var encryption = new Encryption();
return encryption.DecryptDocument(message);
}
catch (Exception ex)
{
throw new Exception(string.Format("There is an error while decrypting of the message: {0}", ex.Message));
}
}
Если один и тот же сертификат абонента привязан к нескольким кабинетам абонента, то идентификатор участника ЭДО (в данном случае можно считать его идентификатором кабинета абонента) передается в параметре edxClientId.
Пример:
https://<server>.taxcom.ru/v<version>/API/CertificateLogin?edxClientId=2AL-93D14F72-E2A4-4DE6-8859-03B70C547106-00000