novembro 2010
novembro 2010
índice
Editorial
InfoNews
04
Em setembro último, tivemos o lançamento da nova suíte
RAD da Embarcadero, o RAD Studio XE.
Claro que a Embarcadero...
Delphi
05
Utilizando FinalBuilder com o novo
Delphi XE
Autor: Vitor M.
Rodrigues
Autor:Antonio Spitaleri
.NET
17
Métodos de Criptografia
Certificação Digital para CT-e
Autor: Bruno Alcarás
Autor: Victory Fernandes
Dicas
- Dicas Delphi
08
Delphi Conference 2010
Delphi
12
Delphi
20
Boletos e cartões na Web
Autor: Luciano Pimenta
Desafio The Club
28
- Cruzada
30
Legenda
Iniciante
Intermediário
Avançado
novembro 2010
03
Bem-vindo
E
m 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 agilidade 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.
Av. Profº Celso Ferreira da Silva, 190
Jd. Europa - Avaré - SP - CEP 18.707-150
Informações: (14) 3732-1529
Suporte: (14) 3733-1588
Internet
http://www.theclub.com.br
Cadastro: [email protected]
Suporte: [email protected]
Informações: [email protected]
Skype Cadastro: theclub_cadastro
Skype Suporte: theclub_linha1
theclub_linha2
theclub_linha3
www.twitter.com/theclubbr
Copyright The Club Megazine 2009
Diretor Técnico
Marcos César Silva
Diagramação e Arte
Vitor M. Rodrigues
Revisão
Tassiane Fileto
Colunistas
Antonio Spitaleri Neto
Bruno Alcarás
Felipe Santos
Leonora Golin
Luciano Pimenta
Vitor M. Rodrigues
Impressão e acabamento:
GRIL - Gráfica e Editora
Taquarituba-SP - Tel. (14) 3762-1345
Reprodução
A 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.
Boa leitura a todos e até dezembro!
Antonio Spitaleri Neto - Editor Chefe
[email protected]
04
novembro 2010
Delphi é marca registrada da Borland International,
as demais marcas citadas são registradas
pelos seus respectivos proprietários.
InfoNews
E
stive presente junto com a equipe do
“The Club”, no dia 26 de outubro no
“Delphi Conference 2010” que aconteceu 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 novidades 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 2010
05
C
om a introdução das conferências realizada por David I e com a participação de muitos desenvolvedores, 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 heterogeneidade, 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
Eduardo Massud, Antonio Spitaleri, Felipe Santos e Vitor
Andreano Lanusse
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 mar06
novembro 2010
S
amuel “Muka” David deu o minicurso sobre criação de componentes 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 compartilhamento 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
D
David I e Marcos
aniele 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
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 palestras onde os participantes puderam aproveitar
para trocar experiências e conhecer outros usuários
do Delphi.
Parabéns á todos que colaboraram na organizaçã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.
Vitor, David I, Lisa Flores e Marcos
Por hora é só!
Até a próxima!
novembro 2010
07
Delphi
Utilizando
FinalBuilder
com o novo
Delphi XE
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.
desenvolvimento. Agilizar o desenvolvimento
passa pela automatização de processos repetitivos no build de projetos e análise de pontos
no código que podem causar lentidão.
consagradas nessa área. Essas ferramentas
integradas a IDE realizam as tarefas de automação de build, profiling de performance
entre outras.
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.
A agilidade no desenvolvimento tem
como objetivo reduzir o tempo com planejamento e análise e permitir que os programadores Delphi possam investir maior tempo na
construção dos projetos.
Nessa nova versão do Delphi, temos as
seguintes ferramentas integradas na IDE:
- AQ Time;
- Code Site Preview;
- Collab Net Subversion;
- Final Builder.
Desde seu lançamento, em 1994, a ferramenta Delphi sempre teve como principal
foco a produtividade, focando na automatização de tarefas repetitivas que consomem
tempo precioso do desenvolvimento.
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.
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.
A nova versão do Delphi, incluída na suíte
RAD Studio, mantém esse foco na agilidade no
A parte de agilização do desenvolvimento conta com ferramentas que já são
08
novembro 2010
Nesse artigo estarei mostrando a integração da ferramenta FinalBuilder com o
novo Delphi XE.
FinalBuilder
No dia a dia do desenvolvimento em Delphi,
uma das tarefas mais importantes é o build, a construçã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 codificação do projeto.
Ao instalar o Delphi XE, será instalada também
a ferramenta Final Builder. Abra a mesma a partir
do menu iniciar.
Imagem 1.
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 definiçã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 informaçõ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 2.
novembro 2010
09
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.
Imagem 3.
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 ocorrê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 definir 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 4.
10
novembro 2010
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.
Sobre o autor
Antonio Spitaleri Neto
Consultor Técnico The Club.
Espero eu tenham gostado e aguardem as
próximas novidades do Delphi XE!
[email protected]
Referência:
Andreano Lanusse Blog: http://www.andreanolanusse.com/blogpt/
novembro 2010
11
Metodos de
Criptografia
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 conhecimento 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.
Imagem 1 – Cifra de César
Um pouco de história...
A primeira mensagem criptografada (ou cifrada, 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
12
novembro 2010
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;
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 entrá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 alemã 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 Criptográ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 criptografia, como por exemplo: Chave Simétrica, Chave
Assimétrica, Hash e a atualmente em desenvolvimento 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últiplos 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 criptografia:
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 matematicamente 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 utilizando 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 original deverá ser usada a chave privada, o contrário
também é possível, ou seja, criptografar com a chave privada e volta-la ao original com a chave pública. 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 decifrada com a chave pública).
Em 1977 três amigos desenvolveram o algoritmo 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 2010
13
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.
Imagem 3 – Beto, o possuidor da chave privada, decifra a mensagem.
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 algoritmos de criptografia assimétrica e algoritmos de
criptografia simétrica, esses últimos levam grande
vantagem por necessitarem de muito menos capacidade 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, confundir, uma informação passada por esse método
criptográfico ganha uma espécie de assinatura digital, na teoria um grande número de informações
são transformadas em um pequeno número de informaçõ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étodo é que é inviável fazer uma informação gerada
14
novembro 2010
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 proteger 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 algoritmo não gerou valores iguais para nomes diferentes,
apesar de serem poucos dados testados podemos
afirmar que ele é um bom método hash.
Imagem 5
Algumas funções de criptografia em
Delphi.
As funções aqui apresentadas são destinadas
a criptografar strings:
1-
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 2010
15
then mCad := mCad + ‘ ‘;
ate := Length(mCad) div
2;
for i := 1 to ate do
begin
x1 :=
ord(mCad[((i-1) * 2) +
1]);
Conclusão
A proteção dos dados é uma coisa muito importante nos dias atuais, esses diversos métodos
buscam fazer isso da melhor maneira possível. Existem 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!
x2 :=
ord(mCad[((i-1) * 2) +
2]);
if mOp = ‘DESCRIPT’
then
Sobre o autor
begin
r2 := chr((-x2 +
x1 + 90) div 2);
r1 := chr(x1 -
Bruno Alcarás
Consultor Técnico The Club.
((-x2 + x1 + 90) div 2));
end
else
[email protected]
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’);
16
novembro 2010
Certificação Digital para CT-e
Abordagem prática CertiSign
Reedição da matéria publicada na “The Club - Megazine” de Maio de 2010 edição 188
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 documentos 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;
•
Nota Fiscal de Serviço de Transporte,
modelo 7, quando utilizada em transporte de
cargas.
certisign.com.br).
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.
De maneira simplificada o modelo operacional
do CT-e pode ser assim descrito:
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 ambiente 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 emitidos pela empresa certificadora CertSign (www.
Descrição Simplificada do Processo
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 credenciada pela Infra-estrutura de Chaves Públicas
Brasileira – ICP-Brasil (www.icpbrasil.gov.br).
b.
Neste artigo foram utilizados certinovembro 2010
17
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 mercado, 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 Autorização de Uso, permitindo com isso o trânsito da
mercadoria e a continuação da transação comercial.
5. Para acompanhar o trânsito da mercadoria 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 Transporte 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 informaçõ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, independente 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 confiabilidade, privacidade, integridade, inviolabilidade
e autenticidade de informações de transações
realizadas via Internet.
18
novembro 2010
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.
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.
Os tipos mais comuns de certificados digitais
Sendo assim, para o desenvolvimento do projeto de CT-e, optou-se pelo certificado tipo A3, token
USB, adquirido previamente para o projeto de NF-e
devido à sua flexibilidade e praticidade, principalmente considerando o ambiente de desenvolvimento do projeto realizado vários desenvolvedores
diferentes e o processo de atendimento na sede do
cliente quando utilizamos notebooks.
são:
•
Certificados tipo A3 oferecem maior
segurança, já que seu certificado é gerado, armazenado e processado em cartão inteligente (SmartCard) 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 armazene 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 desenvolvimento. 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.
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 certificadora 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 computador, 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 principalmente à documentação de ajuda e ao aplicativo
eToken Properties.
O aplicativo eToken Properties permite a visualizaçã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 “Advanced”, é 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 incorretamente 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 visualizar todos os certificados armazenados no token
e que serão utilizados para assinar digitalmente os
documentos de CT-e emitidos.
Para testar o seu certificado acesse o link https://nfe.prefeitura.sp.gov.br/Loginicp.aspx
Se o certificado estiver instalado corretamente, 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 salvar 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 informaçõ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 nomenclatura 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 configurado 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 aplicativo 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.
•
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 identificam 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 documentos, 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 conteú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 “Validar”. 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 “Assinatura 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 processo 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 informações apresentadas sobre certificados digitais
envolverem dados específicos do fabricante, os
conceitos abordados são semelhantes independente da certificadora escolhida. Sendo assim, o
conhecimento adquirido é de grande utilidade
na implementação da comunicação com outras
marcas e modelos.
Sobre o autor
Victory Fernandes
Professor do Departamento de Engenharia da UNIFACS, Engenheiro
Mestrando em Redes de Computadores, e desenvolvedor sócio da TKS Software - 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
[email protected]
Menu> Tarefas> Configura Diretório
novembro 2010
19
Boletos e cartão
na Web
O ASP.NET proporciona uma produtividade muito grande, comparado a outras
tecnologias para desenvolvimento Web. Mas
existem situações que devemos recorrer a
terceiros para implementar alguma funcionalidade.
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á
20
novembro 2010
em sua aplicação uma funcionalidade necessá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 descompacte 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/GeraArquivoLicencaTeste, 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 multimí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
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).
Figura 1. Gerando o arquivo de licença de teste e o tipo de carteira
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 2. Página com a opção de compra do produto
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 3. Carrinho de compras da aplicação
novembro 2010
21
Listagem 1. Gerando o boleto bancário na
aplicação ASP.NET
DataSet ds =
Session[“venda”] as
DataSet;
//Cria a instância do
CobreBemX
CobreBemX.
ContaCorrenteClass
aCobreBemX =
new CobreBemX.
ContaCorrenteClass();
//Indica o arquivo de
teste gerado no site,
//precisa ser o caminho
completo
aCobreBemX.ArquivoLicenca
= Server.MapPath(“001-16.
conf”);
//Dados da conta corrente
aCobreBemX.CodigoAgencia =
“1234-5”;
aCobreBemX.
NumeroContaCorrente =
“00000123-X”;
aCobreBemX.CodigoCedente =
“123456”;
aCobreBemX.
OutroDadoConfiguracao1 =
“019”;
aCobreBemX.
InicioNossoNumero =
“00001”;
aCobreBemX.FimNossoNumero
= “99999”;
aCobreBemX.
ProximoNossoNumero =
“00015”;
//logotipo da empresa
aCobreBemX.PadroesBoleto.
PadroesBoletoEmail.
URLLogotipo =
“/imagens/logoboleto.
gif”;
//pasta das imagens do
boleto
aCobreBemX.PadroesBoleto.
PadroesBoletoEmail.
URLImagensCodigoBarras =
“/imagens/”;
//Documento de cobrança
22
novembro 2010
CobreBemX.
IDocumentoCobranca
aBoleto = aCobreBemX.
DocumentosCobranca.Add;
//Dados do sacado
aBoleto.NomeSacado =
“Luciano Almeida Pimenta”;
//Para Pessoa Juridica,
utilize a property
CNPJSacado
aBoleto.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ça
aBoleto.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 CobreBemX.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 facilmente 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 enviado por e-mail? O CobreBemX tem essa funcionalidade e também é muito fácil de ser implementada.
Adicione o método da Listagem 2 na aplicação.
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].
br”;
aCobreBem.
PadroesBoleto.
PadroesBoletoEmail.
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
PadroesEmail.EmailFrom.
Nome =
“Nome do cliente”;
aCobreBem.
PadroesBoleto.
PadroesBoletoEmail.
PadroesEmail.FormaEnvio =
FormaEnvioEmailEnum.
feeSMTPBoletoHTML;
aBoleto.
EnderecosEmailSacado.Add.
Nome = “Nome do cliente”;
aBoleto.
EnderecosEmailSacado.Add.
Endereco = “fulano@email.
com.br”;
aBoleto.
ControleProcessamento
novembro 2010
23
Documento.EnviaEmail =
StatusControleProcessamento
Enum.scpExecutar;
//envia o e-mail
aCobreBem.
EnviaBoletosPorEmail();
}
Os dados referentes a e-mail e nome do cliente, 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.
Figura 7. Formulário para solicitação de compra com o cartão de crédito
testes e o mesmo é feito em ordem aleatória).
Response.Write(“Cartão
<b> Aprovado!</b><br>
Obrigado por comprar na
Nota: Em uma aplicação real mais informações deveriam estar presentes no boleto,
como dados do sacado (endereço, CPF etc).
The Club!”);
Response.Write(
“<br><br><b>Comprovante:</
b>”);
Response.Write(
Você pode baixar o AprovaFácil (outra solução
para venda com cartão de crédito) e usar o cartaoteste.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.
“<br>” + Request.
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 Listagem 3.
Listagem 3. Verificando se a consulta foi aprovada para pagamento da compra
QueryString[“comprovante”
].ToString());
Adicione alguns Labels, TextBoxes e um botão.
Configure os componentes conforme a Figura 7.
}
else
{
Response.Write(“Cartão
<b> não </b> foi
Nota: Essa página é chamada na escolha
do usuário por pagamento com cartão de
crédito, após finalizar as compras.
aprovado”);
Response.
Veja a figura 7.
Write(“<br><b>Motivo:</
b>”);
Response.
Write(“<br>” + Request.
Adicione no using novamente o namespace
do CobreBemX. No botão adicione o código da
Listagem 4.
QueryString[“motivo”].
ToString());
}
Listagem 4. Solicitando a confirmação da
compra com o cartão de crédito
string aprovado = Request.
QueryString[“status”].
ToString();
if (aprovado == “T”)
{
24
novembro 2010
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
CobreBemX.
ContaCorrenteClass
aCobreBem = new CobreBemX.
ContaCorrenteClass();
//arquivo de licença
MesValidade = Convert.
Administradora);
gerado no site
ToInt32(TextBox2.Text);
}
aCobreBem.
aCartao.CartaoCredito.
else
ArquivoLicencaCartoes
AnoValidade = Convert.
{
Credito = Server.MapPath(
ToInt32(TextBox3.Text);
//cartão reprovado
“cartaoteste.conf”);
aCartao.ValorDocumento =
Response.
//moacTeste = Teste,
1.99;
Redirect(“status.
//moacSimulacao =
aCartao.CartaoCredito.
aspx?status=F&motivo=”+
Simulação,
CodigoSeguranca =
aCartao.CartaoCredito.
//moacProducao = Produção
TextBox4.Text;
ResultadoSolicitacao
aCobreBem.
aCartao.CartaoCredito.
Aprovacao);
PadroesAprovacaoCartoes.
QuantidadeParcelas =
}
ModoOperacao =
Convert.ToInt32(TextBox5.
aCobreBem.
ModoOperacaoAprovacao
Text);
DocumentosCobranca.
CartaoEnum.moacTeste;
//Solicita a aprovação do
Clear();
aCobreBem.
cartão
aCobreBem = null;
DocumentosCobranca.
if (aCobreBem.get_
Clear();
SolicitaAprovacaoCartao(0))
//dados do cartão de
{
crédito
//solicitação aprovada
CobreBemX.
IDocumentoCobranca
aCobreBem.Confirma
AprovacoesCartoes();
aCartao = aCobreBem.
Response.
DocumentosCobranca.Add;
Redirect(“status.
aCartao.CartaoCredito.
aspx?status=T&comprovante=”
Numero = TextBox1.Text;
+ Cartao.CartaoCredito.
aCartao.CartaoCredito.
Comprovante
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 2010
25
O funcionamento é bastante semelhante 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 (propriedade 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 Aplicativos de 32 bits altere para True (Figura 9).
Figura 9. Propriedade a ser modificada no aplication pool
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 exemplos em outras linguagens e muita documentação
sobre o produto.
Um grande abraço a todos e até a próxima!
Sobre o autor
Luciano Pimenta
É 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 Bussiness em Florianópolis-SC.
www.lucianopimenta.net
26
novembro 2010
novembro 2010
27
Dicas DELPHI
e escolha Align/VerticalCenters.
8)
RAVE REPORT – CARREGANDO IMAGENS DINAMICAMENTE
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.
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,
10) SE A SUA IMAGEM NÃO ESTIVER SALVA NUM BANCO DE DADOS:
RpDevice, RpRave, RpSystem,
RvClass, RvCsData, RvCsDraw,
11) No evento OnAfterOpen, do RvProject1, insira o código abaixo:
RvCsStd, RvCsRpt, RvData, RvDefine,
RvDirectDataView, RvUtil;
var
B: TRaveBitmap;
C: TRaveRectangle;
3)
Adicione um Button. No evento OnClick insira o código abaixo:
P: TRavePage;
begin
P := RvProject1.ProjMan.
Begin
FindRaveComponent(‘Report1.Page1’,
RvProject1.Execute;
nil) as TRavePage;
End.
B := RvProject1.ProjMan.
FindRaveComponent(‘Bitmap1’, P) as
TRaveBitmap;
C := RvProject1.ProjMan.
4) Adicione um componente RvProject, da guia Rave. Dê dois cliques
para abrir o Rave.
FindRaveComponent(‘Rectangle1’, P)
as TRaveRectangle;
5)
Adicione um componente retângulo da guia Standard.
if B <> Nil and C <> Nil
then
Configure sua propriedade height para 1,1.
Configure sua propriedade widht para 3,1.
begin
B.FileLink := ‘D:\new_logo_the_
club.bmp’;
B.Height := 3,0;
6) Adicione um componente BMP da guia Standard. Clicando na propriedade Image abre a caixa Bitmap Selector para buscar a imagem no arquivo
desejado.
B.Widht := 6,0;
C.Height :=3,1;
C.Widht := 6,1;
C.FillColor := clInactiveCaption;
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
28
novembro 2010
end;
12) SE A SUA IMAGEM ESTÁ SALVA NUM BANCO DE DADOS:
13) Insira o código abaixo, no evento OnGetRow, do RvDataSetConnection:
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;
Connection.DoGetRow;
end;
14) Compile e rode.
15) Clique Ok.
novembro 2010
29
30
novembro 2010
novembro 2010
novembro 2010
Download

novembro 2010