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.
como ficaria essa configuração em advpl usado o parametro descrito , vc deu exemplo para php.
Bom dia Yury, tudo joia?
Você quer consumir um WS SOAP que tem autenticação, seria isso?
Se sim, infelizmente ainda não precisei consumir um WS SOAP em AdvPL que utilize camada de segurança, mas você pode fazer um teste, na classe TWSDLManager, dá uma olhada no método SetAuthentication, se vai te atender: https://tdn.totvs.com/display/tec/TWsdlManager%3ASetAuthentication
Tenha uma ótima e abençoada terça feira.
Um forte abraço.