Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

Produto:

TOTVS Automação Fiscal

Versões:

12.1.1727+

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 serviços REST na arquitetura Protheus clique aqui.


Definição do Serviço

Nome: WSTSSTOKENWSTSSAUTH

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.

...

Nota
titleImportante

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

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


Bloco de código
languageactionscript3
themeEclipse
titleappserver.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
Informações
titleInstances

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.

Informações
titlePrepareIn

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
Aviso
titleConsumo 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):
Bloco de código
languagejs
themeEclipse
titleExemplo POST:
{"empresas": [
		{
			"CODEMPRESA": "",- Código único da empresa, character(4) - Obrigatório
			"CODFILIAL": "",	- Código único da filial, Character(6) - Obrigatório
			"M0_FILIAL": "",	- Descrição da Filial, Character(40) - Obrigatório
			"M0_NOME": "",		- Nome da Empresa, Character(40) - Obrigatório
			"M0_NOMECOM": "",	- Razao Social Empresa, Character(60) - Opcional - Se não enviado, considera o mesmo conteúdo do atributo M0_NOME
			"M0_ENDCOB": "",	- Endereço Cobrança, Character(60) - Opcional
			"M0_CIDCOB": "",	- Cidade Cobrança, Character(60) - Opcional
			"M0_ESTCOB": "",	- Estado Cobrança, Character(2) - Opcional
			"M0_CEPCOB": "",	- CEP Cobrança, Character(8) - Opcional
			"M0_BAIRCOB": "",	- Bairro Cobrança, Character(35) - Opcional
			"M0_COMPCOB": "",	- Complemento Cobrança, Character(25) - Opcional
			"M0_CODMUN": "",	- Codigo Municipio, Character(7) - Obrigatório 
			"M0_ENDENT": "",	- Endereço Entrega, Character(60) - Opcional
			"M0_CIDENT": "",	- Cidade Entrega, Character(60) - Opcional
			"M0_ESTENT": "",	- Estado Entrega, Character(2) 
			"M0_CEPENT": "",	- CEP Entrega, Character(8) - Opcional
			"M0_BAIRENT": "",	- Bairro Entrega, Character(35) - Opcional
			"M0_COMPENT": "",	- Complemento Entrega, Character(25) - Opcional
			"M0_TPINSC": "",	- Tipo de Inscrição, Integer(1), 1-CEI, 2-CNPJ, 3-CPF, 4-INCRA - Obrigatório
			"M0_CGC": "",		- Numero da  Inscrição acima, Character(14) - Condicional ao atributo M0_TPINSC, - Obrigatório (este deve estar preenchido quando for 2, 3 ou 4)
			"M0_CEI": "",		- Numer CEI, Character(12) - Condicional ao atributo M0_TPINSC, este deve estar preenchido quando for 1
			"M0_INSC": "",		- Numero Inscrição Estadual, Character(14) - Opcional	- Caso não seja enviado, será informado "ISENTO" como default
			"M0_INSCM": "",		- Inscrição municipal do estabelecimento, Character(25) - Opcional
			"M0_TEL": "",		- Telefone, Character(14)
			"M0_FAX": "",		- FAX, Character(14) - Opcional
			"M0_PRODRUR": "",	- Produtor Rural, Character(1), 1-Fisica, 2-Juridica, 3-Segurado Especial - Opcional
			"M0_CNAE": "",		- Codigo de atividade, Character(7) - Opcional
			"M0_FPAS": "",		- Código FPAS, Character(4) - Opcional
			"M0_NATJUR": "",	- Natureza Juridica, Character(4) - Opcional
			"M0_NIRE": "",		- Numero NIRE(Nr. Identificacao do Registro da Empresa), Character(25) - Opcional
			"M0_DTRE": "",		- Data NIRE(Inscricao na Junta Comercial), Character(8), AAAAMMDD - Opcional
			"M0_INS_SUF": "", 	- Numero Inscrição SUFRAMA, Character(12) - Opcional
			
			"C1E_CODFIL": "", -  Filial Referencia com ERP - Character(40) - Obrigatório
			"C1E_MATRIZ": true/false, - Obrigatório
			"C1E_DTINI": "",	- PerÝodo Inicial Validade, Character(6), MMAAAA - Opcional
			"C1E_DESFOL": "",	- Indic. DesoneraþÒo Folha, Character(1), 0=Nao Aplicavel;1=Empresa enquadrada nos art. 7. a 9. da Lei 12.546/2011 - Opcional - Opcional
			"C1E_REGELT": "",	- Registro Eletronico, Character(1), 0=Nao optou pelo registro eletronico de empregados;1=Optou pelo registro eletronico de empregados - Opcional
			"C1E_SEGMEN": "",	- Segmento de Atividade, Character(1), 1=Instituiþ§es Financeiras - Bancos;2=ËrgÒos P·blicos;3=Portos - CODESP;4=ConstruþÒo Civil - Empreiteiras - Opcional
			"C1E_ENTEDU": "",	- Ind. Entidade Educativa, Character(1), 0=NÒo Ú entidade educativa sem fins lucrativos;1=╔ entidade educativa sem fins lucrativos - Opcional
			"C1E_INDETT": "",	- Indic Empresa Trab. Temp., Character(1), 1=Sim;2=Não - Opcional - Default '2'
			"C1E_NRETT": "",	- N·m Reg. Emp. Trab. Tempo, Character(30) - Opcional
			"C1E_SIGMIN": "",	- Ident Min/Lei Conc Certif, Character(70) - Opcional
			"C1E_NRCERT": "",	- N·mero do Certificado, Character(40) - Opcional
			"C1E_DTEMCE": "",	- Data emissÒo certificado, Character(8), AAAAMMDD - Opcional
			"C1E_DTVCCE": "",	- Data Vencimento Certif., Character(8), AAAAMMDD - Opcional
			"C1E_NRPRRE": "",	- N·mero Protoc. RenovaþÒo, Character(40) - Opcional
			"C1E_DTPRRE": "",	- Data Protocolo RenovaþÒo, Character(8), AAAAMMDD - Opcional
			"C1E_DTDOU": "",	- Dt.PublicaþÒo DOU, Character(8), AAAAMMDD - Opcional
			"C1E_PAGDOU": "",	- N·mero da Pßgina do DOU, Character(5) - Opcional
			"C1E_SIAFI": "", 	- N·mero do SIAFI, Character(6) - Opcional
			"C1E_RPPS": "", 	- Regime Prop. Prev. Social, Character(1), 1=Sim;2=NÒo - Opcional
			"C1E_EFR": "", 		- ËrgÒo P·blico Ú o EFR, Character(1), 1=Sim;2=NÒo - Opcional
			"C1E_CPNJER": "", 	- CNPJ Ente Federativo Resp, Character(14) - Opcional
			"C1E_NMENTE": "", 	- Nome do Ente Federativo, Character(115) - Opcional
			"C1E_SUBTET": "", 	- Subteto, Character(1), 1=Executivo;2=Judicißrio;3=Legislativo;9=Todos os poderes - Opcional
			"C1E_VLRSUB": "", 	- Valor Subteto Ente Federa, Decimal(14,2) - Opcional
			"C1E_SITESP": "", 	- SituaþÒo Pessoa JurÝdica, Character(1),0=SituaþÒo Normal;1=ExtinþÒo;2=FusÒo;3=CisÒo;4=IncorporaþÒo. - Opcional
			"C1E_SITPF": "", 	- SituaþÒo Pessoa FÝsica, Character(1),0=SituaþÒo Normal;1=Encerramento de esp¾lio;2=SaÝda do paÝs em carßter permanente - Opcional
			"C1E_CNPJTR":"", 	- CNPJ do Transmissor (Outorga), Character(14) - Obrigatório
			"C1E_UF": "",       - UF do Ente Federativo, Character(2) - Obrigatório
			"dataInicioeSocial": "AAAAMMDD",
			certificado[			- Somente para estabelecimento Matriz.
				{"arquivo": "String"},
				{"senha": "String"}
				
			],
			"dataInicioReinf": "AAAAMMDD",
		}
	],
	"schedule": [
		{"scheduleIntegracao": "1-Sim/2-Nao"}, -  Ativação da Integração ERP / TAF - Charater(1)
		{"scheduleValidacao": "1-Sim/2-Nao"}, - Ativação da Validação ERP / TAF - Charater(1)
		{"scheduleTransmissao": "1-Sim/2-Nao"} - Ativação da Integração TAF / União  - Charater(1)
	],
	"usuarios": [
		{"email": ""}, - Obrigatório
		{"email": ""}, - Obrigatório
		{"email": ""} - Obrigatório
	],
	"versaoVigenteeSocial": ""	- Versão eSocial  02_04_01 ou 02_04_02, Character(8) - Obrigatório
	"urlSmartClient" : "", - Endereço do Endpoint de acesso ( Smartclient HTML - Webapp) - Obrigatório
    "versaoVigenteReinf": ""	- Versão EFD Reinf 1_03_02, Character(8) - Obrigatório
}

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.


Informações
titleGeraçã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

Aviso
titleAtençã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 
Bloco de código
languagejs
themeFadeToGrey
{
    "urlTSS": "10.171.67.235:8092",
    "grantyType": 1,
    "clientId": "bd1e28d4dfbb0d66b640ea94298b2e77c443334c",
    "clientSecret": "19521598819c1fd3bd2b465b4230o1e1f41c64e1f4a09130afacc1f572df1d23"
}
Response:
Bloco de código
languagejs
themeFadeToGrey
{
    "accesstoken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY0LCJleHAiOjE2MzE3OTQzNjV9.YjVkNjRmMmNkODQ5MjhmZjUzYzljMmJkMDU1MWQ4ZjNlNzgzNWQ5OWUwMTAyNTFiNWUwNDNlYTIzMDU0NGYxOGFkYzVhMzQ3YWZmZWQwNmRiNDA3OWMzNjYxNDkxNGU4OGYwNmJkZTFhMzEyYjc1ZDdjNTljMjMwNTU0Yjg5YWM",
    "expiresIn": 1800,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY1LCJleHAiOjE2MzE4Nzg5NjV9.ODRlZmM5NTViZDZkNjJiOTAyZmU3OWE3ZmI4NDNkOGZlZWU4ZTE1NWIwMzI4YzEyZWU3NTMzNGE2OWMzYWE2MDVhMDlkOTE0ZjFmZTU3ZDFhYTRkZDY2ZWRhNmFjZTEzYjYxZDIyZWJiMzhjMWJmMzFhNmY4NTMwMjdkOTI2NzY",
    "tokenType": "Bearer"
}


Atualização do Token 
Bloco de código
languagejs
themeFadeToGrey
{
    "urlTSS": "10.171.67.235:8092",
    "grantType": 2,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkyNTY1LCJleHAiOjE2MzE4Nzg5NjV9.ODRlZmM5NTViZDZkNjJiOTAyZmU3OWE3ZmI4NDNkOGZlZWU4ZTE1NWIwMzI4YzEyZWU3NTMzNGE2OWMzYWE2MDVhMDlkOTE0ZjFmZTU3ZDFhYTRkZDY2ZWRhNmFjZTEzYjYxZDIyZWJiMzhjMWJmMzFhNmY4NTMwMjdkOTI2NzY",
}
Response:
Bloco de código
languagejs
themeFadeToGrey
{
    "accesstoken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkzOTI4LCJleHAiOjE2MzE3OTU3Mjl9.NzM5OTkxZjVhNzViYjA1OTVkMzlmYWU2YmFiMTFkNjlmYWY5NDMyODRkZmNlZDQwMWIyZTE3N2U1ODIzMDMxMThiZTZmNjZhMTUyMTYyODQ0ODMzOGE3M2FlZGMxZDNjYjM1ZmQ0MGFmOTBhYjU3MDZmNjczZWU4MWFjMzI4OGE",
    "expiresIn": 1800,
    "refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRpZCI6IjE2ODA1NmNjLTczNTYtNDAwMC04NUI0LWZlNjhiMjZhYjJjZiIsICJjbGllbnRfaWQiOiJiZDFlMjhkNGRmYmIwZDY2YjY0MGVhOTQyOThiMmU3N2MyNDMzMzRjIiwiaXNzIjoiVE9UVlNfVFNTXzEyLjEuMDMzIiwiaWF0IjoxNjMxNzkzOTI4LCJleHAiOjE2MzE4ODAzMjh9.NjE0OTNmOWEzODEwNmQ4NDhmNGY5MWM4YjE3NDFjYTllZDI3MTczOWY2MmNlNGQzOTc1ZDVlZDk0YjNkNGUyZGI5ZDJlYWQ2NGVlMzFjZTQ2Y2VjZWU3N2JlODQ4ZTY3NGVlZjg5YjE2NmVkYjFiN2FhNzRmMDZhMWIwNTc1ZjI",
    "tokenType": "Bearer"
}
Informações
titleAtualizaçã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.

Bloco de código
languagejs
titleEstrutura da mensagem de retorno do POST (Response):
Validação de Layout: Retorno: { "empresas": [ { "TipoEnviado": "", - Tipo do Dado Enviado Character(1) "Filial": "", - Filial da Empresa Enviada Character(6) "TamanhoEnviado": 14, - Tamanho do dado Enviado Character(6) "Empresa": "igF2", - Empresa Enviada Character(4) "Campo": "C1E_CPNJER", -- Campo Enviado Character(15) "StatusTamanho": true, - Problema detectado for Tamanho Boolean "StatusTipo": false - Problema detectado for Tipo Boolean } ] } Log internos do ambiente { "Logs": [ { "empresas": [ { "mensagem": "", "status": "", "filial": "", "empresa": "" }, ] }, { "usuarios": { "usuarios": [ { "usuario": "", "senha": "" }, { "usuario": "", "senha": "" }, { "usuario": "", "senha": "" }, { "usuario": "TAF_WS", "senha": "" } ] } } ] }