Árvore de páginas

Produto:

TOTVS Automação Fiscal

Versões:

12.1.27+

Este documento tem o objetivo de fornecer informações para utilização do Web Service REST, para SETUP automático do TOTVS Automação Fiscal.

Para mais detalhes sobre o conceito de um serviços REST clique aqui.

Para mais detalhes sobre serviços REST na arquitetura Protheus clique aqui.


Definição do Serviço

Nome: WSTSSAUTH

Objetivo: Obter o Token de Autenticação JWT do serviço TSS através das chaves Client Id e Client Secret.

Métodos: POST

Configurações do Serviço

A  Configuração do serviço REST está documentada  no link Configuração REST SERVER - Protheus.

Estas parametrizações estão localizadas fisicamente no arquivo appserver.ini da pasta de instalação "[...]\BIN\APP"

Importante

Na seção HTTPURI, a chave PrepareIn deve ser comentada.

Segue exemplo de configuração do WS REST para utilização no modulo TAF:


appserver.ini
[HTTPV11]
SOCKETS=HTTPREST
ENABLE=1

[HTTPREST]
Port=8080
URIs=HTTPURI
Security=1

[HTTPURI]
URL=/rest
;PrepareIn=
Instances=1,2
CORSEnable=1
AllowOrigin=*

[HTTPJOB]
MAIN=HTTP_START
ENVIRONMENT=P12

[TAF_CFGJOB]
Main=TAF_CFGJOB
Instances=1,2,1,1
PrepareIn=T1 
RefreshRate=50
ENVIRONMENT=P12

[OnStart]
JOBS=HTTPJOB,TAF_CFGJOB
RefreshRate=120

Instances

A chave Instances na seção TAF_CFGJOB é opcional, se a mesma não existir o sistema ira considerar a quantidade de threads declarada na chave instances da seção HTTPURI.

PrepareIn

A chave PrepareIn deve conter o código do Grupo de Empresas(sigamat.emp/syscompany) utilizado no modulo TAF, abaixo exemplos configurações possíveis para as mesmas:

  • Utilizando o código do grupo; Ex: PrepareIn=01
  • Utilizando diversos códigos de grupos; Ex: PrepareIn=01,02,99 .
  • Utilizando a palavra ALL, neste caso o server vai considerar todos os grupos contidos no arquivo de empresas do Protheus/TAF; Ex PrepareIn=ALL

Consumo de Memória e CPU

O servidor cria Threads especificas para cada grupo de empresas de acordo com a configuração da chave Instances, por isso essa configuração deve ser realizada considerando a capacidade computacional do servidor.


Fonte: REST com ERP Microsiga Protheus


Definição dos métodos

POST

Descrição do Método: O método POST segue o conceito do próprio método em qualquer outro tipo de serviço REST, devendo seu conteúdo ser enviado no corpo da mensagem (body) no formato json.

O objetivo deste método no serviço WSTSSToken é obter um token JWT do serviço TSS utilizando as credenciais de autenticação previamente cadastradas conforme documento: https://tdn.totvs.com/x/1RhcIw

Estrutura da mensagem enviada no POST (Request):

Atributo

Pai

Nivel

Ocorrência

Formato

urlTSS

-

1

1

STRING

grantType

-

1

1

NUMERICO

clientId

-

1

0-1

STRING

clientSecret-10-1STRING
refreshToken-10-1STRING


  • urlTSS – URL do Serviço TSS
  • grantType - Tipo da Requisição.

Valores: 1 para geração do token (CLIENT_CREDENTIALS) e 2 para a atualização do token (REFRESH_TOKEN).

  • clientId -  Id da credencial gerada pelo TSS
  • clientSecret - Senha da credencial gerada pelo TSS
  • refreshToken - Token para atualização do tempo de expiração, o mesmo pode ser utilizado para substituir o clientId e clientSecret após a primeira requisição.


Geração das Credenciais

Mais informações sobre a geração das credenciais no TSS estão contidas neste documento: https://tdn.totvs.com/x/1RhcIw

Atenção!

Os atributos não obrigatórios têm que fazer parte da estrutura, somente o seu preenchimento é opcional.

