32
novembro 2010

The Club - megazine · novembro 2010 03 Delphi InfoNews Certificação Digital para CT-e17 Autor: Victory Fernandes Desafio The Club - Dicas Delphi 28 Dicas - Cruzada 30 Delphi

  • Upload
    docong

  • View
    224

  • Download
    6

Embed Size (px)

Citation preview

novembro 2010

novembro 2010

novembro 2010 03

Delphi

InfoNews

Certificação Digital para CT-e

17Autor: Victory Fernandes

Desafio The Club

- Dicas Delphi

28Dicas

- Cruzada

30

Delphi

.NETDelphi

índiceUtilizando FinalBuilder com o novo Delphi XE

Editorial

08Em setembro último, tivemos o lança-

mento da nova suíte RAD da Embarcade-ro, o RAD Studio XE. Claro que a Embar-cadero... 04

Delphi Conference 2010

05Métodos de Criptografia

12Boletos e cartões na Web

20

LegendaInicianteIntermediárioAvançado

Autor:Antonio Spitaleri

Autor: Bruno AlcarásAutor: Luciano Pimenta

Autor: Vitor M. Rodrigues

novembro 201004

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Antonio Spitaleri Neto - Editor [email protected]

Em setembro último, tivemos o lançamento da nova suíte RAD da Embarcadero, o RAD Studio XE. Claro que a Embarcadero, como já se tornou tradição, promoveu um evento para divulgar e mostrar as novidades dessa nova suíte. Trata-se do Delphi Conference, que esse ano ocorreu no dia 26 de outubro.

Nós do The Club estivemos presentes e para relatar como foi o evento, Vitor Manuel Rodrigues traz na abertura da revista uma matéria especial mostrando tudo o que foi abordado, as palestras, mini-cursos, enfim uma geral nesse grande evento.

Na sequência, para seguirmos com o foco no Delphi XE, trago para vocês o artigo “Utilizando Final Builder com o novo Delphi XE”, que mostra mais uma das ferramentas agregadas ao novo Delphi para produzir maior agili-dade ao desenvolvimento.

Com o crescimento do mercado de TI, a segurança de dados tem sido cada vez mais um motivo de preocupação dos desenvolvedores. Para ajudar quem necessita implementar proteção em seus sistemas, nosso consultor Bruno Alcarás traz o artigo “Métodos de Criptografia”, onde nos mostra as formas de criptografia de dados mais utilizadas atualmente.

Este mês temos a volta de nosso colaborador Victory Fernandes na reedição do artigo “Certificação Digital para CT-e”, essa reedição prepara o terreno para as matérias que virão sobre esse assunto tão importante atualmente.

Para fechar, nosso colaborador Luciano Pimenta, mostra como gerar boletos bancários e trabalhar com pagamento via cartão de crédito em ASP.NET no artigo “Boletos e cartões na Web”.

Gostaria de reiterar em nome de toda a equipe The Club os parabéns ao pessoal da Embarcadero pelo grande profissionalismo na criação e condução do Delphi Conference 2010.

Boa leitura a todos e até dezembro!

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3

www.twitter.com/theclubbr

Copyright The Club Megazine 2009

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoTassiane Fileto

ColunistasAntonio Spitaleri Neto

Bruno AlcarásFelipe SantosLeonora Golin

Luciano PimentaVitor M. Rodrigues

Impressão e acabamento:GRIL - Gráfica e Editora

Taquarituba-SP - Tel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

novembro 2010 05

InfoNews

Estive presente junto com a equipe do “The Club”, no dia 26 de outubro no “Delphi Conference 2010” que aconte-ceu em São Paulo para a apresentação do “Delphi XE”.

Mais de 600 convidados puderam conhecer em 4 salas simultâneas todas as melhorias e novi-dades do Delphi e da família RAD Studio XE. Para esse evento foi escalado um time de primeira para as palestras.

Logo na abertura David I falou sobre novas plataformas e o futuro do Delphi. Ele fez uma demonstração de um aplicativo feito em “Delphi

novembro 201006

XE” rodando na nuvem e disponibilizou para os participantes acessarem durante a palestra. Isso só pra “assanhar a lombriga” da galera em relação ao poder do Delphi XE.

Na “bota” Andreano Lanusse mostrou todas as novidades do Delphi XE deixando os participantes maravilhados com tantas possibilidades.

Ao mesmo tempo na sala 1 Kelver Merlotti falava sobre Threads e DataSnap, na sala 2 Dario Leandro com a palestra “Quando se tem um mar-

Com a introdução das conferências realizada por David I e com a participação de muitos desenvolvedo-res, entre eles, Andreano Lanusse, Daniele Teti, Wescley Fey, Kelver Merlotti e Felipe Santos, em quatro salas simultâneas, sendo no auditório, a nota de abertura do evento e encerramento, porém tivemos na sala 1, ministrada por Felipe Santos, a apresentação do novo InterBase XE, que vêm além, com novos parâmetros de segurança que aumentam a proteção do banco, ainda conta com a heterogenei-

dade, ou seja, uma licença já basta para cada plataforma, além das melhorias de gerenciamento e confiabilidade das principais linguagens de banco de dados, que se dispõem, sendo possível o gerenciamento de múltiplas linguagens de SGBD para uma mesma aplicação de forma mais controlada, não necessitando mais da alternação de ferramentas para cada linguagem, e por fim, a compatibilidade com a ferramenta ToolCloud, que gerencia a execução de todas as licenças sem a necessidade de instalação nas máquinas locais, gerando uma redução do tempo na autenticação o uso e a realocação dessas licenças, do tempo de uso de múltiplas ferramentas Desktop, e a redução nos custos de implementação. E ainda foram abordadas dentro da conferencia ao decorrer das conferencias temas atuais, como o desenvolvimento para aplicativos para iPhone, o desenvolvimento para Cloud Computing da Platafoma Windows® Azure™ e a Amazon EC2, pioneiras no desenvolvimento maciço para as nuvens, além do preview do Delphi XE para MacOS X em sua versão 64 bits.

Eduardo Massud

Samuel “Muka” David deu o minicurso sobre criação de compo-nentes visuais. Demonstrou a facilidade de desenvolvimento de componentes personalizados que podem ser instalados na paleta de componentes da IDE, utilizando TGraphicControl, TCustomControl e TScrolling Win Control. Uma dica é usar o

Wizard que já traz o Register. Outra é usar um package para compartilha-mento de funcionalidades e para armazenar e instalar os componentes criados, pois o componente só pode ser instalado se estiver dentro de um package. E várias outras.

É uma pena que não sejam disponibilizados na web.

Leonora Golin

Andreano Lanusse

Eduardo Massud, Antonio Spitaleri, Felipe Santos e Vitor

novembro 2010 07

telo nem tudo se torna prego, prazer sou MVC” e na sala 3 Newton Oliveira tirou a dúvida de muitos com “Implementando Nota Fiscal de serviço com Delphi XE”.

Foi árdua a tarefa de decidir a qual palestra assistir no decorrer do dia.

Felipe Santos destrinchou o InterBase XE com a palestra “Uma nova era do InterBase começa aqui”. Em uma conversa que tive com o Felipe ele adiantou que baseado nessa palestra teremos uma sequência de artigos publicados aqui na The Club Megazine. A primeira dessa sequência já está nesta edição.

Ponto positivo para os intervalos entre as pa-lestras onde os participantes puderam aproveitar para trocar experiências e conhecer outros usuários do Delphi.

Parabéns á todos que colaboraram na organi-zação do Delphi Conference 2010. A cada ano vocês estão se superando na realização dos eventos.

Um agradecimento especial a Lisa Flores, Andreano Lanusse, David I e Ernani Augusto que sempre nos recebem muito bem nos eventos da Embarcadero.

Por hora é só!Até a próxima!

Daniele Teti veio da Itália para nos mostrar um pouco sobre a tecnologia Android e como podemos fazer aplicações Android “conversar” com servidores DataSnap.

Android é uma tecnologia para desenvolvimento de aplicações e também atua como sistema operacional

para plataformas móveis, como celulares e smartphones. Android como sistema operacional é baseado em Linux e a parte de Framework possui funcionalidades semelhantes ao Java, rodando baseado em máquina virtual.

