No artigo de hoje, nós vamos demonstrar em como ativar a chave Security em um serviço SOAP do Protheus.
Apesar do REST estar cada vez mais comum nas nossas customizações, ainda existem algumas empresas que utilizam o SOAP.
Geralmente a segurança é feita manualmente enviando uma string no XML da requisição. Mas e se nós quisermos ir além, e ativarmos a security nativamente? Como podemos fazer isso? Esse é o assunto do artigo de hoje.
Caso você queira, nós temos um artigo inteiro abordando em como configurar um AppServer para rodar WebService SOAP ( Clique Aqui ), e também temos um curso completo abordando SOAP e REST no Protheus ( Clique Aqui ).
Pois bem, vamos ao passo a passo:
- Pare o serviço do WebService SOAP
- No seu appserver.ini, na configuração do SOAP, ative a chave Security deixando ela com 1, conforme abaixo:
[JOB_WS]
TYPE=WEBEX
ENVIRONMENT=SEU_AMBIENTE
INSTANCES=10,99,3,2
SIGAWEB=WS
INSTANCENAME=ws
ONSTART=__WSSTART
ONCONNECT=__WSCONNECT
PREPAREIN=01,0101
ABENDLOCK=0
SECURITY=1
- Atualize o parâmetro MV_AUTHWS com um usuário e senha usado na integração. Essa atualização tem que utilizar a RC4Crypt, então execute a fórmula abaixo para atualizar o parâmetro com PutMV (obs.: Estamos usando o usuário daniel e a senha tst123):
PutMv("MV_AUTHWS", RC4Crypt("daniel" + ":" + "tst123", "AuthWS#ReceiptID", .T.))
- Inicie o serviço SOAP
Obs.: Agora nos softwares que forem usar os métodos do SOAP, você também deve atualizar a forma que são acionados. Por exemplo, iremos demonstrar em PHP.
O primeiro passo, é você criar uma função que terá esse usuário e senha:
//Função que parametriza o usuário e senha
function getWSOptions() {
$username = "daniel";
$password = "tst123";
$options = array(
'exceptions' => true,
'login' => $username,
'password' => $password,
);
return $options;
}
E depois você aciona essa função na hora que for consumir o WebService (via SoapClient):
//Define os dados da Requisicao
$token = "seuTokenSeTiverDentroDaRequisicao(SeHouver)";
$urlWsdl = getWSProtheus();
$soapClient = new SoapClient($urlWsdl, getWSOptions());
//Zera as variaveis
$lista = null;
$grupo = '';
$categoria = '';
$priPagina = '';
$ultPagina = '';
//Aciona o consumo do WebService
try {
$requestData = array(
"RETCATPAGE" => array(
"CCATRECE" =>
'{'.
' "Filtro": {'.
' "Tipo":"'.$tipo.'",'.
' "Pagina":"'.$pag.'",'.
' "Codigo":"'.$codCatal.'"'.
' },'.
' "Token": "'.$token.'"'.
'}'
)
);
$response = $soapClient->__soapCall("RETCATPAGE", $requestData);
$jsonLista = json_decode($response->RETCATPAGERESULT);
if (json_last_error() == 0) {
$lista = $jsonLista->Produtos;
$grupo = $jsonLista->Grupo;
$categoria = $jsonLista->Categoria;
$priPagina = $jsonLista->PrimeiraPagina;
$ultPagina = $jsonLista->UltimaPagina;
}
} catch (SoapFault $exception) {
echo 'Houve um erro no carregamento da Lista, <b>contate o Administrador</b>. Exception: <br>';
echo $exception->getMessage();
return;
}
Obs. 2: Para executar o comando do PutMV, você pode usar o Mini Fórmulas, para isso faça o seguinte:
- Faça o download do zMiniForm.prw – Clique Aqui
- Coloque a rotina zMiniForm no Menu – Veja como, clicando aqui
- Ai basta executar a fórmula do PutMV igual o passo 3
Referências:
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Manual excelente, apenas para complementar.
Existe a função padrão chamada AUTHWSRH, ela fornece uma tela para preencher usuário e senha e popular o parâmetro MV_AUTHWS
Fonte: https://tdn.totvs.com/pages/releaseview.action?pageId=563435668
Bom dia mano Sulivan, tudo joia?
Opa, obrigado pelo adendo.
Show de bola essa função AuthWsRh, quando eu montei esse artigo há 2 anos atrás, eu não havia encontrado ela.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.