Webhook Protheus Como fazer

Bom dia! Estou Criando a primeira URL para receber informaçoes VIA webhook. Vou integrar a SRA- Protheus com a GUPY. Alguem teria um modelo desta api para compartilhar? Obrigado!

Qual a sua necessidade?

Enviar dados ou receber? Ao meu ver, o melhor seria você desenvolver um WS REST. Isso para que eles consumam informação ou voce desenvolver rotinas para consumir um WS deles para o envio de informações e busca de retornos.

o Protheus vai receber as informaçoes para popular a SRA, via webhook

Não conheço nenhuma API disponível pronto para isso, acredito que você terá que desenvolver uma própria. Primeiro configurar o servidor Protheus para receber request URL/WS. Para o webhook você precisará criar um WS e disponibilizar a URL para a outra plataforma fazer as requisições.

Exemplo de WS de para utilizar webhook que fiz. no caso essa função analisar ele só gravar em uma tabela customiza o ID e operação(atualização/inclusão/exclusão), para depois utilizar esse ID para fazer os tratamento necessário consumindo a API do outro sistema que fez o envio da requisição no meu webhook.


#INCLUDE "TOTVS.CH"
#INCLUDE "RESTFUL.CH"

WSRESTFUL tray DESCRIPTION "Integracao webhook"

    WSDATA count      AS INTEGER
    WSDATA startIndex AS INTEGER
    WSDATA CODE as String

    WSMETHOD POST DESCRIPTION "Webhook" WSSYNTAX "/notif"

END WSRESTFUL

//====================================================================================================
/*
WSMETHOD GET WSRECEIVE startIndex, count WSSERVICE tray
    Local i
     conout(FWTimeStamp(1,DATE(),TIME())+"-Chamado GET em ORDER API integracao ANY")
    // define o tipo de retorno do método
    ::SetContentType("application/json")

    // verifica se recebeu parametro pela URL
    // exemplo: http://localhost:8080/order/1
    If Len(::aURLParms) > 0

      // insira aqui o código para pesquisa do parametro recebido

      // exemplo de retorno de um objeto JSON
      ::SetResponse('{"id":' + ::aURLParms[1] + ', "name":"order"}')

    Else
          // as propriedades da classe receberão os valores enviados por querystring
         // exemplo: http://localhost:8080/order?startIndex=1&count=10
        DEFAULT ::startIndex := 1, ::count := 5

          // exemplo de retorno de uma lista de objetos JSON
          ::SetResponse('[')
          For i := ::startIndex To ::count + 1
              If i > ::startIndex
                  ::SetResponse(',')
            EndIf
            ::SetResponse('{"id":' + Str(i) + ', "name":"order"}')
          Next

          ::SetResponse(']')

    EndIf

Return .T.
*/

//====================================================================================================
// O metodo POST pode receber parametros por querystring, por exemplo:
WSMETHOD POST WSSERVICE tray
    Local lPost := .T.
    Local cBody
    Local cRetAnalise := '200'

    conout(FWTimeStamp(1,DATE(),TIME())+"-Chamado POST em tray API integracao Tray via webhook")
    // Exemplo de retorno de erro
    //If Len(::aURLParms) > 0
    //    SetRestFault(400, "Não é possível receber parametro do metodo POST")
    //    lPost := .F.
    //Else
         // recupera o body da requisição
         cBody := ::GetContent()

         // insira aqui o código para operação inserção
         // exemplo de retorno de um objeto JSON
         If AnalisaDados(cBody, @cRetAnalise)
            conout(FWTimeStamp(1,DATE(),TIME())+"-before analisadados")
            ::setStatus(200)
             ::SetResponse(cRetAnalise)
         Else
             SetRestFault(400, cRetAnalise)
             lPost := .F.
         Endif
    //EndIf

Return lPost

1 curtida