Com a possibilidade oferecida pela tecnologia DataSnap de criarmos interfaces REST, podemos criar clientes Android que acessam servidores DataSnap REST.

Antonio Spitaleri

Vitor, David I, Lisa Flores e Marcos

David I e Marcos

novembro 201008

Delphi

No último mês de setembro tivemos o lançamento da nova versão das ferramentas RAD Studio da Embarcadero. Essa nova versão recebeu o nome de RAD Studio XE.

Na suíte RAD Studio XE estão inclusos o Delphi XE, C++ Builder XE, Delphi Prism XE e RAD PHP XE. Ao contrário das últimas versões que recebiam o número do ano, como RAD Studio 2009 e 2010, neste ano a Embarcadero resolveu apostar em uma nova nomenclatura.

Desde seu lançamento, em 1994, a fer-ramenta Delphi sempre teve como principal foco a produtividade, focando na automati-zação de tarefas repetitivas que consomem tempo precioso do desenvolvimento.

A nova versão do Delphi, incluída na suíte RAD Studio, mantém esse foco na agilidade no

Ut il i zando FinalBuilder com o novo Delphi XE

desenvolvimento. Agilizar o desenvolvimento passa pela automatização de processos repe-titivos no build de projetos e análise de pontos no código que podem causar lentidão.

A agilidade no desenvolvimento tem como objetivo reduzir o tempo com planeja-mento e análise e permitir que os programa-dores Delphi possam investir maior tempo na construção dos projetos.

Além disso, a parte de diagramação dos projetos também recebeu grande foco por parte da Embarcadero. A geração de diagramas de classe e demais partes do projeto agora está com maior integração na IDE Delphi.

A parte de agilização do desenvolvi-mento conta com ferramentas que já são

consagradas nessa área. Essas ferramentas integradas a IDE realizam as tarefas de au-tomação de build, profiling de performance entre outras.

Nessa nova versão do Delphi, temos as seguintes ferramentas integradas na IDE:

- AQ Time;- Code Site Preview;- Collab Net Subversion;- Final Builder.

Finalbuilder é a ferramenta destinada a automação do processo de build. Finalbuilder já vem sendo utilizada há algum tempo por programadores Delphi de todo o mundo, e agora está integrada ao novo Delphi.

Nesse artigo estarei mostrando a inte-gração da ferramenta FinalBuilder com o novo Delphi XE.

novembro 2010 09

FinalBuilder

No dia a dia do desenvolvimento em Delphi, uma das tarefas mais importantes é o build, a cons-trução do aplicativo a partir do código escrito.

Várias ações que realizamos no build, quando estamos em projetos extensos acabam por se tornar repetitivas.

É para essas situações que o Final Builder foi integrado com a IDE Delphi. O Final Builder é uma ferramenta que permite ao desenvolvedor planejar, depurar manter e executar o processo de build. Isso traz inúmeras vantagens ao desenvolvedor, que passa a usufruir de maior tempo para a codi-ficação do projeto.

Ao instalar o Delphi XE, será instalada também a ferramenta Final Builder. Abra a mesma a partir do menu iniciar.

Na janela principal do Final Builder crie um novo projeto.

Será exibida a seguinte tela:

Veja a imagem 1 Veja que do lado esquerdo temos uma lista

das ações que irão acontecer quando o projeto for executado, falhar, etc.

Além disso, no Final Builder é possível a defi-nição de variáveis para o projeto.

Clique na aba actions e em seguida na pasta Compilers, localizada no lado esquerdo da tela. Serão exibidas algumas opções:

Veja a imagem 2.

Veja que temos opção de trabalhar com infor-mações de Assembly de um projeto e builds para Delphi Win32, inclusos várias versões do Delphi. Temos a opção de Build para o C++ e ainda para arquivos de recurso e Chrome Project.

Selecione “Build Delphi Win32 Project”. Será exibida a tela a seguir:

Veja a imagem 3.

Nessa tela iremos carregar o projeto Delphi a

Imagem 1.

Imagem 2.

novembro 201010

ser automatizado e definir várias opções, entre elas comentários, opções do compilador, arquivos de recursos, opções do linker, entre outras.

Após carregar o projeto, clique na aba Run e execute a aplicação. Se tudo estiver correto, será apresentada uma mensagem de sucesso. Do contrário, será mostrada a mensagem de erro, e caberá ao desenvolvedor corrigir o erro para seguir adiante.

Nessa parte de correção dos erros é que a integração com a IDE Delphi se mostra essencial, já que não precisamos de várias ferramentas externas de debugger para realizar a tarefa, já que o próprio debugger Delphi é utilizado.

Vamos definir uma nova ação no build.

Clique na aba Projects e em Variables crie uma nova variável com o nome de SpaceBegin.

Clique na aba actions e selecione a pasta Disk Management. Nessa parte definiremos variáveis que mostrarão o espaço em disco antes e depois do build.

Selecione GetDiskFreeSpace. Será exibida a janela a seguir:

Veja a imagem 4.

Em “Read into Variable” selecione a variável SpaceBegin definida anteriormente.

Ainda na janela Actions altere a ordem de ocor-rência da ação de GetDiskFreeSpace que definimos agora. Coloque ela antes do build.

Salve e execute o projeto. Veja que foi exibida a quantidade em disco livre antes do build. Para complementar essa funcionalidade, podemos de-finir uma outra variável com o nome de SpaceEnd e colocar a ação para essa variável após o build. Dessa forma teremos a quantidade de espaço livre em disco antes e depois o build.

Mostrar o espaço em disco livre antes e depois do build é importante para termos controle do nível de consumo de recursos do projeto. E essa é apenas uma das tarefas que podem ser automatizadas utilizando-se o FinalBuilder.

Imagem 3.

Imagem 4.

novembro 2010 11

Conclusão

Com as ferramentas integradas a IDE em sua versão XE, Delphi dá mais um passo para tornar o desenvolvimento de aplicações uma tarefa mais tranquila.

A automatização de builds propiciada pelo FinalBuilder torna processos repetitivos que tem de ser feitos na montagem do projeto mais práticos e agrega ganho de tempo para o desenvolvedor.

Espero eu tenham gostado e aguardem as próximas novidades do Delphi XE!

Referência:Andreano Lanusse Blog: http://www.andrea-

nolanusse.com/blogpt/

Consultor Técnico The Club.

Sobre o autor

Antonio Spitaleri Neto

[email protected]

novembro 201012

A criptografia é o estudo de técnicas para transformação de informações legíveis para formas ilegíveis, dificultando assim sua leitura por pessoas que não sejam o receptor destinado aquela mensagem que tem o co-nhecimento do “segredo” dessa criptografia. Os dados digitais, que são a maioria nos dias atuais, são criptografados se embaralhando os bits através de algoritmos a partir de uma determinada chave ou par de chaves.

Um pouco de história...

A primeira mensagem criptografada (ou cifra-da, termo que era usado antes) data de 1900 AC quando um escriba egípcio enviou uma mensagem contendo hieróglifos fora de padrão para confundir possíveis receptores, séculos mais tarde surgiu uma das mais famosas técnicas de criptografia, a “Cifra de César”, essa técnica consistia na substituição de letras, cada letra era substituída se avançando três casas no alfabeto (veja figura 1), essa técnica nos dias de hoje pode ser considerada muito simples

M e t o d o s d e Criptografia

e de fácil reversão, mas contam as histórias, foi responsável por enganar inúmeros inimigos do Império Romano até ser descoberta.

Veja a Imagem 1.

Agora uma função em Delphi que gera a “Cifra de Cesar”:

function CifraDeCesar(Mensagem: String): String;var i: integer; letra: char; final: String;

Imagem 1 – Cifra de César

novembro 2010 13

begin final:= ‘’; for i:= 0 to length(Mensagem) do begin if (Mensagem[i] >= ‘A’) and (Mensagem[i] <= ‘Z’) then final:= final + chr((ord(mensagem[i]) - ord(‘A’) + 3) mod 26 + ord(‘A’)) else final:= final + Mensagem[i]; end; Delete(final,1,1); Result:= final;end;

A mensagem nessa função deve ser escrita toda com letras maiúsculas, por exemplo, se en-trássemos com a mensagem:

THE CLUB – O MAIOR CLUBE DE PROGRAMADORES DO BRASIL

O retorno seria o seguinte:

WKH FOXE - R PDLRU FOXEH GH SURJUDPDGRUHV GR EUDVLO

Na idade moderna destacam-se os estudos de Arthur Scherbius que criou a primeira “máquina” de criptografia, essa máquina tinha o nome de Enigma e foi amplamente usada pela marinha ale-mã durante a guerra como sua principal forma de comunicação. Em 1928 surgiu uma “evolução” do antigo Enigma, a Enigma G que garantia a segurança das mensagens com a troca mensal da Chave Crip-tográfica. As máquinas Enigma reinaram por vários anos transmitindo mensagens indecifráveis pelos Aliados, até que, após o roubo de uma máquina Enigma surgiu a Colussus, fruto do estudo e de engenharia reversa da máquina Enigma roubada. A princípio a Colussus serviu com uma máquina de decriptação das mensagens alemãs, mas depois acabou se tornando uma máquina de envio de mensagens criptografadas assim como o Enigma.

Existem atualmente diversos tipos de cripto-grafia, como por exemplo: Chave Simétrica, Chave Assimétrica, Hash e a atualmente em desenvolvi-mento Criptografia Quântica. Seu maior uso atual se dá na Web em segurança a fim de autenticar usuários para fornecer o acesso, na proteção de transações financeiras e em comunicação.

Chave Criptográfica

A chave criptográfica é um valor secreto que altera o algorítmico de encriptação. Uma analogia para se entender a chave criptográfica é a seguinte: pense na fechadura de sua porta, ela contém múlti-plos pinos, quando você põe a chave na fechadura e a gira, essa chave gira esses pinos para as posições de acordo com a chave, se as posições para quais são movidos esses pinos forem às posições corretas a porta se abrirá.

Objetivos

São quatro os objetivos principais da cripto-grafia:

1. Confidencialidade – só o destinatário da mensagem deve ser capaz de extrair o conteúdo da mensagem;

2. Integridade – o destinatário deve ser capaz de perceber se a mensagem foi alterada durante a transmissão;

3. Autenticação – o destinatário deve ser capaz de saber quem lhe enviou a mensagem;

4. Não repúdio – o emissor não deve ser capaz de negar a autoria da mensagem.

Métodos

Criptografia Assimétrica

A criptografia assimétrica é também conhecida como criptografia de chave pública e se utiliza de duas chaves, a pública e a privada que são matema-ticamente relacionadas. Enquanto a chave pública pode ser livremente distribuída, a chave privada deve ser mantida no mais absoluto segredo pelo seu dono. A transmissão de uma mensagem utili-zando esse tipo de criptografia ocorre da seguinte forma: o emissor, se utilizando da chave pública, criptografa a mensagem e a envia, qualquer pessoa que porventura capturar essa mensagem durante esse envio não será capaz de saber seu conteúdo, pois para trazer essa mensagem a sua forma origi-nal deverá ser usada a chave privada, o contrário também é possível, ou seja, criptografar com a cha-ve privada e volta-la ao original com a chave públi-ca. Esse tipo de criptografia atende dois dos quatro objetivos da criptografia, a confidencialidade(só o dono da chave privada poderá saber o conteúdo da mensagem) e a autenticidade(só o criador das chaves pode codificar a mensagem que foi decifra-da com a chave pública).

Em 1977 três amigos desenvolveram o al-goritmo assimétrico denominado RSA (RSA faz referência ao sobrenome deles). O algoritmo RSA é a base, atualmente, da maioria das aplicações que utilizam criptografia assimétrica. O tamanho desta chave varia entre 512 a 2048bits.

Imagem 2 – Alice criptografa a mensagem se utilizando da chave pública

novembro 201014

Veja a Imagem 3.

O processo para criptografar com a chave privada e decifrar com a pública ocorre de forma semelhante.

Criptografia Simétrica

A criptografia simétrica se utiliza de chaves criptográficas relacionadas para as operações de criptografia ou descriptografia. As chaves podem ser idênticas ou não. Essas chaves funcionam como um segredo partilhado por duas ou mais pessoas e são usadas para manter um canal de comunicação entre elas. Essas chaves devem ser conhecidas apenas pelos envolvidos no processo da troca de mensagens.

Elas são divididas entre algoritmos de cifras de fluxo (os bits da mensagem são cifrados um a um) ou por bloco (são cifrados blocos de bits, em geral 64). Os algoritmos mais famosos que se utilizam da criptografia simétrica são: AES, Blowfish, RC4, entre outros.

Na comparação de velocidade entre os algo-ritmos de criptografia assimétrica e algoritmos de criptografia simétrica, esses últimos levam grande vantagem por necessitarem de muito menos ca-pacidade computacional do que os assimétricos. Uma chave assimétrica de qualidade é centenas ou milhares de vezes mais lentas do que uma chave simétrica.

Veja a imagem4.

Resumo Criptográfico (Hash)

A palavra Hash quer dizer: picar, misturar, con-fundir, uma informação passada por esse método criptográfico ganha uma espécie de assinatura di-gital, na teoria um grande número de informações são transformadas em um pequeno número de in-formações. O retorno criptografado desse método busca ser exclusivo, embora isso não seja possível, pois pelo tamanho limitado da sequência pode ser que dados diferentes retornem valores iguais. Uma das características mais interessantes desse méto-do é que é inviável fazer uma informação gerada

Imagem 3 – Beto, o possuidor da chave privada, decifra a mensagem.

Imagem 4

por ele voltar ao seu valor original, ou seja, depois de criptografada essa informação jamais voltará ao seu estado original. Os principais métodos de hash são: MD5, SHA1, WHIRPOOL, entre outros. O MD5 é muito usado em sites da web e no Linux para pro-teger dados de usuário, no momento do login, por exemplo, o valor digitado no campo senha passa pelo método MD5 e é comparado com o valor no banco de dados, já criptografado com o método, se eles forem iguais é liberada a entrada no site. Na imagem vemos um exemplo de função hash que, por exemplo, através de um nome retornaria um valor integer, podemos perceber que esse algorit-mo não gerou valores iguais para nomes diferentes, apesar de serem poucos dados testados podemos afirmar que ele é um bom método hash.

Algumas funções de criptografia em Delphi.

As funções aqui apresentadas são destinadas a criptografar strings:

1-

Imagem 5

novembro 2010 15

function TForm1.Crypt(Action, Src: String): String;Label Fim;var KeyLen : Integer; KeyPos : Integer; OffSet : Integer; Dest, Key : String; SrcPos : Integer; SrcAsc : Integer; TmpSrcAsc : Integer; Range : Integer;begin if (Src = ‘’) Then begin Result:= ‘’; Goto Fim; end; Key :=‘YUQL23KL23DF90WI5E1JA S467NMCXXL6JAOAUWWM CL0AOMM4A4VZYW9K HJUI2347EJHJKDF3424SKL K3LAKDJSL9RTIKJ’; Dest := ‘’; KeyLen := Length(Key); KeyPos := 0; SrcPos := 0; SrcAsc := 0; Range := 256; if (Action = UpperCase(‘C’)) then begin Randomize; OffSet := Random(Range); Dest := Format(‘%1.2x’,[OffSet]); for SrcPos := 1 to Length(Src) do begin Application.ProcessMessages; SrcAsc := (Ord(Src[SrcPos]) + OffSet) Mod 255; if KeyPos < KeyLen then KeyPos := KeyPos + 1 else KeyPos := 1; SrcAsc := SrcAsc Xor Ord(Key[KeyPos]); Dest := Dest + Format(‘%1.2x’,[SrcAsc]); OffSet := SrcAsc; end; end

