Registration of boletos Caixa Webservice SOAP WSDL PHP

Asked

Viewed 4,766 times

1

Friends, I never worked with WS, but now, as a result of the new changes, I need to register slips that I use on a website. I received a document from CEF but so far I could not make it work.

Follow the instructions:

URL: https://barramento.caixa.gov.br/sibar/ManutencaoCobrancaBancaria/Boleto/Externo

Every call to the Web Service must be made through secure communication (SSL/HTTPS) and in the POST method. We recommend the use of XSD and WSDL messages provided by BOX to build the solution, valuing the correct ordering of fields.

Below, the Box itself provides an idea of what the xml output should look like: The example below demonstrates the sending of data generated by the customer to CAIXA, referring to the entry of a title registration request.

<ns3:SERVICO_ENTRADA  xmlns:ns2="http://caixa.gov.br/sibar" xmlns:ns4="http://caixa.gov.br/sibar/manutencao_cobranca_bancaria/boleto/externo"> <ns2:HEADER> <VERSAO>1.0</VERSAO> <AUTENTICACAO>wIXyzrhD7HjlrpCP1xNnq8vFE7ggAGuz/srw1BOtxDY=</AUTENTICACAO> <OPERACAO>INCLUI_BOLETO</OPERACAO> <SISTEMA_ORIGEM>SIGCB</SISTEMA_ORIGEM> <DATA_HORA>20170221110643</DATA_HORA> </ns2:HEADER> <DADOS> <INCLUI_BOLETO> <CODIGO_BENEFICIARIO>537588</CODIGO_BENEFICIARIO> <TITULO> <NOSSO_NUMERO>14000000091946802</NOSSO_NUMERO> <NUMERO_DOCUMENTO>NF123456</NUMERO_DOCUMENTO> <DATA_VENCIMENTO>2017-02-21</DATA_VENCIMENTO> <VALOR>1.00</VALOR> <TIPO_ESPECIE>99</TIPO_ESPECIE> <FLAG_ACEITE>S</FLAG_ACEITE> <DATA_EMISSAO>2017-02-21</DATA_EMISSAO> <JUROS_MORA> <TIPO>ISENTO</TIPO> <DATA>2017-02-21</DATA> <VALOR>0</VALOR> </JUROS_MORA> <VALOR_ABATIMENTO>0</VALOR_ABATIMENTO> <POS_VENCIMENTO> <ACAO>DEVOLVER</ACAO> <NUMERO_DIAS>0</NUMERO_DIAS> </POS_VENCIMENTO> <CODIGO_MOEDA>9</CODIGO_MOEDA> <PAGADOR> <CPF>00000000191</CPF> <NOME>EXEMPLO DE NOME DO PAGADOR</NOME> <ENDERECO> <LOGRADOURO>SAUS QUADRA 3</LOGRADOURO> <BAIRRO>BRASILIA</BAIRRO> <CIDADE>BRASILIA</CIDADE> <UF>DF</UF> <CEP>70070030</CEP> </ENDERECO> </PAGADOR> 38.239 v002 micro     26 
LEIAUTE DE ARQUIVO ELETRÔNICO - WEBSERVICE XML COBRANÇA BANCÁRIA CAIXA 
<SACADOR_AVALISTA> <CNPJ>00360305000104</CNPJ> <RAZAO_SOCIAL>EXEMPLO DE NOME DO SACADOR AVALISTA</RAZAO_SOCIAL> </SACADOR_AVALISTA> <PAGAMENTO> <QUANTIDADE_PERMITIDA>1</QUANTIDADE_PERMITIDA> <TIPO>NAO_ACEITA_VALOR_DIVERGENTE</TIPO> <VALOR_MINIMO>0.00</VALOR_MINIMO> <VALOR_MAXIMO>0.00</VALOR_MAXIMO> </PAGAMENTO> </TITULO> </INCLUI_BOLETO> </DADOS> </ns3:SERVICO_ENTRADA> 

Could someone give me a help to assemble the connection parameters for sending and return handling?

2 answers

2

I wrote a library prototype following the example below. Is available here.


