quarta-feira, 24 de novembro de 2010

ISO8583py - Utilizando Python para o tratamento de mensagens ISO8583

Introdução

ISO8583 é um padrão de mensagens em formato ASCII para ser utilizado na troca de informações financeiras, como entre aqueles terminais de cartão de crédito e as operadoras.

As mensagens são formadas por 3 partes:
  • Message Type Indication: Tipo indicativo da mensagem, por exemplo 0800 (Network Management Request), para indicar transações de teste de canal (Echo), abertura de comunicação etc;
  • Bitmap: O mapa de bits que a indicação de quais bits estão ativos e consequentemente presentes no pacote;
  • Bits: informações efetivamente.

A seguir temos um exemplo de uma mensagem ISO8583 do tipo 0800 (MTI):

Bits setados:
  • Bit 3 conteúdo 300000
  • Bit 24 conteúdo 045
  • Bit 41 conteúdo 11111111
  • Bit 42 conteúdo 222222222222222
  • Bit 63 conteúdo This is a Test Message

Assim, a mensagem final, com todos os campos e o bitmap seria:08002000010000c0000230000004511111111222222222222222022This is a Test Message

Quebrando a mensagem, verifica-se:
  • MTI: 0800
  • Bitmap: 2000010000c00002
  • Dados: 30000004511111111222222222222222022This is a Test Message

Segundo o padrão, cada um dos bits deve ter um tamanho/tipo específico, possuindo também um nome que define sua finalidade.

Maiores informações sobre ISO8583, MTI, mapa de bits e os bits, podem ser visto na Wikipedia do ISO8583.

ISO8583py

A biblioteca IS8583py é feita inteiramente em Python e está licenciada segundo a GPL V.3 com suporte ao processamento das mensagens ISO8583.

O site do projeto é: ISO8583 Python Library

Neste site é possível:
  • Fazer download da biblioteca
  • Ter acesso à documentação
  • Ter acesso ao código fonte
  • Ter acesso a exemplos de utilização

Download e instalação

O download da versão 1.0 da biblioteca pode ser feita através do link:ISO8583 Module-1.0.zip

A instalação é bem simples:
  • Fazer download do arquivo .zip;
  • Descompactar o arquivo;
  • Acessar o diretório descompactado;
  • Executar o comando: python setup.py install

Ao descompactar o arquivo, pode-se observar as seguintes pastas:
  • ISO8583: com as classes da biblioteca
  • examples: com diversos exemplos de uso
  • doc: com o PyDoc das classes

Estrutura da biblioteca e documentação

A biblioteca ISO8583py está organizada basicamente em duas partes:
  • Classe ISO8583: Efetivamente o objeto que trata as mensagens;
  • Classes de Erros: Classes que representam os erros possíveis durante o tratamento da mensagem.

Maiores informações sobre estas classes e métodos podem ser obtidas através:

Exemplo - Uso básico

Para ilustrar um exemplo básico, com a criação de uma mensagem ISO8583 com esta biblioteca, vamos retomar o exemplo.

Mensagem de Echo:
  • MTI: 0800
  • Bit 3 conteúdo 300000
  • Bit 24 conteúdo 045
  • Bit 41 conteúdo 11111111
  • Bit 42 conteúdo 222222222222222
  • Bit 63 conteúdo This is a Test Message

Para efetivamente usar a biblioteca, necessitamos realizar os "imports" iniciais:

from ISO8583.ISO8583 import ISO8583
from ISO8583.ISOErrors import *

Com estas duas linhas, estamos preparados para trabalhar com os pacotes ISO8583 diretamente.

Agora a criação da mensagem:

iso = ISO8583()
iso.setMTI('0800')
iso.setBit(3,'300000')
iso.setBit(24,'045')
iso.setBit(41,'11111111')
iso.setBit(42,'222222222222222')
iso.setBit(63,'This is a Test Message')

Simples, como Python.

Caso queira obter o ASCII que representa o pacote, basta chamar o método showRawIso(). Por exemplo, iso.showRawIso() irá resultar em:

08002000010000c0000230000004511111111222222222222222022This is a Test Message

Caso queira obter os valores dos bits da mensagem, utiliza-se o método showIsoBits(). Por exemplo, iso.showIsoBits() irá resultar em:

Bit[3] of type N has limit 6 = 300000
Bit[24] of type N has limit 3 = 045
Bit[41] of type N has limit 8 = 11111111
Bit[42] of type A has limit 15 = 222222222222222
Bit[63] of type LLL has limit 999 = 022This is a Test Message

Já se quiser ter maior controle sobre o que quer do pacote, pode-se utilizar o método getBitsAndValues(), que retorna um vetor com as informações:
  • Tipo
  • Número do bit
  • Conteúdo

Por exemplo:

vet = iso.getBitsAndValues()
for v in vet:
print 'Bit %s of type %s has value = %s' % (v['bit'],v['type'],v['value'])

Irá resultar em:

Bit 3 of type N has value = 300000
Bit 24 of type N has value = 045
Bit 41 of type N has value = 11111111
Bit 42 of type A has value = 222222222222222
Bit 63 of type LLL has value = 022This is a Test Message

Exemplo - Uso avançado

Para quem quiser ter uma visão mais geral da biblioteca em uma aplicação ciente/servidor, pode acessar o código de exemplo de uma aplicação de Echo, que utiliza o pacote de exemplo.

Este exemplo completo, bem como outros, presentes tanto no diretório "examples" quanto na página de exemplos do iso8583py.

Conclusão

A ISO8583py é um biblioteca capaz de nos fornecer uma abstração adequada para o processamento simples de mensagens no formato ISO8583 em Python.

Fácil de instalar e repleta de documentação pode ser utilizada sem grandes mistérios.

0 comentários:

Postar um comentário

 
Design by Eddy Oliveira