Lançado Adianti Framework 7.6!
Clique aqui para saber mais
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 : ...
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 :

  1. <?php
  2. #INCLUDE 'TOTVS.CH'
  3. #INCLUDE 'TOTVSWEBSRV.CH' 
  4. #INCLUDE "APWEBSRV.CH"
  5. #INCLUDE "PROTHEUS.CH"
  6. #include "TbiConn.ch"
  7. #include "TbiCode.ch"
  8. #include "TOPCONN.ch"
  9.  
  10. //---------------------------------------------------------------------------
  11. WSSERVICE DAMMPHP DESCRIPTION "WebService INTEGRACAO PHP" // NAMESPACE "http://192.168.0.4:8090/ws"
  12.    
  13. WSDATA CCPF  as STRING
  14. WSDATA cRetCpf  as STRING 
  15. //-----------------------------------------
  16. WSMETHOD VALIDACPF DESCRIPTION "Valida Cpf do cliente"
  17. ENDWSSERVICE
  18. WSMETHOD VALIDACPF WSRECEIVE CCPF WSSEND cRetCpf WSSERVICE DAMMPHP
  19. Local cCfpVl:= alltrim(::CCPF)
  20. Local lRet :=.t.
  21. Local cRet :=""
  22. Local cDupl :=.f.
  23. conout("pesquisando "+cCfpVl)    
  24. dbSelectArea("SA1")
  25. dbSetOrder(3)
  26. if dbSeek(xfilial("SA1")+cCfpVl)
  27.     cDupl:=.t.
  28.     cRet :="JA EXISTE CLIENTE COM ESSE CPF/CNPJ "+alltrim(SA1->A1_NOME)
  29.     ::cRetCpf:=cRet
  30.     Return(.T.)
  31. endif    
  32. if !cDupl
  33.     lRet:=CGC(cCfpVl)
  34.     if lRet
  35.         cRet:="OK"
  36.     else
  37.         if len(cCfpVl) = 14
  38.             cRet:="CNPJ INVALIDO"
  39.         else
  40.             cRet:="CPF INVALIDO"
  41.         endif
  42.     endif
  43. endif
  44. ::cRetCpf:=cRet
  45. Return(.T.)
  46. ?>


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

  1. <?php
  2.         try
  3.         {
  4.             $client    "http://192.168.0.4:8090/ws/DAMMPHP.apw?WSDL";     // link completo do WSDL
  5.             $Conexao  = new SoapClient($client,array("cache_wsdl"=>WSDL_CACHE_NONE,
  6.                                                         'exceptions' => TRUE
  7.                                                         'encoding'   =>'UTF-8'));
  8.             // var_dump($Conexao->__getFunctions());  
  9.             // var_dump($Conexao->__getTypes()); 
  10.          // executa o método
  11.             $params = array('CCPF'=>"03233015482");
  12.             $retorno $Conexao->validacpf($params);
  13.             $cpf $retorno->VALIDACPFRESULT ;
  14.             print_r($cpf);
  15.  
  16.         }
  17.         catch (Exception $e)
  18.         {
  19.             echo 'Call error: ' $e->getMessage();
  20.         } 
  21. ?>


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()).



Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (1)


TP

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...