ИС "Такском-Доклайнз"                  ИНФОРМАЦИЯ ДЛЯ РАЗРАБОТЧИКОВ
×
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
Тело запроса
Cертификат ключа ЭП (DER) X.509
 
Успешный 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