ML
Consumir Webservice TOTVS PROTHEUS com integração PHP
Este Artigo será muito útil para quem quer integrar PHP com Protheus.
Eu criei um método simples de ADVPL para rodar no Webservice do Protheus que recebe uma solicitação de consulta no cadastro de clientes para verificar se um CPF já existe no cadastro.
O nome do programa é : dammphp.prw
Ele deverá ser compilado no lado do WebService o Protheus. Segue o codigo :
Agora vem a parte do consumo do Webservice com codigo PHP.
Depois de varias tentativas, descobri que eu só poderia acessar o Webservice Protheus via WSDL.
Segue o trecho do codigo PHP
Caso você não tenham uma documentação do WebService os comando que eu deixei comentado auxiliam a verificar o conteúdo do Webservice, são essas : var_dump($Conexao->__getFunctions()); e var_dump($Conexao->__getTypes()).
Eu criei um método simples de ADVPL para rodar no Webservice do Protheus que recebe uma solicitação de consulta no cadastro de clientes para verificar se um CPF já existe no cadastro.
O nome do programa é : dammphp.prw
Ele deverá ser compilado no lado do WebService o Protheus. Segue o codigo :
- <?php
- #INCLUDE 'TOTVS.CH'
- #INCLUDE 'TOTVSWEBSRV.CH'
- #INCLUDE "APWEBSRV.CH"
- #INCLUDE "PROTHEUS.CH"
- #include "TbiConn.ch"
- #include "TbiCode.ch"
- #include "TOPCONN.ch"
-
- //---------------------------------------------------------------------------
- WSSERVICE DAMMPHP DESCRIPTION "WebService INTEGRACAO PHP" // NAMESPACE "http://192.168.0.4:8090/ws"
-
- WSDATA CCPF as STRING
- WSDATA cRetCpf as STRING
- //-----------------------------------------
- WSMETHOD VALIDACPF DESCRIPTION "Valida Cpf do cliente"
- ENDWSSERVICE
- WSMETHOD VALIDACPF WSRECEIVE CCPF WSSEND cRetCpf WSSERVICE DAMMPHP
- Local cCfpVl:= alltrim(::CCPF)
- Local lRet :=.t.
- Local cRet :=""
- Local cDupl :=.f.
- conout("pesquisando "+cCfpVl)
- dbSelectArea("SA1")
- dbSetOrder(3)
- if dbSeek(xfilial("SA1")+cCfpVl)
- cDupl:=.t.
- cRet :="JA EXISTE CLIENTE COM ESSE CPF/CNPJ "+alltrim(SA1->A1_NOME)
- ::cRetCpf:=cRet
- Return(.T.)
- endif
- if !cDupl
- lRet:=CGC(cCfpVl)
- if lRet
- cRet:="OK"
- else
- if len(cCfpVl) = 14
- cRet:="CNPJ INVALIDO"
- else
- cRet:="CPF INVALIDO"
- endif
- endif
- endif
- ::cRetCpf:=cRet
- Return(.T.)
- ?>
Agora vem a parte do consumo do Webservice com codigo PHP.
Depois de varias tentativas, descobri que eu só poderia acessar o Webservice Protheus via WSDL.
Segue o trecho do codigo PHP
- <?php
- try
- {
- $client = "http://192.168.0.4:8090/ws/DAMMPHP.apw?WSDL"; // link completo do WSDL
- $Conexao = new SoapClient($client,array("cache_wsdl"=>WSDL_CACHE_NONE,
- 'exceptions' => TRUE,
- 'encoding' =>'UTF-8'));
- // var_dump($Conexao->__getFunctions());
- // var_dump($Conexao->__getTypes());
- // executa o método
- $params = array('CCPF'=>"03233015482");
- $retorno = $Conexao->validacpf($params);
- $cpf = $retorno->VALIDACPFRESULT ;
- print_r($cpf);
-
- }
- catch (Exception $e)
- {
- echo 'Call error: ' . $e->getMessage();
- }
- ?>
Caso você não tenham uma documentação do WebService os comando que eu deixei comentado auxiliam a verificar o conteúdo do Webservice, são essas : var_dump($Conexao->__getFunctions()); e var_dump($Conexao->__getTypes()).
O tempo de resposta do protheus fica aceitável?
Eu estava pensando em utilizar um webservice para fazer consultas, onde eu passava a query e ele retornava os dados em json...