Como habilitar e configurar a Security no WebService SOAP do AppServer

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:

 

  1. Pare o serviço do WebService SOAP
  2. 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

 

  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.))
  1. 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:

  1. Faça o download do zMiniForm.prw – Clique Aqui
  2. Coloque a rotina zMiniForm no Menu – Veja como, clicando aqui
  3. 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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação