Histórico da Página
...
Bloco de código | ||
---|---|---|
| ||
for( int i=0; i < Integer.valueOf(hash.get("B358_NUMPEFIN")); i++) { System.out.println("registro: " + hash.get("B358_DTOCORR_" + String.valueOf(i))); } |
Configurando acesso ao SERASA PF
- Lembrar sempre que a correta interpretação dos registros depende da leitura atenta do layout B49C/B49L.
A configuração dos acessos externos SERASA PF/PJ deve inicialmente passar por uma indicação para a JVM do path do arquivo de properties, do certificado e do ‘log4j‘; veja abaixo o setting para a JVM (‘-D option‘):
Bloco de código | ||
---|---|---|
| ||
-Dserasa-bureau.datadir=/home/jboss/intellector -Dlog4j.configuration=/home/jboss/intellector -Daccess.ssl=/home/jboss/intellector/ssl |
Para o uso direto em testes, usaríamos… (e.g. /home/jboss/intellector)
Bloco de código | ||
---|---|---|
| ||
java -jar -cp. -Dserasa-bureau.datadir=/home/jboss/intellector SerasaBureau.jar |
Aviso |
---|
Usando o método de execução acima, não esqueça de colocar no ’CLASSPATH’ todas as dependências; e o mesmo para JAVA_OPTS no JBoss…
|
Propriedades para o Acesso Seguro (HTTPS)
- Arquivo ‘https.properties‘ – arquivos de propriedades do certificado e conexão ‘host-to-host‘ com a SERASA
Bloco de código | ||
---|---|---|
| ||
# Arquivo de properties para o SERASA PJ
# $Revision: 1.2 $
#
# Informações de autenticacao e certificados do serasa
user.url=sitenet07.serasa.com.br
user.root=/Homologa/consultahttps
user.jks=lVaxvlqeVH5ugq/rba5vYvSWhu8kYJqO3Q==O63WLqgqpA==
user.cert=/home/jboss/intellector-files/serasa.jks |
- Existe no Site do Intellector, uma funcionalidade para configurar os arquivos de propriedades, lá você poderá gerar a senha criptografada.
Aviso |
---|
Configurando SSL e HTTPS, leia aqui; sem Certificado ’não funciona’ e, entenda bem o conceito, leia sobre isso. Esse certificado é fornecido pela própria entidade, tipo host<->host. |
Auditoria dos dados de Acesso
Para efeitos de auditoria, esse plugin persiste os dados da string de Envio e Retorno do acesso (dados brutos), sendo possível consultar esses dados via web service de Auditoria e verificar ou fazer uso dessas strings. O conteúdo dessa string bruta é composto pelos campos que compõe o layout de entrada e saída, especificada na documentação do SERASA.
Layouts para o Acesso
- Nos Layouts são apresentados dados fixos, que provavelmente não sofrerão alterações; caso haja, a codificação do acesso também deverá ser alterada; basicamente, são dados transacionais.
- Baixe aqui o Layout B49C.
- Arquivo ‘layout_p002.xml‘ – Header do Regsitro P005 – Parcelas com cheques de Compromisso.
Bloco de código | ||
---|---|---|
| ||
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- layout_p002.xml - Registro P002 - Outras Opcoes de Consulta Pessoa Fisica -->
<serasa_bureau>
<field>
<!-- Tipo de registro TIPO-REG -->
<name>P002</name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- codigo da 1a opcao para consultar outro produto, feature ou base (ver tabela 30 -->
<name>IP20</name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- chave de acesso para consultar a 1a opcao se necessario -->
<name>Q</name>
<size>21</size>
<type>S</type>
</field>
<field>
<!-- codigo da 2a opcao para consultar outro produto, feature ou base (ver tabela 30 -->
<name> </name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- chave de acesso para consultar a 2a opcao se necessario -->
<name> </name>
<size>21</size>
<type>S</type>
</field>
<field>
<!-- codigo da 3a opcao para consultar outro produto, feature ou base (ver tabela 30 -->
<name> </name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- chave de acesso para consultar a 3a opcao se necessario -->
<name> </name>
<size>21</size>
<type>S</type>
</field>
<field>
<!-- codigo da 4a opcao para consultar outro produto, feature ou base (ver tabela 30 -->
<name> </name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- chave de acesso para consultar a 4a opcao se necessario -->
<name> </name>
<size>21</size>
<type>S</type>
</field>
<field>
<!-- filler de COMPLEMENTO do registro P002 -->
<name> </name>
<size>11</size>
<type>S</type>
</field>
</serasa_bureau> |
- Arquivo layout_p006.xml - Opções de consulta do Cadastro Sintético
Bloco de código | ||
---|---|---|
| ||
<?xml version="1.0" encoding="ISO-8859-1"?>
<serasapf>
<field>
<!-- Layout de consulta P006: trata-se de uma sequencia de S/N, para cada registro -->
<!-- para uma melhor visualizacao e configuracao, verificar o layout de consulta do P006 -->
<name>P006SNSSS9999SSSSSSSN NNNSN</name>
<size>27</size>
<type>S</type>
</field>
<field>
<!-- filler (7): filler de COMPLEMENTO do registro P006 -->
<name> </name>
<size>88</size>
<type>S</type>
</field>
</serasapf> |
- Arquivo layoutPF_b49c.xml - Header transacional para a consulta Pessoa Física
Bloco de código | ||
---|---|---|
| ||
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Layout PF B49C -->
<serasapf>
<field>
<!-- header Credit Bureau -->
<name>B49C</name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- Filler -->
<name> </name>
<size>6</size>
<type>S</type>
</field>
<field>
<!-- NUM_DOC=CPF; está neste XML ilustrando, pois o mesmo é tratado numa -->
<!-- tag de entrada, serve como referencia pra substituicao do real CPF -->
<name>cpf</name>
<size>15</size>
<type>N</type>
</field>
<field>
<!-- Tipo Pessoa F=pessoa fisica; J=pessoa juridica -->
<name>F</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- Base de consulta -->
<name>C</name>
<size>6</size>
<type>S</type>
</field>
<field>
<!-- Modalidade -->
<name>FI</name>
<size>2</size>
<type>S</type>
</field>
<field>
<!-- valor da consulta -->
<name>8888888</name>
<size>7</size>
<type>N</type>
</field>
<field>
<!-- Centro de custo -->
<name> </name>
<size>12</size>
<type>S</type>
</field>
<field>
<!-- Codificado (S/N) -->
<name>N</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- quantidade de registros por transmissao de dados -->
<name>99</name>
<size>2</size>
<type>N</type>
</field>
<field>
<!-- Deseja dialogo de comunicacao (S/N) -->
<name>S</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- Funcao: INI,CON,ENC,ERR,TMD,FIM -->
<name>INI</name>
<size>3</size>
<type>S</type>
</field>
<field>
<!-- Tipo de consulta -->
<name>A</name>
<size>1</size>>
<type>S</type>
</field>
<field>
<!-- atualiza dados enviados (S/N) -->
<name>N</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- Filler (2) -->
<name> </name>
<size>42</size>
<type>S</type>
</field>
<field>
<!-- quantidade de cheques sequenciais -->
<name>00</name>
<size>2</size>
<type>N</type>
</field>
<field>
<!-- endereço + telefone -->
<name>N</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- filler (3) -->
<name> </name>
<size>8</size>
<type>S</type>
</field>
<field>
<!-- conta corrente -->
<name>0000000000</name>
<size>10</size>
<type>N</type>
</field>
<field>
<!-- digito da conta corrente -->
<name>0</name>
<size>1</size>
<type>N</type>
</field>
<field>
<!-- agencia -->
<name>0000</name>
<size>4</size>
<type>N</type>
</field>
<field>
<!-- filler (4) -->
<name> </name>
<size>61</size>
<type>N</type>
</field>
<field>
<!-- quantidade de compromisso encontrados -->
<name> </name>
<size>2</size>
<type>N</type>
</field>
<field>
<!-- tem anotacoes negativas (S/N/B) -->
<name> </name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- anotacoes de cheques (S/N/B) -->
<name> </name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- data da consulta -->
<name> </name>
<size>8</size>
<type>S</type>
</field>
<field>
<!-- hora da consulta -->
<name> </name>
<size>6</size>
<type>S</type>
</field>
<field>
<!-- total de registros -->
<name> </name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- quantidade de registros enviados por transmissao -->
<name> </name>
<size>4</size>
<type>N</type>
</field>
<field>
<!-- numero de controle de atualizacao das tabelas -->
<name> </name>
<size>4</size>
<type>S</type>
</field>
<field>
<!-- filler (5) -->
<name> </name>
<size>176</size>
<type>S</type>
</field>
<field>
<!-- acessou recheque online (S/N) -->
<name>N</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- tem ocorrencia de Recheque ultimo ano (S/N) -->
<name>N</name>
<size>1</size>
<type>S</type>
</field>
<field>
<!-- filler (6) -->
<name> </name>
<size>1</size>
<type>S</type>
</field>
</serasapf>
|
Propriedades Configuráveis do Acesso
- As propriedades abaixo podem sofrer alterações, e essas podem ser feitas pelo site do Intellector (veja aqui); muita atenção no preenchimento dessas informações, pois elas definem o acesso ao conteúdo (informações) e, não de conexão ao host da SERASA.
- Arquivo serasapf.properties
Bloco de código | ||
---|---|---|
| ||
#Arquivo de properties para o SERASA PF
# $Revision: 1.2 $
#
# type S=string, N=numeric
#
# Informaçoes de Login no SERASA
serasa.login=00186487
serasa.login_size=8
serasa.login_type=N
serasa.password=11003344
serasa.pass_size=8
serasa.pass_type=S
serasa.newpass=
serasa.npass_size=8
serasa.npass_type=S |
Preenchimento da HashMap de Entrada
- Método de acesso no XML
Esse será o método usado pelo reflection da politica
<
Bloco de código | ||
---|---|---|
| ||
!-- metodo de acesso para ser carregado no acesso -->
<code name="br.com.tools.acessos.serasa.SerasaPF"/>
|
- Sufixo para as variáveis internas da política
Será usada apenas pelo cliente e pela politica, mas deve ser informado.
Bloco de código | ||
---|---|---|
| ||
<!-- esse deverah ser sufixo para ser acrescentado ao nome -->
<!-- vindo da politica, entao irei buscar na hash da politica -->
<!-- hash.getKey(cpf_serasa); um de/para para os elementos -->
<nome_acesso>serasapf</nome_acesso>
|
- ‘Somente com P006‘ – Opções de Consulta Cadastro Sintético (mínimo)
- Registros chave para ser informado na hashtable de entrada
- ‘CPF‘ – contém o CPF para consulta, sem “.” (ponto) ou “-” (hífen)
- Registros chave para ser informado na hashtable de entrada
e.g. java code
Bloco de código | ||
---|---|---|
| ||
serIn.put("CPF", "00000000191"); |
- Arquivo XML
Bloco de código | ||
---|---|---|
| ||
<!-- posso testar pelo valor obrigatorio dentro de cada -->
<!-- acesso, ele dever ser "CPF" -->
<field description="CPF a ser consultado" type="String" format="">CPF</field> |
- ‘Com utilização do P005‘ – Parcelas com Cheque de Compromisso
Chave na ‘HashMap‘ (default=false)
Bloco de código | ||
---|---|---|
| ||
// deve ser informado; ele avisa true/false para a consulta ao P005
serIn.put("P005", "false"); |
- Registros chave para ser informado na hashtable de entrada
- ‘CMC7‘ (30 bytes) – contém o CMC7 do cheque
- ‘VLR_CHEQUE‘ – valor do cheque
- ‘VENC_CHEQUE‘ – data de vencimento do cheque
- ‘TIPO_MOV‘ – tipo de movimento (“I”=incluir cheque; “B”=baixar cheque; “E”=baixar cheque que terá novo cheque incluido na sequência; “C”=consultar cheque)
- Registros chave para ser informado na hashtable de entrada
- ‘xml‘
Bloco de código | ||
---|---|---|
| ||
<!-- contem os dados necessarios para entrada no serasa PF -->
<entrada>
<!-- posso testar pelo valor obrigatorio dentro de cada -->
<!-- acesso, ele dever ser "CPF" -->
<field description="CPF a ser consultado" type="String" format="">CPF</field>
<!-- no caso de ser "CPF", pode-se optar pelo protocolo -->
<!-- P005, entao verifico se o dado abaixo(CMC7?) existe -->
<!-- como "true" ou "false", soh entao ele usa os dados -->
<field description="Indicação de uso da consulta P005: true/false" type="Boolean" format="">P005</field>
<field description="CMC7" type="String" format="">CMC7</field>
<field description="Valor de cheque consultado" type="Double" format="">VLR_CHEQUE</field>
<!-- Data de vencimento do cheque; deverah vir AAAAMMDD -->
<field description="Data de vencimento do cheque; deverá ser AAAAMMDD" type="Date" format="yyyymmdd">VENC_CHEQUE</field>
<!-- Tipo de movimento sao: -->
<!-- "I"=incluir cheque;"B"=baixar cheque;"E"=baixar cheque -->
<!-- que terah novo cheque incluido na sequencia; -->
<!-- "C"=consultar cheque -->
<!-- como defensive programing -->
<field description="Tipo de movimento: I/B/E/C" type="String" format="">TIPO_MOV</field>
</entrada>
|
- Exception‘
Bloco de código | ||
---|---|---|
| ||
throw new LayoutException("Erro preenchendo HashMap " + this.toString());
|
Bloco de código | ||
---|---|---|
| ||
Curiosidade: o CMC7 é composto pelas seguintes sequências:
a) código de compensação do banco
b) número da agência bancária
c) dígito módulo 10 dos campos
d) código da câmera de compensação
e) número do cheque
f) código de tipicação do documento (5, 6, 7 e 8)
g) digito módulo 10 dos campos banco e agência
h) número da conta corrente i) dígito módulo 10 do campo conta |
Dica |
---|
'Contador’ – sempre existe um atributo no XML nomeado ’counter’ como indexador dos registros |