Here is an example for the inclusion of billets you use Nusoap and Xmldomconstruct. You will have to change the constants in the middle of this code for the variables applicable to your environment and the company agreement.

include(LIB_DIR . '/nusoap/lib/nusoap.php');
include(LIB_DIR . '/XmlDomConstruct/XmlDomConstruct.php');

// Hash de autenticação
$raw = preg_replace('/[^A-Za-z0-9]/', '',
    '0' . CODIGO_BENEFICIARIO .
    NOSSO_NUMERO .
    strftime('%d%m%Y', strtotime(DATA_VENCIMENTO))) .
    sprintf('%015d', preg_replace('/[^0-9]/', '', VALOR)) .
    sprintf('%014d', CNPJ));
$autenticacao = base64_encode(hash('sha256', $raw, true));

    $xml_array = array(
        'sibar_base:HEADER' => array(
            'VERSAO' => '1.0',
            'AUTENTICACAO' => $autenticacao,
            'USUARIO_SERVICO' => 'SGCBS02P',
            'OPERACAO' => 'INCLUI_BOLETO',
            'SISTEMA_ORIGEM' => 'SIGCB',
            'UNIDADE' => UNIDADE,
            'IDENTIFICADOR_ORIGEM' => OUT_IP,
            'DATA_HORA' => date('YmdHis'),
            'ID_PROCESSO' => ID_PROCESSO,
        ),
        'DADOS' => array(
            'INCLUI_BOLETO' => array(
                'CODIGO_BENEFICIARIO' => CODIGO_BENEFICIARIO,
                'TITULO' => array(
                    'NOSSO_NUMERO' => NOSSO_NUMERO,
                    'NUMERO_DOCUMENTO' => NUMERO_DOCUMENTO,
                    'DATA_VENCIMENTO' => DATA_VENCIMENTO,
                    'VALOR' => VALOR,
                    'TIPO_ESPECIE' => '99',
                    'FLAG_ACEITE' => 'S',
                    'DATA_EMISSAO' => DATA_EMISSAO,
                    'JUROS_MORA' => array(
                        'TIPO' => 'ISENTO',
                        'VALOR' => '0',
                    ),
                    'VALOR_ABATIMENTO' => '0',
                    'POS_VENCIMENTO' => array(
                        'ACAO' => 'DEVOLVER',
                        'NUMERO_DIAS' => NUMERO_DIAS,
                    ),
                    'CODIGO_MOEDA' => '09',
                    'PAGADOR' => array(
                        'CPF' => sprintf('%014d', CPF),
                        'NOME' => NOME,
                        'ENDERECO' => array(
                            'LOGRADOURO' => LOGRADOURO,
                            'BAIRRO' => BAIRRO,
                            'CIDADE' => CIDADE,
                            'UF' => UF,
                            'CEP' => CEP
                        )
                    )
                )
            )
        );

    // Geração do XML
    $xml_root = 'manutencaocobrancabancaria:SERVICO_ENTRADA';
    $xml = new XmlDomConstruct('1.0', 'iso-8859-1');
    $xml->preserveWhiteSpace = false;
    $xml->formatOutput = true;
    $xml->fromMixed(array($xml_root => $args));
    $xml_root_item = $xml->getElementsByTagName($xml_root)->item(0);
    $xml_root_item->setAttribute('xmlns:manutencaocobrancabancaria',
        'http://caixa.gov.br/sibar/manutencao_cobranca_bancaria/boleto/externo');
    $xml_root_item->setAttribute('xmlns:sibar_base',
        'http://caixa.gov.br/sibar');
    $xml_string = preg_replace('/^<\?.*\?>/', '', $xml->saveXML());

    // Consulta ao webservice
    $client = new nusoap_client(ENDERECO_WSDL, $wsdl = true, $timeout = TIMEOUT);
    $response = $client->call('INCLUI_BOLETO', $xml_string);
    $err = $client->getError();
    if (!$client->fault && !$err)
        echo $err; // inclusão falhou

    print_r($response) // inclusão feita com sucesso

-1

You can use the Guzzle library, the best option for working with HTTP requests in PHP. Curl is also an option, but I prefer Guzzle.

Guzzle

Browser other questions tagged

You are not signed in. Login or sign up in order to post.