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 := '<?xml version="1.0" encoding="UTF-8"?>'
        cSendXML += '<SPCA-XML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://www.scpc.inf.br/spcn/spcaxml.xsd">'
        cSendXML += '   <VERSAO>' + cVersao + '</VERSAO>'
        cSendXML += '   <SOLICITACAO>'
        cSendXML += '		   <S-CODIGO>' + cCodigo + '</S-CODIGO>'
        cSendXML += '		   <S-SENHA>' + cSenhaXML + '</S-SENHA>'
        cSendXML += '		   <S-CONSULTA>' + cTipo + '</S-CONSULTA>'
        If cTipo == '309'
            cSendXML += '		   <S-CPF>' + cCPF + '</S-CPF>'
        ElseIf cTipo == '621'
            cSendXML += '		   <S-CNPJ>' + cCNPJ + '</S-CNPJ>'
        EndIf
        cSendXML += '		   <S-NOME></S-NOME>'
        cSendXML += '		   <S-RAZAO-SOCIAL></S-RAZAO-SOCIAL>'
        cSendXML += '		   <S-DDD-1></S-DDD-1>'
        cSendXML += '		   <S-TELEFONE-1></S-TELEFONE-1>'
        cSendXML += '		   <S-DDD-2></S-DDD-2>'
        cSendXML += '		   <S-TELEFONE-2></S-TELEFONE-2>'
        cSendXML += '		   <S-CEP></S-CEP>'
        cSendXML += '		   <S-NASCIMENTO></S-NASCIMENTO>'
        cSendXML += '		   <S-RG></S-RG>'
        cSendXML += '		   <S-UFRG></S-UFRG>'
        cSendXML += '		   <S-UF-DATA></S-UF-DATA>'
        cSendXML += '		   <S-TIPO-CREDITO>XX</S-TIPO-CREDITO>'
        cSendXML += '		   <S-NUMERO-RESPOSTA>0</S-NUMERO-RESPOSTA>'
        cSendXML += '   </SOLICITACAO>'
        cSendXML += '</SPCA-XML>'

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