Estrutura da mensagem de retorno do POST (Response):

Atributo

Pai

Nivel

Ocorrência

Formato

accesstoken

-

1

1

STRING

expiresIn

-

1

1

NUMERICO

refreshToken

-

1

1

STRING

tokenType-11STRING
  • accesstoken – Token de autenticação
  • expiresIn - Tempo de expiração do token (em segundos), esse parâmetro é retornado de acordo com a configuração da chave TSSTOKEN_TIMEEXP  no arquivo de de configuração do TSS (appserver.ini) 
  • refreshToken -  Token para atualização do tempo de expiração
  • tokenType - Neste parâmetro sempre será retornado "Bearer" que é o padrão de autenticação que está sendo utilizado para geração do token.
Exemplo do Request para o método POST:
Geração do Token 
{
    "urlTSS": "10.171.67.235:8092",
    "grantyType": 1,
    "clientId": "bd1e28d4dfbb0d66b640ea94298b2e77c443334c",
    "clientSecret": "19521598819c1fd3bd2b465b4230o1e1f41c64e1f4a09130afacc1f572df1d23"
}
Response:
{
    "accesstoken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY0LCJleHAiOjE2MzE3OTQzNjV9.YjVkNjRmMmNkODQ5MjhmZjUzYzljMmJkMDU1MWQ4ZjNlNzgzNWQ5OWUwMTAyNTFiNWUwNDNlYTIzMDU0NGYxOGFkYzVhMzQ3YWZmZWQwNmRiNDA3OWMzNjYxNDkxNGU4OGYwNmJkZTFhMzEyYjc1ZDdjNTljMjMwNTU0Yjg5YWM",
    "expiresIn": 1800,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY1LCJleHAiOjE2MzE4Nzg5NjV9.ODRlZmM5NTViZDZkNjJiOTAyZmU3OWE3ZmI4NDNkOGZlZWU4ZTE1NWIwMzI4YzEyZWU3NTMzNGE2OWMzYWE2MDVhMDlkOTE0ZjFmZTU3ZDFhYTRkZDY2ZWRhNmFjZTEzYjYxZDIyZWJiMzhjMWJmMzFhNmY4NTMwMjdkOTI2NzY",
    "tokenType": "Bearer"
}


Atualização do Token 
{
    "urlTSS": "10.171.67.235:8092",
    "grantType": 2,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY1LCJleHAiOjE2MzE4Nzg5NjV9.ODRlZmM5NTViZDZkNjJiOTAyZmU3OWE3ZmI4NDNkOGZlZWU4ZTE1NWIwMzI4YzEyZWU3NTMzNGE2OWMzYWE2MDVhMDlkOTE0ZjFmZTU3ZDFhYTRkZDY2ZWRhNmFjZTEzYjYxZDIyZWJiMzhjMWJmMzFhNmY4NTMwMjdkOTI2NzY",
}
Response:
{
    "accesstoken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkzOTI4LCJleHAiOjE2MzE3OTU3Mjl9.NzM5OTkxZjVhNzViYjA1OTVkMzlmYWU2YmFiMTFkNjlmYWY5NDMyODRkZmNlZDQwMWIyZTE3N2U1ODIzMDMxMThiZTZmNjZhMTUyMTYyODQ0ODMzOGE3M2FlZGMxZDNjYjM1ZmQ0MGFmOTBhYjU3MDZmNjczZWU4MWFjMzI4OGE",
    "expiresIn": 1800,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkzOTI4LCJleHAiOjE2MzE4ODAzMjh9.NjE0OTNmOWEzODEwNmQ4NDhmNGY5MWM4YjE3NDFjYTllZDI3MTczOWY2MmNlNGQzOTc1ZDVlZDk0YjNkNGUyZGI5ZDJlYWQ2NGVlMzFjZTQ2Y2VjZWU3N2JlODQ4ZTY3NGVlZjg5YjE2NmVkYjFiN2FhNzRmMDZhMWIwNTc1ZjI",
    "tokenType": "Bearer"
}

Atualização do Token

O refreshToken não é fixo, a cada atualização será gerado um hash novo que deverá ser utilizado na próxima atualização de token.

  • Sem rótulos