DGmike

DGmike

Calma! não entre em pânico! Amanhã (talvez) tem novo post…

Você está aqui: dgmike » Arquivos para

  • Home
  • Guia Rápido jQuery
  • Códigos prontos
    • PHP: Função __auloload()
    • Classe sqlsimples e sql – PHP
    • Bancos, bancos e mais bancos…
  • PagSeguro
  • Artigos
    • JavaScript (parte 1)
  • Quem é dgmike?

PagSeguro – Gravando log com ASP

Posted in pagseguro by DGmike
Sep 08 2010
TrackBack Address.

Este final de semana precisei implementar um sistema web com PagSeguro usando ASP. Acontece que a biblioteca atual, desenvolvida por um colega da visie, não possui um feedback em log para saber o que está acontecendo no servidor. Portando, o usuário fica sem saber se realmente o código que ele implementou está funcionando com o PagSeguro.

Sempre, sempre, sempre grave log do que acontece no seu servidor

Log de resposta mostrando o que aconteceu no servidor no retorno automático do PagSeguro

Chegou até mim um report de erro sobre a linha 55 do arquivo de retorno automático do PagSeguro para ASP:

55
if Request.Form.count > 0 then

Dizendo que o problema era que Request.Form.Count sempre dava zero. Tive uma idéia do que era, mas como sou programador, precisei fazer testes e comprovar minha teoria. Bom, mão à obra!

Como sou usuário de linux assíduo e não estava com vontade nenhuma de formatar meu notebook apenas para fazer testes, precisei procurar um hosting de ASP gratuito. Me deparei com o somee.com e criei minha conta onde comecei a escrever algumas linhas de html. O formulário do Carrinho Próprio para ser mais exato.

Logo logo chegou a hora de experimentar o retorno automático. Bom, não conheço a fundo a sintaxe da linguagem ASP[bb], procurei saber o que estava acontecendo com base na biblioteca PagSeguro desenvolvida pela Visie. Percebi que seria difícil pois a mesma não gravava log do que acontecia. Então fui procurar como fazer para escrever um arquivo de texto na linguagem. Após alguns minutos fazendo pesquisa na internet me deparei com uma função que adaptei para meu caso.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%
function WriteToFile(Contents, Append)
    on error resume next
    if Append = true then
       iMode = 8
    else
       iMode = 2
    end if
    ' A proxima linha é referente ao local do arquivo de log, altere aqui
    FileName = "D:\caminho\para\o\meu\log.txt"
    set oFs = server.createobject("Scripting.FileSystemObject")
    set oTextFile = oFs.OpenTextFile(FileName, iMode, True)
    oTextFile.Write Contents & vbCrLF
    oTextFile.Close
    set oTextFile = nothing
    set oFS = nothing
end function
%>

Depois, apenas fiz um include e alterei um pouco a biblioteca, afim de gravar no log a informação necessária:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
<%
' Primeiro, fiz o include do arquivo do gravalog.asp
%>
<!--#include file="gravalog.asp"-->
<%
response.ContentType = "text/HTML"
response.Charset = "ISO-8859-1"
 
' Log para informar que alguém chegou na página, seja usuário ou robo do PagSeguro
WriteToFile "Chegou ate a url de retorno.asp", True
 
Dim TOKEN
 
'TOKEN = "cole aqui o token do vendedor"
 
timeout = 20  'Timeout em segundos
 
function notificationPost()
 
	postdata = "Comando=validar&Token=" & TOKEN
 
	For each x In Request.Form
		valued = clearStr(request.Form(x))
		postdata = postdata & "&" & x & "=" & valued
	Next
 
	notificationPost = verify(postdata)
 
end Function
 
function clearStr(str)
 
	str = replace(str, "'","\'")
	clearStr = str
 
end function
 
function verify(data)
 
	strUrl = "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml"
 
	Set xmlHttp = Server.Createobject("MSXML2.ServerXMLHTTP")
 
	xmlHttp.Open "POST", strUrl, False
	xmlHttp.setRequestHeader "User-Agent", "asp httprequest"
	xmlHttp.setRequestHeader "content-type", "application/x-www-form-urlencoded"
	xmlHttp.setRequestHeader "content-length", Len(data)
	xmlHttp.Send(data)
 
	retorno = xmlHttp.responseText
 
	xmlHttp.abort()
 
	set xmlHttp = Nothing
 
	verify = retorno
 
end function
 
' Nesta área, mandei gravar os dados de GET para saber o que está acontecendo
WriteToFile "Dados recebidos:", True
WriteToFile "GET", True
WriteToFile Request.Querystring, True
 
' Agora, gravando os dados que chegaram via POST
postdata = ""
For each x In Request.Form
	valued = clearStr(request.Form(x))
	postdata = postdata & "&" & x & "=" & valued
Next
 
WriteToFile "POST", True
WriteToFile "Total de fields: " & Request.Form.Count, True
WriteToFile postdata, True
 
 
if Request.Form.count > 0 then
	result = notificationPost()
 
	if Request.Form("TransacaoID") <> empty then
		transacaoID = Request.Form("TransacaoID")
	Else
		transacaoID = ""
	end If
 
	' Agora ficou fácil, se chegou via POST, o script irá verificar se ele veio do PagSeguro
	' e gravará no log VERIFICADO ou FALSO
	WriteToFile result, True
	WriteToFile "", True
	WriteToFile "---", True
	WriteToFile "", True
 
	if result = "VERIFICADO" then
		'O post foi validado pelo PagSeguro.
	elseif result = "FALSO" then
		'O post não foi validado pelo PagSeguro.
	else
		'Erro na integração com o PagSeguro.
	end if
 
else
	' POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
	' No término do checkout o usuário é redirecionado para este bloco.
	%>
 
    <h3>Obrigado por efetuar a compra.</h3>
 
    <%
end if
%>

O retorno que eu peguei no arquivo de log foi uma informação que até então eu já esperava. A biblioteca está correta então o problema era outro… Veja o log na íntegra, com o POST do PagSeguro e o retorno do usuário à página, após efetuar o pagamento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Chegou ate a url de retorno.asp
Dados recebidos:
GET
 
POST
Total de fields: 34
&VendedorEmail=mike@visie.com.br&CliNumero=apto 030&CliBairro=Santana&NumItens=2&ProdExtras_1=0,00&ProdExtras_2=0,00&TransacaoID=D5AE7B12E7F4485D8F3B8AA634A46AF6&CliCidade=SAO PAULO&Referencia=NUMALUCO&TipoFrete=FR&ProdID_1=1&Extras=0,00&ProdID_2=2&ValorFrete=0,00&Anotacao=&ProdQuantidade_1=2&ProdQuantidade_2=2&DataTransacao=04/09/2010 21:37:38&CliEstado=SP&CliTelefone=12 21010900&TipoPagamento=Boleto&StatusTransacao=Aguardando Pagto&CliNome=Angelo dos Santos&CliComplemento=garagem 200&CliCEP=02021030&ProdDescricao_1=Carrinho&ProdValor_1=2,70&ProdFrete_1=0,00&ProdDescricao_2=Boneca&ProdValor_2=14,30&ProdFrete_2=0,00&CliEmail=angelo@santos.com.br&CliEndereco=RUA ALUISIO AZEVEDO&Parcelas=1
VERIFICADO
 
---
 
Chegou ate a url de retorno.asp
Dados recebidos:
GET
 
POST
Total de fields: 0
 
Chegou ate a url de retorno.asp
Dados recebidos:
GET
 
POST
Total de fields: 0

O que consegui ver com os dados recolhidos é que o atributo Request.Form.count só é válido para dados que chegam via POST, caso o usuário chege até a página através do método GET, ou seja, o usuário escrever a url “meusite.com.br/retorno.asp” no browser a variável Request.Form.count sempre será zero. Então, podemos concluir que o report na verdade eram testes equivocados do desenvolvedor que não estava conseguindo entender o que acontece no retorno automático de dados do PagSeguro. Que na verdade os testes devem ser feitos online e em segundo plano.

Em minhas palestras, deixo em claro que o robô de NPI envia um POST em segundo plano. Mas realmente este não é um conceito fácil de aprender. Para quem está começando a desenvolver com o retorno automático do PagSeguro sempre aconselho a ler os tutoriais do próprio PagSeugro, da Visie e minha área separada neste blog sobre PagSeguro. Bem, fica a dica para os desenvolvedores em ASP. SEMPRE GRAVE LOG! :D

Ps.: Vou fazer um fork da versão desenvolvida pela visie e enviar para eles a alteração com a gravação de logs assim que possível :D

No Comments yet »
Tagged as: asp, pagseguro, retorno automático

Vá com calma

Posted in Trabalho by DGmike
Sep 03 2010
TrackBack Address.

Quando você é contratado para uma nova empresa para fazer aquilo tudo que você faz no seu dia-a-dia não se esqueça que você não é o único da empresa e que provavelmente a sua nova equipe não está acostumada com sua forma de escrever código. Portando, vá com calma.