Else if (Action = UpperCase(‘D’)) then begin OffSet := StrToInt(‘$’+ copy(Src,1,2)); SrcPos := 3; repeat SrcAsc := StrToInt(‘$’+ copy(Src,SrcPos,2)); if (KeyPos < KeyLen) Then KeyPos := KeyPos + 1 else KeyPos := 1; TmpSrcAsc := SrcAsc Xor Ord(Key[KeyPos]); if TmpSrcAsc <= OffSet then TmpSrcAsc := 255 + TmpSrcAsc - OffSet else TmpSrcAsc := TmpSrcAsc - OffSet; Dest := Dest + Chr(TmpSrcAsc); OffSet := SrcAsc; SrcPos := SrcPos + 2; until (SrcPos >= Length(Src)); end; Result:= Dest; Fim:

Para usar essa função o procedimento é o seguinte: Crypt(‘C’,Edit1.Text), para criptografar e Crypt(‘D’,Edit1.Text) para descriptografar.

2-

function EncryptSTR(const InString: string; StartKey, MultKey, AddKey: Integer): string;var I : Byte;begin Result := ‘’; for I := 1 to Length(InString) do begin Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8)); StartKey := (Byte(Result[I]) + StartKey) * MultKey +

AddKey; end;end;

function DecryptSTR(const InString: string; StartKey, MultKey, AddKey: Integer): string;var I : Byte;begin Result := ‘’; for I := 1 to Length(InString) do begin Result := Result + CHAR(Byte(InString[I]) xor (StartKey shr 8)); StartKey := (Byte(InString[I]) + StartKey) * MultKey + AddKey; end;end;

Nessas funções informam-se a string e três valores inteiros que funcionarão como “Chaves Criptográficas”, exemplo:

EncryptSTR(Edit1.Text,48,27,2);

Para reverter à criptografia passam-se os mesmos valores:

DecryptSTR(Edit1.Text,48,27,2);

3-

function Cript(mCad, mOp : string):string;var i, ate, x1, x2 : integer; r1, r2 : string[1];begin if Odd(Length(mCad))

novembro 201016

then mCad := mCad + ‘ ‘; ate := Length(mCad) div 2; for i := 1 to ate do begin x1 := ord(mCad[((i-1) * 2) + 1]);

x2 :=

ord(mCad[((i-1) * 2) +

2]);

if mOp = ‘DESCRIPT’

then

begin

r2 := chr((-x2 +

x1 + 90) div 2);

r1 := chr(x1 -

((-x2 + x1 + 90) div 2));

end

else

begin

r2 := chr(x1 +

90 - x2);

r1 := chr( x1 +

x2);

end;

result := result +

r1 + r2;

if

Result[Length(Result)]=’ ‘

then

Delete(Result,

Length(Result), 1);

end;

end;

Essa função se utiliza do embaralhamento das letras, seu uso ocorre da seguinte forma:

Cript(Edit1.Text,’CRIPT’);

Para descriptografar:

Cript(Edit1.

Text,’DESCRIPT’);

Conclusão

A proteção dos dados é uma coisa muito im-portante nos dias atuais, esses diversos métodos buscam fazer isso da melhor maneira possível. Exis-tem ainda muitos outros métodos que não foram

citados nesse artigo, e os aqui citados foram apenas vagamente. Esse é um assunto muito interessante que com certeza merece um melhor estudo.

E isso é tudo pessoal, até outra hora!

Consultor Técnico The Club.

Sobre o autor

Bruno Alcarás

[email protected]

novembro 2010 17

Atualmente tenho sido cobrado por todos os lados a respeito de soluções para Conhecimento de Transporte Eletrônico (CT-e). Os clientes precisam adequar seus sistemas, a empresa precisa fornecer solu-ção imediata, os leitores querem saber mais sobre o tema.

O CT-e é um documento emitido e armazenado eletronicamente, com validade jurídica garantida por processo de assinatura digital. Este novo modelo de documento fiscal eletrônico, instituído pelo AJUSTE SINIEF 09/07 (25/10/2007), pode ser utilizado para substituir um dos seguintes docu-mentos fiscais:

• Conhecimento de Transporte Rodoviá-rio de Cargas, modelo 8;

• Conhecimento de Transporte Aquaviá-rio de Cargas, modelo 9;

• Conhecimento Aéreo, modelo 10;

• Conhecimento de Transporte Ferroviá-rio de Cargas, modelo 11;

• Nota Fiscal de Serviço de Transporte Ferroviário de Cargas, modelo 27;

Certificação Digital para CT-e

Abordagem prática CertiSign

• Nota Fiscal de Serviço de Transporte, modelo 7, quando utilizada em transporte de cargas.

O CTe é parte integrante do sistema público de escrituração digital, cuja documentação completa encontra-se disponível em http://www1.receita.fazenda.gov.br/, juntamente com demais itens que tem ocupado e muito os desenvolvedores em todo o Brasil, tais como SPEDContábil, SPEDFiscal, NFe e NFSe.

O principal objetivo da implantação desta nova modalidade de conhecimento de transporte é o acompanhamento em tempo real das operações de transporte pelo Fisco e a substituição do modelo atual de emissão de documentos fiscais em papel, de forma a simplificar uma série de obrigações do contribuinte. Maiores informações podem ser obtidas através do portal nacional de Cte no am-biente de produção em http://www.cte.fazenda.gov.br, ou do portal nacional de Cte ambiente de homologação (versão de testes de CTe para clientes que ainda não estão emitindo Cte) em http://hom.cte.fazenda.gov.br/.

Nesta série de artigos abordaremos os inú-

meros conceitos envolvidos no desenvolvimento e implantação de soluções para CT-e. Neste artigo, no entanto, daremos foco ao processo de assinatura digital de CT-e emitidas, utilizando certificados emi-tidos pela empresa certificadora CertSign (www.

certisign.com.br).

Descrição Simplificada do Processo

De maneira simplificada o modelo operacional do CT-e pode ser assim descrito:

1. A empresa emissora do CT-e gera um arquivo eletrônico contendo as informações fiscais da operação comercial em questão.

a. O arquivo eletrônico tem extensão .XML (Extensible Markup Language) e deve ser gerado conforme padrão pré-estabelecido vigente.

b. Este documento eletrônico contém informações equivalentes às informações contidas no modelo atual de notas fiscais em papel.

2. O documento do CT-e emitido deve ser assinado digitalmente, de maneira a garantir a integridade dos dados, a autoria do emissor e a validade jurídica do documento.

a. O processo de assinatura digital deve ser feito utilizando-se certificado digital tipo A1 ou A3 emitido por autoridade certificadora cre-denciada pela Infra-estrutura de Chaves Públicas Brasileira – ICP-Brasil (www.icpbrasil.gov.br).

b. Neste artigo foram utilizados certi-

Reedição da matéria publicada na “The Club - Megazine” de Maio de 2010 edição 188

novembro 201018

ficados emitidos pela empresa CertSign (www.certisign.com.br), devidamente credenciada no ICP-Brasil.

c. A escolha do fornecedor do certificado abordado neste artigo se deu primeiramente pela CertSign ser devidamente certificada no ICP-Brasil e também pelo fato de ser uma das empresas líderes deste mercado e dispor de Autoridade de Registro (AR) sediada em nossa cidade, Salvador – Ba. No entanto sinta-se o leitor livre para escolher entre qualquer uma das empresas disponíveis no merca-do, todas elas dispõem de processos semelhantes aos apresentados e toda a teoria mostrada no que tange o CT-e continua sendo válida.

3. O arquivo deve então ser transmitido, via Internet, para a Secretaria da Fazenda do Estado (SEFAZ) onde reside o contribuinte emissor.

4. Após receber o arquivo, a SEFAZ realiza um processo de pré-validação e devolve uma Auto-rização de Uso, permitindo com isso o trânsito da mercadoria e a continuação da transação comer-cial.

5. Para acompanhar o trânsito da merca-doria o sistema deve imprimir, em papel comum, geralmente em única via, uma representação gráfica simplificada da CT-e, chamada de DANFE (Documento Auxiliar do Conhecimento de Trans-porte Eletrônico)

a. O DACTE deve conter impressa uma chave de acesso que possibilita a consulta do CT-e na internet, de forma que qualquer pessoa possa confirmar as informações impressas com as infor-mações contidas no site da SEFAZ.

b. O DACTE não é uma nota fiscal, nem a substitui, servindo apenas como instrumento auxiliar para consulta da CT-e na internet.

