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.