Calvin and Hobbes. fonte: google images

Existem muitos estilos e formas de trabalhar nas mais diversas empresas. Você pode achar sensato escrever onClick em suas tags javascript mas para céticos – como eu, nada de javascript deve ser colocado no corpo da página. Então, procure saber quais são os padrões adotados pelas empresas. A primeira coisa que eu costumo verificar é o seguinte: charset. Existe muita gente boa por aí que explica melhor do que eu o que é charset. Em seguida, procuro saber quais são os padrões adotados em todas as áreas que irei colocar meus dedos: html e php e, se for o caso, javascript.

Na maioria dos casos, procuro ver se já existe jQuery[bb] ou mootools ou script.aculo.us instlado. Se nenhuma dessas bibliotecas estiver instalada prefiro escrever no modo antigo de fazer. Ainda bem que fiz um ótimo curso de javascript DOM um tempo atrás. Isso me dá base para entender o que esperar no javascript.

document.getElementById('links').getElementsByTagName('span')[0].onclick = function(){ alert('JavaScript não é complicado'); };

Se nas primeiras semanas você se sentir um pouco deslocado, com pouco serviço, não ache que seu coordenador está te deixando de lado ou que ele não gosta de você. Ele, na verdade, quer ver até onde ele pode colocar responsabilidades em sua mão e com o tempo ele vai começar a colocar coisas interessantes para você fazer.

Então, quando pular de barco, a dica que eu posso te dar é: vá com calma. Mesmo que você tenha sido contratado para fazer malabares com sua linguagem preferida – mesmo que seja ASP, não tente resolver todos os problemas a SUA maneira e sim à maneira da EMPRESA[bb]. Não tenha vergonha de perguntar, você foi contratado porque sabe desenvolver-se em um problema e não porque você já tem o conhecimento de todas as normas e regras da empresa. Interaja com os seus colegas de trabalho, lembre-se você trabalha para web, onde o objetivo é compartilhar conteúdo.

Vai que a tarefa que seu coordenador te deu alguém lá de dentro já havia solucionado de forma em outro local. Vai que seu trabalho de 3 dias se torne um trabalho de 3 horas. ;D

1 Comment »
Tagged as: contratado, dicas, mercado, programador, Tecnologia, Trabalho

Vírgula em html5 e css3

Posted in CSS, Chrome, Design, Firefox, Navegadores, Tecnologia, html by DGmike
Aug 03 2010
TrackBack Address.

Estava com um tempinho sobrando e estudando sobre html5, css3 e vi que algumas pessoas já começaram a desenhar com as técnicas de cantos arredondados do css3. Decidi fazer a minha versão do logo daqui do vírgula.

Logo do Vírgula em HTML e CSS3

O portal vírgula ganhou uma versão do seu símbolo em HTML5 e CSS3

Claro que não funciona no Internet Explorer, mas funcionou em google Chrome, Opera e Firefox no meu linux ubuntu. Também não testei no IE9, mas quem se importa?. E aí na sua máquina, funcionou?

8 Comments »

Youtube e HTML5, agora ficou mais fácil

Posted in Chrome, Firefox, Internet Explorer, Navegadores, Programação, flash, html, video by DGmike
Jul 26 2010
TrackBack Address.

Você se lembra quando inserir um video em uma página web era complicado? Você prescisava usar a tag embed e colocar um arquivo .wma que muitas vezes prescisava de um plugin da microsoft para conseguir rodar. Consequentemente, o player do tio Bill carregava no Internet Explorer e deixava o usuário furioso com o consumo de memória que ele consumia.

Apesar dos pesares, era relativamente fácil inserir um video com o html4 que tinhamos na época:

1
<embed autoplay="false" src="VIDEO.wma" width="50" height="50></embed>
Youtube, um player de videos online gratuito

Videos online, assim foi que o youtube conseguiu a maior audiência do mercado web do mundo

Ainda bem que o tempo passa e, com ele, a tecnologia só melhora. Inventaram o flash e com ele o player personalizado. Pouco tempo depois nascia um dos mais visitados sites do mundo: Youtube. Mas, infelizmente se tornaria mais complicado inserir um video no seu site. Agora era necessário usar o embed de flash, que não decorei até hoje.

1
2
3
4
5
6
<object width="640" height="385">
  <param name="movie" value="http://www.youtube.com/v/ID_VIDEO"></param>
  <param name="allowFullScreen" value="true"></param>
  <param name="allowscriptaccess" value="always"></param>
  <embed src="http://www.youtube.com/v/ID_VIDEO" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed>