2. Os clientes iniciam o teste dos seus sistemas através do modo de homologação, onde é possível testar e validar livremente o sistema de software sem que os testes tenham valor fiscal. Uma vez validado o sistema o cliente solicita o acesso ao ambiente de produção e estará livre para emitir o conhecimento de transporte sob a forma eletrônica.

Atualmente, conforme consta no FAQ disponí-vel no portal da CT-e, a estratégia de implantação nacional é voluntária, onde as empresas, indepen-dente do porte, por livre e espontânea vontade se interessam em adotar e emitir Conhecimento de Transporte Eletrônico. Diferentemente da NFe, o processo de CTe ainda é facultativo, e mesmo após o início das operações em modo de produção é possível emitir Cte no padrão antigo.

Certificados Digitais

Os certificados digitais são documentos eletrô-nicos que identificam pessoas físicas ou jurídicas e através do uso de criptografia asseguram a confia-bilidade, privacidade, integridade, inviolabilidade e autenticidade de informações de transações realizadas via Internet.

O processo de assinatura digital utilizando certificados digitais nas operações via Internet tem validade jurídica para ser utilizado como assinatura de próprio punho, comprovando que seu proprietá-rio concorda com o documento assinado.

Os tipos mais comuns de certificados digitais são:

• Certificados tipo A3 oferecem maior segurança, já que seu certificado é gerado, arma-zenado e processado em cartão inteligente (Smar-tCard) ou token (espécie de hardlock para conexão na porta USB), que permanece assim inviolável e único. Apenas o detentor da senha de acesso, criada no momento da validação, pode utilizar a chave privada. O certificado digital tipo A3 possui validade de 3 anos.

• Certificados tipo A1 são gerados e armazenados no computador pessoal do usuário, não sendo necessário o uso de cartões inteligentes ou tokens. Os dados podem ser protegidos por uma senha de acesso, criada pelo usuário. Somente com esta senha é possível acessar, mover e copiar sua chave privada. Por medida de segurança, recomenda-se que um único computador arma-zene o par de chaves tipo A1 e apenas uma cópia de segurança seja criada. A validade deste tipo de certificado é de 01(um) ano, contado a partir de sua data de emissão.

A escolha do tipo de certificado a ser utilizado no desenvolvimento da sua aplicação depende muito das suas necessidades e possibilidades financeiras.

Os certificados tipo A1 são mais baratos, no entanto são menos flexíveis, pois estão instalados em uma única máquina, têm prazo de validade reduzido e são considerados menos seguros.

Os certificados tipo A3 do tipo SmartCard têm um custo intermediário, mas num primeiro momento, dependem da aquisição de um leitor de cartão que deve estar instalado na máquina onde o cartão será utilizado. A vantagem, no entanto é que, após o prazo de 3 anos da compra do primeiro cartão, não será necessário adquirir novo leitor de cartão, o que torna o custo a longo prazo mais interessante.

Os certificados tipo A3 do tipo token USB têm maior flexibilidade quando comparados aos outros formatos pois depende apenas da disponibilidade de uma porta USB na máquina onde o mesmo será utilizado, facilitando e muito o processo de desen-volvimento. O custo, no entanto, é o mais elevado tendo em vista que o prazo de validade é o mesmo quando comparado ao modelo SmartCard.

Existem diversas certificadoras oferencendo produtos e serviços de assinatura digital, dentro as quais é possível destacar a Certisign (www.certsign.com.br) Serasa (www.serara.com.br). Acessando o site da CertSign no link específico de certificados digitais para emissão de CT-e, temos acesso aos seguintes custos, por tipo de certificado, conforme mostrado na Figura 03.

Segundo informações do suporte online da Certisign e resultados de testes executados, caso o usuário já possua um certificado emitido para fins de assinatura e transmissão de NFe, não é preciso adquirir novo certificado.

Sendo assim, para o desenvolvimento do proje-to de CT-e, optou-se pelo certificado tipo A3, token USB, adquirido previamente para o projeto de NF-e devido à sua flexibilidade e praticidade, principal-mente considerando o ambiente de desenvolvi-mento do projeto realizado vários desenvolvedores diferentes e o processo de atendimento na sede do cliente quando utilizamos notebooks.

O processo de aquisição foi feito através do site da CertSign com pagamento em 2 vezes via cartão de crédito. Para a geração da chave, a cer-tificadora exige documentação da empresa e de um dos sócios e a entrega da mesma foi realizada somente com a presença física do mesmo na sede da representante, aqui em nossa cidade (Salvador - Bahia), a Autoridade de Registro (AR) de nome Dossier Digital (www.dossierdigital.com.br).

Todo o processo de pagamento, entrega de documentação e aquisição da chave foi realizado em 2 dias úteis.

Uma vez com o certificado em mãos, é possí-vel realizar a instalação do CD que acompanha o mesmo, através de wizard de instalação.

Concluída a instalação, reinicia-se o computa-dor, e sempre, ao conectar o token na porta USB, é apresentada a mensagem, indicando a correta detecção do dispositivo por parte do sistema operacional.

O processo de instalação cria duas pastas no

menu Iniciar do Windows que dão acesso princi-palmente à documentação de ajuda e ao aplicativo eToken Properties.

O aplicativo eToken Properties permite a visu-

alização das informações armazenadas no token, bem como diversas características do mesmo.

Clicando no botão “etoken PRO” do lado esquerdo da tela e depois clicando no botão “Ad-vanced”, é solicitada uma senha para acesso às configurações avançadas do token.

No momento da aquisição do token, uma senha de acesso ao mesmo deve ser fornecida, e é muito importante ressaltar que a certificadora informa que, caso a senha seja digitada incorre-tamente por 10 vezes consecutivas, todo o conte-údo do token é apagado e perdido, inutilizando o mesmo para qualquer tipo de aplicação e sendo necessária a aquisição de novo certificado frente à certificadora.

Então, muita atenção, não erre a senha por 10 vezes consecutivas!

Na paleta “Certificate & Keys” pode-se visua-lizar todos os certificados armazenados no token e que serão utilizados para assinar digitalmente os documentos de CT-e emitidos.

novembro 2010 19

Professor do Departamento de Engenharia da UNIFACS, Engenheiro Mestrando em Redes de Computadores, e desenvolvedor sócio da TKS Soft-ware - Soluções de Automação e Softwares Dedicados. Pode ser contatado em [email protected], ou através dos sites www.igara.com.br – www.igara.com.br/victory

Sobre o autor

Victory Fernandes

[email protected]

Para testar o seu certificado acesse o link ht-tps://nfe.prefeitura.sp.gov.br/Loginicp.aspx

Se o certificado estiver instalado corretamen-te, após selecionar o certificado e digitar a senha surgirá uma seguinte mensagem.

Gerando uma CT-e para testes de assinatura

Para testar a assinatura digital em um CT-e de teste, utilizamos o aplicativo disponibilizado no site http://www.igara.com.br/produto.php?cod_produto=116. O aplicativo é um demo desenvolvido em Delphi, totalmente funcional que permite a geração de CT-e a partir de informações digitadas pelo usuário em campos de texto que seguem o layout específico vigente.

Após abrir o aplicativo, clicamos no botão “Novo CT-e” e depois no botão “Salvar CT-e”. Por fim selecionamos o diretório onde desejamos sal-var o arquivo .xml gerado. O aplicativo sugere um nome para o arquivo gerado e este nome não deve ser alterado, pois segue padrão de nomenclatura específico exigido com base no conteúdo da CT-e em questão.

O arquivo gerado pode ser visualizado no Internet Explorer ou em qualquer outro browser de internet com suporte a XML.

Neste artigo não entraremos em detalhes sobre o processo de geração da CT-e, pois este será o tema do próximo artigo.

Até o momento, o arquivo gerado não tem valor jurídico, pois ainda não foi assinado de forma que o emissor possa certificar a validade das infor-mações fornecidas, bem como não há nada que garanta que este documento não foi alterado por terceiros sem o conhecimento prévio do emitente. Para tanto é preciso assinar este documento e para isso vamos utilizar o aplicativo de assinatura de Notas Fiscais Eletrônicas (NF-e) disponibilizado para download gratuito no portal oficial em http://www.nfe.fazenda.gov.br/portal/assinador.aspx.

