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. WSSERVICE DAMMPHP DESCRIPTION "WebService INTEGRACAO PHP" // NAMESPACE "http://192.168.0.4:8090/ws"
  11. WSDATA CCPF as STRING
  12. WSDATA cRetCpf as STRING
  13. //-----------------------------------------
  14. WSMETHOD VALIDACPF DESCRIPTION "Valida Cpf do cliente"
  15. ENDWSSERVICE
  16. WSMETHOD VALIDACPF WSRECEIVE CCPF WSSEND cRetCpf WSSERVICE DAMMPHP
  17. Local cCfpVl:= alltrim(::CCPF)
  18. Local lRet :=.t.
  19. Local cRet :=""
  20. Local cDupl :=.f.
  21. conout("pesquisando "+cCfpVl)
  22. dbSelectArea("SA1")
  23. dbSetOrder(3)
  24. if dbSeek(xfilial("SA1")+cCfpVl)
  25. cDupl:=.t.
  26. cRet :="JA EXISTE CLIENTE COM ESSE CPF/CNPJ "+alltrim(SA1->A1_NOME)
  27. ::cRetCpf:=cRet
  28. Return(.T.)
  29. endif
  30. if !cDupl
  31. lRet:=CGC(cCfpVl)
  32. if lRet
  33. cRet:="OK"
  34. else
  35. if len(cCfpVl) = 14
  36. cRet:="CNPJ INVALIDO"
  37. else
  38. cRet:="CPF INVALIDO"
  39. endif
  40. endif
  41. endif
  42. ::cRetCpf:=cRet
  43. Return(.T.)
  44. ?>


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. catch (Exception $e)
  17. {
  18. echo 'Call error: ' . $e->getMessage();
  19. }
  20. ?>


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 Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework 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...