Como integrar Protheus com a Sophus

Hoje vou mostrar como buscar informações de pessoas físicas e jurídicas no Protheus vindas da Sophus.

A Sophus é uma empresa de tecnologia, e eles tem uma ferramenta sensacional que traz inúmeras informações de pessoas físicas e pessoas jurídicas.

Tem até informação de score, se é recomendável a venda, de protestos, etc. Tanto que algumas associações como ACISA e ACICAP utilizam.

Para fazer a integração, primeiro é necessário ter um cadastro em alguma associação, e assim ter um login e senha. A documentação da integração, pode ser baixada em http://www.sophus.com.br/downloads/Sockets.rar

Nos testes que fiz, a consulta de pessoa física, usamos o código de consulta 309, já se for pessoa jurídica o código de consulta usado foi o 621.

A consulta via AdvPL é montada um XML de filtro, e enviado um HttpPost. Se tudo der certo, é retornado um XML, e com esse resultado você consegue dar o seu XMLParser e tratar a informação.

Abaixo um exemplo da consulta (a função criada recebe um código de cpf/cnpj no parâmetro):

//Bibliotecas
#Include "Totvs.ch"

/*/{Protheus.doc} User Function ASOPM01
Função que retorna o XML de consulta no Sophus
@type  Function
@author Atilio
@since 17/10/2020
@version version
@see http://www.sophus.com.br/downloads/Sockets.rar
@obs no exemplo abaixo, se vier CNPJ irá tratar com a consulta 621, se vier CPF irá tratar com a consulta 309
/*/

User Function ASOPM01(cCGC)
    Local aArea      := GetArea()
    Local cSendXML   := ''
    Local cResultXML := ''
    Local cVersao    := '20090415'
    Local cCodigo    := 'Informar seu Codigo aqui'
    Local cSenhaXML  := 'Informar sua Senha aqui'
    Local cTipo      := ''
    Local cCNPJ      := ''
    Local cCPF       := ''
    Default cCGC     := ''

    //Somente fará as tratativas se tiver vindo CGC (CNPJ ou CPF)
    If ! Empty(cCGC)
        //Faz a tratativa se for CNPJ ou CPF
        cCGC := Alltrim(cCGC)
        cCGC := StrTran(cCGC, '-', '')
        cCGC := StrTran(cCGC, '.', '')
        cCGC := StrTran(cCGC, '/', '')
        If Len(cCGC) > 11
            cTipo := '621'
            cCNPJ := cCGC
        Else
            cTipo := '309'
            cCPF  := cCGC
        EndIf

        //Monta o envio do XML para a Sophus
        cSendXML := ''
        cSendXML += ''
        cSendXML += '   ' + cVersao + ''
        cSendXML += '   '
        cSendXML += '		   ' + cCodigo + ''
        cSendXML += '		   ' + cSenhaXML + ''
        cSendXML += '		   ' + cTipo + ''
        If cTipo == '309'
            cSendXML += '		   ' + cCPF + ''
        ElseIf cTipo == '621'
            cSendXML += '		   ' + cCNPJ + ''
        EndIf
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   '
        cSendXML += '		   XX'
        cSendXML += '		   0'
        cSendXML += '   '
        cSendXML += ''

        //Envia o XML, e se tudo der certo, armazena na variável cResultXML
        cResultXML := HttpPost('https://www.scpc.inf.br/cgi-bin/spcaxml',; // cURL
			,; // cGetParms
			cSendXML,; // cPostParms
			,; // nTimeOut
			,; // aHeadStr
			)  // @cHeaderGet
    EndIf

    RestArea(aArea)
Return cResultXML

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