Apesar do aplicativo sugerido ter a nomencla-tura referente a assinatura de NFe ele é genérico e 100% funcional para assinatura de CT-e, desde que seu diretório de Schema seja devidamente confi-gurado com o Schema vigente de CT-e disponível no portal nacional do projeto no link de download dos Schemas XML http://www.cte.fazenda.gov.br//schemas.aspx

Após fazer o download e instalação do aplica-tivo siga os seguintes passos:

• Menu> Tarefas> Configura Diretório de Entrada. Selecione esta opção para indicar o diretório onde estão localizadas as NF-e que você deseja assinar.

• Menu> Tarefas> Configura Diretório de Saída. Selecione esta opção para indicar o diretório onde serão armazenadas as NF-e assinadas.

• Menu> Tarefas> Configura Diretório

de Schemas. Selecione esta opção para indicar o diretório onde se encontram armazenados os schemas que determinam o layout vigente da CT-e. O download do schema vigentes pode ser feito no portal e deve-se operar sempre com o layout mais novo.

Uma vez configurados os diretórios, antes de realizar o processo de assinatura, faz-se necessário selecionar qual certificado será usado no processo. Para isso acesse a opção Menu> Tarefas> Seleciona Certificado e selecione o certificado contido no token.

Clicando no botão “Mostrar o Certificado” é possível visualizar informações detalhadas do mesmo através do visualizador de certificados padrão do Windows.

Uma vez realizados corretamente todo o processos de configuração, estamos prontos para assinar nosso primeiro CT-e. Visualizamos no grid do lado esquerdo todas os arquivos de CT-e disponí-veis a serem assinadas. Marcando o check-box dos CT-e desejados, basta então clicar na opção Menu> Tarefas> Efetuar Assinatura XML, para que todos os CT-e selecionadas sejam devidamente assinados, utilizando o certificado selecionado.

A CT-e assinado será armazenada no diretório indicado anteriormente e é possível visualizá-lo no grid do lado direito do aplicativo.

A diferença entre o arquivo não assinado e o arquivo assinado digitalmente estará no conteúdo das últimas chaves do arquivo XML em questão, que anteriormente estavam sem preenchimento, e após a assinatura terão um conteúdo.

Após o processo de assinatura, os campos de DigestValue, SignatureValue e X509Certificate passaram a conter dados criptografados que iden-tificam unicamente o arquivo .xml em questão e atestam que o mesmo foi assinado somente por pessoa detentora do token.

Neste momento fica claro que o token, por ter validade jurídica para assinatura de documen-tos, deve ser manipulado somente por pessoas devidamente autorizadas. Portanto, todo cuidado é pouco!

Para validar o arquivo gerado o primeiro passo é acessar o do validador online de CTe no site da SEFAZ-RS em http://www.sefaz.rs.gov.br/CTE/

CTE-VAL.aspx

O validador online é extremamente útil para auxiliar na localização de erros na sintaxe e con-teúdo dos arquivos XML gerados. Para utiliza-lo é preciso abrir o arquivo XML de Cte assinado no Bloco de Notas do Windows e copiar todo o conteúdo do arquivo. Se você copiar o conteúdo do browser a informação copiada apresentará problemas no validador por incluir caracteres de controle como sinais de + e – bem como quebras de linha e etc.

Depois basta colar o conteúdo copiado no campo do validador e pressionar o botão “Vali-dar”. O validador irá processar o arquivo XML em questão e apresentará a lista de erros e problemas encontrados.

A partir deste ponto basta corrigir cada um dos problemas que eventualmente possam ser apresentados, tomando com base as instruções detalhadas de cada campo apresentadas no manual de integração de CTe disponível para download em http://www.cte.fazenda.gov.br//integracao.aspx, até que o sistema apresenta a mensagem “Assina-tura Válida”, informando que o arquivo de Cte está válido, tanto em forma quanto em conteúdo.

Pronto! O arquivo de CT-e está pronto para ser transmitido! Mas, por enquanto, é só, pois o pro-cesso de envio da CT-e será tema de outros artigos que virão. Continue acompanhando a coluna que em breve teremos mais artigos sobre o tema.

Conclusão

Com este artigo abordamos conceitos gerais de certificação digital e assinatura digital no que tange o conchecimento de transporte eletrônico e vimos como é fácil emitir e assinar tais documentos. O CT-e já é uma realidade, e muito em breve as empresas adotarão este novo formato.

Mostramos como fazer a assinatura usando como exemplo o certificado digital emitido pela empresa CertSign. No entanto, apesar das infor-mações apresentadas sobre certificados digitais envolverem dados específicos do fabricante, os conceitos abordados são semelhantes indepen-dente da certificadora escolhida. Sendo assim, o conhecimento adquirido é de grande utilidade na implementação da comunicação com outras marcas e modelos.

novembro 201020

O ASP.NET proporciona uma produti-vidade muito grande, comparado a outras tecnologias para desenvolvimento Web. Mas existem situações que devemos recorrer a terceiros para implementar alguma funcio-nalidade.

Imagine que sua aplicação e-commerce tenha a opção para os usuários realizarem o pagamento das compras via cartão de crédito ou transferência eletrônica. Implementar uma solução desse porte, com certeza é muito trabalhoso.

Mas, como diz o filósofo: “para tudo na vida existe uma solução”, e ela se chama CobreBemX. Essa ferramenta proporciona um ganho de produtividade com a geração de boletos na Web de forma rápida e eficaz, alterando-se algumas propriedades.

Contamos também com a cobrança via cartão de crédito, onde o desenvolvedor terá

Boletos e cartão na Web

em sua aplicação uma funcionalidade neces-sária atualmente para sites de e-commerce.

Baixando o CobreBemX

Podemos utilizar uma versão de avaliação da ferramenta no site, onde temos apenas duas restrições: a data de vencimento é fixa e o valor cobrado no boleto é R$ 1,90.

Baixe essa versão em: www.cobrebem.com/downloads/cbx/InstalarCobreBemX.zip e des-compacte o arquivo. Clique em Instalar.exe para registrar a DLL. O controle é um componente COM/DCOM e não podemos instalar no IDE do Visual Studio.

Devemos gerar um arquivo, que será a licença de teste e o tipo de cobrança do boleto. Acesse o endereço www.cobrebem.com/cgi-bin/GeraAr-quivoLicencaTeste, escolha o banco e em Carteira, escolha uma cobrança simples (Figura 1). Clique em Gerar Arquivo e salve o arquivo.

Veja a figura 1.

Criando a aplicação ASP.NET

Para dar mais realismo ao nosso exemplo, criei um exemplo de loja virtual, utilizando o banco de dados Northwind do SQL Server. Como a criação da loja, foge ao escopo do artigo, a mesma esta disponível para download.

Nota: Para aprender a construir uma loja virtual, indico meu treinamento mul-timídia onde é mostrado como criar uma aplicação e-commerce com o Visual Web Developer. Para saber mais, acesse www.lucianopimenta.net.

Abra o Visual Studio 2010 e crie uma nova aplicação Web, dando o nome de “boletosweb”. Vamos adicionar a referencia do componente, através do menu Website>Add Reference. Clique

novembro 2010 21

na aba COM e escolha CobreBemX Library. No using adicione CobreBemX.

Existem algumas configurações e arquivos a serem baixados para gerar corretamente os boletos. Acesse o endereço www.cobrebem.com/downloads/cbx/ImagensBoleto.zip para baixar as imagens do boleto, onde as mesmas devem ser descompactadas na pasta da aplicação, dentro de uma pasta que daremos o nome de “imagens”.

Não altere o nome das imagens, pois elas serão usadas para informações do boleto e no código de barras. Coloque na pasta da aplicação o arquivo de licença gerado anteriormente no site. Voltando a aplicação, criei uma página com as informações dos produtos (tabela Products) em um GridView que possui um link que redireciona para uma página onde contém todos os dados do respectivo produto e com a opção de comprar o mesmo (Figura 2).

Veja a Figura 2.

Nessa página temos um botão para comprar o produto e redirecionar para o carrinho de compras (Figura 3).