</object>

O pior veio quando, em alguns casos, o browser bloqueava o embed e precisou-se usar algum hack em javascript para conseguir “embebedar” o flash player com suas trocentas variáveis.

Com a chegada do html5 tudo ficou mais fácil. Eu já havia explicado por aqui como se faz para inserir um video em formato .ogg em sua página. Isso foi um pouco antes do html5 estourar nas paradas de sucesso. Algum tempo depois o Youtube aderiu a essa novidade.

Mas infelizmente nem tudo são flores na vida de Joseph Climber, e agora nos deparamos com uma pergunta básica: usar video com html5 ou embed de flash player. O caso é que, dependendo da máquina/browser do usuário, o html5 (que tem muito mais vantagens) simplesmente não funciona. O youtube está convertendo, pouco a pouco os videos em formato .flv para o formato .ogg aos poucos, então quando saber que está na hora de atualizar os videos do seu blog?

Para resolver o problema, o youtube decidiu tomar as redias e “inventou” uma nova forma de colocar os videos dele no seu site/blog: através de iframes. Veja como a sintaxe fica mais interessante.

1
2
3
4
<iframe class="youtube-player" type="text/html" frameborder="0"
    src="http://www.youtube.com/embed/VIDEO_ID"
    width="640" height="385"
></iframe>

Apenas trocando o ID do video. E voilà, seu video está em seu site sem você precisar se preocupar com atualizações de versão, compactibilidade, etc, etc.

4 Comments »
Tagged as: bill gates, embed, Firefox, flv, google, google chrome, html, html4, html5, iframe, Microsoft, oembed, video, wma, youtube

Novo emprego!

Posted in Cotidiano, Dia-a-dia, Programação, Tutorial by DGmike
Jul 19 2010
TrackBack Address.

Comecei agora há pouco no meu novo emprego. Conheci a equipe e o ambiente de trabalho. Parece ótimo. Nada melhor para começar um novo emprego que algumas linhas de comando no git.

Primeiro presciso guardar em uma tag segura a minha vida.

dgmike@vida:$
git tag -a visie -m "Guardando a minha fase da vida na visie"
git push --tags

Agora, criar um branch novo. Vazio.

dgmike@vida:$
git symbolic-ref HEAD refs/heads/virgula
rm .git/index
git clean -fdx
touch README
git add README
git commit -m "Primeiro commit aqui no virgula"

4 Comments »
Tagged as: branch vazio, git, novo branch, tag, tutorial de git
Next page »

Categorias

  • Cotidiano  (132)
    • Amigos  (16)
    • Dia-a-dia  (33)
    • Diversão  (18)
    • Games  (1)
    • Não categorizado  (26)
  • Design  (15)
    • Ilustração  (6)
    • Imagem  (8)
    • Inspiração  (5)
    • Vetorial  (5)
  • eventos  (10)
    • PHP Conference  (3)
  • flash  (4)
  • Navegadores  (22)
    • Chrome  (6)
    • extensions  (11)
    • Firefox  (18)
    • Internet Explorer  (6)
  • pagseguro  (13)
  • Programação  (106)
    • CSS  (20)
    • html  (7)
    • javascript  (36)
      • jQuery  (7)
      • yui  (2)
    • php  (44)
      • icephp  (4)
    • plugin  (3)
    • python  (5)
    • sql  (9)
    • tableless  (18)
    • wordpress  (2)
    • xHTML  (23)
  • Tecnologia  (70)
    • Semântica  (16)
    • Tutorial  (25)
    • video  (8)
      • video-tutorial  (5)
    • Windows  (4)
  • Trabalho  (33)
    • cases  (4)

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Trabalho Tutorial twitter visie web wordpress

Arquivo

SlideSare

Últimos Posts

  • PagSeguro – Gravando log com ASP
  • Vá com calma
  • Vírgula em html5 e css3
  • Youtube e HTML5, agora ficou mais fácil
  • Novo emprego!

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Trabalho Tutorial twitter visie web wordpress

Conteúdo

  • Artigos
    • JavaScript (parte 1)
  • Códigos prontos
    • Bancos, bancos e mais bancos…
    • Classe sqlsimples e sql – PHP
    • PHP: Função __auloload()
  • Guia Rápido jQuery
  • PagSeguro
  • Quem é dgmike?
PagSeguro Powered by WordPress | “Blend” from Spectacu.la WP Themes Club