Veja a Figura 3.

O botão Continuar Comprando, volta para a página inicial, enquanto o Finalizar redireciona para a página (Figura 4) onde o usuário escolherá o tipo de pagamento (boleto ou cartão).

Figura 4. Página para finalizar compras na loja virtual

Gerando o boleto

Para gerar o boleto, vamos criar um WebForm com o nome de “boleto.aspx” e adicionar no evento Load o código da Listagem 1.

Figura 1. Gerando o arquivo de licença de teste e o tipo de carteira

Figura 2. Página com a opção de compra do produto

Figura 3. Carrinho de compras da aplicação

novembro 201022

Listagem 1. Gerando o boleto bancário na aplicação ASP.NET

DataSet ds = Session[“venda”] as DataSet;//Cria a instância do CobreBemXCobreBemX.ContaCorrenteClass aCobreBemX = new CobreBemX.ContaCorrenteClass();

//Indica o arquivo de teste gerado no site, //precisa ser o caminho completoaCobreBemX.ArquivoLicenca = Server.MapPath(“001-16.conf”);

//Dados da conta correnteaCobreBemX.CodigoAgencia = “1234-5”;aCobreBemX.NumeroContaCorrente = “00000123-X”;aCobreBemX.CodigoCedente = “123456”;aCobreBemX.OutroDadoConfiguracao1 = “019”;aCobreBemX.InicioNossoNumero = “00001”;aCobreBemX.FimNossoNumero = “99999”;aCobreBemX.ProximoNossoNumero = “00015”;

//logotipo da empresaaCobreBemX.PadroesBoleto.PadroesBoletoEmail.URLLogotipo = “/imagens/logoboleto.gif”;//pasta das imagens do boletoaCobreBemX.PadroesBoleto.PadroesBoletoEmail.URLImagensCodigoBarras = “/imagens/”;

//Documento de cobrança

CobreBemX.IDocumentoCobranca aBoleto = aCobreBemX.DocumentosCobranca.Add;//Dados do sacadoaBoleto.NomeSacado = “Luciano Almeida Pimenta”;//Para Pessoa Juridica, utilize a property CNPJSacadoaBoleto.CPFSacado = “111.111.111-11”;

aBoleto.EnderecoSacado = “Rua do Sacado”;aBoleto.BairroSacado = “Bairro do Sacado”;aBoleto.CidadeSacado = “Cidade do Sacado”;aBoleto.EstadoSacado = “SP”;aBoleto.CepSacado = “01001-001”;

//Dados do documento de cobrançaaBoleto.DataDocumento = DateTime.Now.ToShortDateString();

//Data de Vencimento aBoleto.DataVencimento = DateTime.Now.AddDays(3).ToShortDateString();aBoleto.NumeroDocumento = “12345”;aBoleto.ValorDocumento = Convert.ToDouble(ds.Tables[0].Rows[0][“TOTAL”]);aBoleto.PadroesBoleto.Demonstrativo = “Referente a compras no Site<br><b>”+ “O melhor site da Internet</b>”;aBoleto.PadroesBoleto.InstrucoesCaixa = “<br><br>Juros de 5% ao mês e multa de R$ 0,10 ao dia”;

//Gera o boleto Response.Write(aCobreBemX.get_GeraHTMLBoleto(0));aCobreBemX = null;

O código tem comentários para indicar as propriedades que configuramos. Primeiramente, eu recupero de uma variável de sessão um DataSet com informações da venda (que é salva quando finalizamos a compra no carrinho). Claro, que em uma aplicação real, esses dados estariam no banco de dados e bastaria consultar os mesmos.

No código, criamos uma instancia de Cobre-BemX.ContaCorrenteClass, passemos o arquivo de licença gerado no site. Após, informamos os dados da conta corrente e o caminho do logotipo e imagens do boleto.

Em seguida, configuramos as informações do cliente (nome, endereço etc), dados esses facil-mente conseguidos com uma consulta ao banco do usuário logado na aplicação. Por fim, temos a data do documento, vencimento, número, valor (no DataSet em sessão) e informações gerais que podemos colocar no boleto. Para gerar o boleto, basta usar o código:

Response.Write(aCobreBemX.get_GeraHTMLBoleto(0));

Simples e rápido. Execute a aplicação e veja o boleto bancário sendo gerado (Figura 5 e 6).

Veja a figura 5. Veja a figura 6.

Nota: Para esse artigo, foi gentilmente fornecida uma licença do componente, então os valores mostrados no boleto são os valores reais da aplicação.

Com pouco mais de 30 linhas de código, foi gerado um boleto bancário em uma aplicação ASP.NET.

Enviando o boleto por e-mail

E se o usuário desejar que o boleto seja envia-do por e-mail? O CobreBemX tem essa funcionali-dade e também é muito fácil de ser implementada. Adicione o método da Listagem 2 na aplicação.

novembro 2010 23

Figura 5. Parte superior do boleto bancário com o logotipo da empresa

Figura 6. Parte inferior do boleto bancário com informações de cobrança

Listagem 2. Enviando o boleto por e-mail

private void EnviaBoleto(CobreBemX.ContaCorrenteClass aCobreBem, CobreBemX.IDocumentoCobranca aBoleto){ //configurações do servidor SMTP aCobreBem.PadroesBoleto.PadroesBoletoEmail.SMTP.Servidor = “servidor de e-mail”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.SMTP.Porta = 25; aCobreBem.PadroesBoleto.PadroesBoletoEmail.SMTP.Usuario = “nome do usuário”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.SMTP.Senha = “senha”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.URLImagensCodigoBarras = “/imagens/”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.URLLogotipo = “/images/logoboleto.gif”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.PadroesEmail.Assunto = “Boleto de cobrança”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.PadroesEmail.EmailFrom.Endereco = “[email protected]”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.

PadroesEmail.EmailFrom.Nome = “Nome do cliente”; aCobreBem.PadroesBoleto.PadroesBoletoEmail.PadroesEmail.FormaEnvio = FormaEnvioEmailEnum.feeSMTPBoletoHTML;

aBoleto.EnderecosEmailSacado.Add.Nome = “Nome do cliente”; aBoleto.EnderecosEmailSacado.Add.Endereco = “[email protected]”; aBoleto.ControleProcessamento

novembro 201024

Documento.EnviaEmail = StatusControleProcessamento Enum.scpExecutar; //envia o e-mail aCobreBem.EnviaBoletosPorEmail();}

Os dados referentes a e-mail e nome do clien-te, podem ser conseguidos no banco de dados da sua aplicação. Altere o código do evento Load, chamado o método da listagem anterior, após a geração do boleto.

Execute novamente a aplicação, para gerar o boleto e enviar o mesmo por e-mail. Claro, que você pode mudar a página finalizar.aspx para que o usuário escolha (com um CheckBox) se deseja receber o boleto por e-mail.

Nota: Em uma aplicação real mais infor-mações deveriam estar presentes no boleto, como dados do sacado (endereço, CPF etc).

Cobrança com cartão de crédito

Vamos implementar agora a funcionalidade do pagamento das compras do cliente na loja virtual, utilizando cartão de crédito. Vamos criar uma página para informar o resultado da consulta, se aprovado ou não.

Crie um novo WebForm com o nome de “status.aspx”. No Load adicione o código da Lis-tagem 3.

Listagem 3. Verificando se a consulta foi apro-vada para pagamento da compra

string aprovado = Request.

QueryString[“status”].

ToString();

if (aprovado == “T”)

{

Response.Write(“Cartão

<b> Aprovado!</b><br>

Obrigado por comprar na

The Club!”);

Response.Write(

“<br><br><b>Comprovante:</

b>”);

Response.Write(

“<br>” + Request.

QueryString[“comprovante”

].ToString());

}

else

{

Response.Write(“Cartão

<b> não </b> foi

aprovado”);

Response.

Write(“<br><b>Motivo:</

b>”);

Response.

Write(“<br>” + Request.

QueryString[“motivo”].

ToString());

}

O arquivo CONF gerado anteriormente pode ser usado para a cobrança de cartão de crédito, mas a consulta de cartão quase sempre retorna como não aprovado (claro, que estamos trabalhando com

testes e o mesmo é feito em ordem aleatória).

Você pode baixar o AprovaFácil (outra solução para venda com cartão de crédito) e usar o carta-oteste.conf presente no arquivo zipado, bastando colocá-lo no diretório do projeto. Crie uma nova página (chamada “cartao.aspx”), onde criaremos o layout para que o usuário possa preencher as informações do cartão a ser consultado.

Adicione alguns Labels, TextBoxes e um botão. Configure os componentes conforme a Figura 7.

Nota: Essa página é chamada na escolha do usuário por pagamento com cartão de crédito, após finalizar as compras.

Veja a figura 7.

Adicione no using novamente o namespace do CobreBemX. No botão adicione o código da Listagem 4.

Listagem 4. Solicitando a confirmação da compra com o cartão de crédito

CobreBemX.

ContaCorrenteClass

aCobreBem = new CobreBemX.

ContaCorrenteClass();

Figura 7. Formulário para solicitação de compra com o cartão de crédito

novembro 2010 25

//arquivo de licença

gerado no site

aCobreBem.

ArquivoLicencaCartoes

Credito = Server.MapPath(

“cartaoteste.conf”);

//moacTeste = Teste,

//moacSimulacao =

Simulação,

//moacProducao = Produção

aCobreBem.

PadroesAprovacaoCartoes.

ModoOperacao =

ModoOperacaoAprovacao

CartaoEnum.moacTeste;

aCobreBem.

DocumentosCobranca.

Clear();

//dados do cartão de

crédito

CobreBemX.

IDocumentoCobranca

aCartao = aCobreBem.

DocumentosCobranca.Add;

aCartao.CartaoCredito.

Numero = TextBox1.Text;

aCartao.CartaoCredito.

MesValidade = Convert.

ToInt32(TextBox2.Text);

aCartao.CartaoCredito.

AnoValidade = Convert.

ToInt32(TextBox3.Text);

aCartao.ValorDocumento =

1.99;

aCartao.CartaoCredito.

CodigoSeguranca =

TextBox4.Text;

aCartao.CartaoCredito.

QuantidadeParcelas =

Convert.ToInt32(TextBox5.

Text);

//Solicita a aprovação do

cartão

if (aCobreBem.get_

SolicitaAprovacaoCartao(0))

{

//solicitação aprovada

aCobreBem.Confirma

AprovacoesCartoes();

Response.

Redirect(“status.

aspx?status=T&comprovante=”

+ Cartao.CartaoCredito.

Comprovante

Administradora);

}

else

{

//cartão reprovado

Response.

Redirect(“status.

aspx?status=F&motivo=”+

aCartao.CartaoCredito.

ResultadoSolicitacao

Aprovacao);

}

aCobreBem.

DocumentosCobranca.

Clear();

aCobreBem = null;

Rode a aplicação, adicione as informações do cartão e veja o resultado (Figura 8).

Veja a figura 8.

Note que temos um “modo de operação” que pode ser Teste, Simulação ou Produção, sendo que podemos testar a vontade usando o moacTeste. Os dados do cartão mostrados na Figura anterior são de testes.

Figura 8. Solicitando a aprovação do cartão de crédito

novembro 201026

O funcionamento é bastante semelhan-te ao do boleto, onde inicializamos as variá-veis, configuramos as propriedades. Através do get_SolicitaAprovacaoCartao(0) verificamos se a consulta foi aprovada, assim podemos realizar o que precisamos.

É interessante guardar o comprovante (pro-priedade ComprovanteAdministradora), salvando-o em uma tabela do banco, caso necessite consultar, posteriormente essa informação.

64 Bits

Se você estiver usando um SO de 64bits, terá de configurar o Application pool do IIS para aceitar aplicativos 32 bits. Acesse o IIS e na opção Pools de Aplicativos, escolha o item responsável pelo Application pool da sua aplicação. Va até a opção Configurações Avançadas e no item Habilitar Apli-cativos de 32 bits altere para True (Figura 9).

Veja a figura 9.

Conclusão

Vimos neste artigo, a solução CobreBemX, que gera boletos bancários e cobrança de cartão de crédito em aplicações ASP.NET, trazendo grande produtividade. No site do fabricante existem exem-plos em outras linguagens e muita documentação sobre o produto.

Um grande abraço a todos e até a próxima!

É Técnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicações Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4ª edição da Borland Conference (BorCon).

Autor de mais de 60 artigos e de mais de 300 vídeos aulas publicadas em revistas e sites especializados. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados. É desenvolvedor da Paradigma Web Bussi-ness em Florianópolis-SC.

Sobre o autor

Luciano Pimenta

www.lucianopimenta.net

Figura 9. Propriedade a ser modificada no aplication pool

novembro 2010 27

novembro 201028

Dicas DELPHI

RAVE REPORT – CARREGANDO IMAGENS DINAMICA-MENTE

Para manipular um relatório Rave via programação:

1) Abra um novo projeto.

2) Adicione à cláusula uses as seguintes units:

RpBase, RpCon, RpConDS, RpDefine,

RpDevice, RpRave, RpSystem,

RvClass, RvCsData, RvCsDraw,

RvCsStd, RvCsRpt, RvData, RvDefine,

RvDirectDataView, RvUtil;

3) Adicione um Button. No evento OnClick insira o código abaixo:

Begin

RvProject1.Execute;

End.

4) Adicione um componente RvProject, da guia Rave. Dê dois cliques para abrir o Rave.

5) Adicione um componente retângulo da guia Standard.

Configure sua propriedade height para 1,1.Configure sua propriedade widht para 3,1.

6) Adicione um componente BMP da guia Standard. Clicando na pro-priedade Image abre a caixa Bitmap Selector para buscar a imagem no arquivo desejado.

Insira a imagem e configure as propriedades para altura (height) = 1 e largura (widht) = 3.

7) Selecione ambos os componentes (retângulo e imagem), clique com o lado direito e escolha Align/HorizontalCenters e depois, clique de novo

e escolha Align/VerticalCenters.

8) Salve na mesma pasta em que salvou o projeto.dpr.

9) Volte ao form do Delphi. Clique no RvProject1 e, no Object Inpector, propriedade Project File, associe ao projeto o arquivo Rave anteriormente criado.

10) SE A SUA IMAGEM NÃO ESTIVER SALVA NUM BANCO DE DADOS:

11) No evento OnAfterOpen, do RvProject1, insira o código abaixo:

var

B: TRaveBitmap;

C: TRaveRectangle;

P: TRavePage;

begin

P := RvProject1.ProjMan.

FindRaveComponent(‘Report1.Page1’,

nil) as TRavePage;

B := RvProject1.ProjMan.

FindRaveComponent(‘Bitmap1’, P) as

TRaveBitmap;

C := RvProject1.ProjMan.

FindRaveComponent(‘Rectangle1’, P)

as TRaveRectangle;

if B <> Nil and C <> Nil

then

begin

B.FileLink := ‘D:\new_logo_the_

club.bmp’;

B.Height := 3,0;

B.Widht := 6,0;

C.Height :=3,1;

C.Widht := 6,1;

C.FillColor := clInactiveCaption;

end;

12) SE A SUA IMAGEM ESTÁ SALVA NUM BANCO DE DADOS:

novembro 2010 29

13) Insira o código abaixo, no evento OnGetRow, do RvDataSetConnec-tion:

varB: TRaveBitmap;C: TRaveRectangle;P: TRavePage;beginP := RvProject1.ProjMan.FindRaveComponent(‘Report1.Page1’, nil) as TRavePage;B := RvProject1.ProjMan.FindRaveComponent(‘Bitmap1’, P) as TRaveBitmap;C := RvProject1.ProjMan.FindRaveComponent(‘Rectangle1’, P) as TRaveRectangle;if B <> Nil and C <> Nil thenbegin B.FileLink := ‘D:\new_logo_the_club.bmp’;B.Height := 3,0;B.Widht := 6,0;C.Height :=3,1;C.Widht := 6,1;C.FillColor := clInactiveCaption;Connection.DoGetRow;end;

14) Compile e rode.

15) Clique Ok.

novembro 201030

novembro 2010

novembro 2010