Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Adriano Moura

[Resolvido] Retorno Automático PagSeguro retornando FALSO

Recommended Posts

Já estou a semanas com esse problema: o retorno automático do PagSeguro está retornando FALSO para qualquer transação que eu tento validar, sei disso pois estou armazenando em um log as tentativas.

 

Entrei em contato com o suporte do PagSeguro (que por sinal é bem falho), e me informaram q trata-se de um erro no encoding, achei que estava tudo OK pois eu tinha a seguinte linha tanto na página do retorno quanto na que tem o botão de compra.

 

Request.Charset = "ISO-8859-1"

 

Só que mesmo assim não está codificando.

 

No site: http://softchill.blogspot.com/2010/06/o-pagseguro-e-seu-retorno-automatico-e.html o autor informa q o erro está na hora de receber as variáveis do PagSeguro, e que as mesmas devem ser codificadas em ISO-8859-1 antes de serem enviadas de volta, o grande problema é que não consigo fazer isso no ASP.

 

Segue a parte do código responsável pela integração.

 

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

 

Tentei incluir o encoding no botão de compra, mas também não deu certo.

<input type="hidden" name="encoding" value="UTF-8">

 

Alguem sabe como codificar corretamente as variaveis de retorno no ASP?

 

Eu descobri o problema está com os acentos, no caso eu fiz uma compra com um endereço sem acentos e retornou VERIFICADO, o problema é como fazer o encoding da url antes de solicitar a verificação.

 

Resolvido.

 

 

Fica a solução para quem encontrou o mesmo problema que eu (e não são poucos), neste ponto do código

 

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

 

substitua a linha

valued = clearStr(request.Form(x))

por

valued = request.Form(x)

pois não será necessário usar a função clearStr

 

e substitua

postData = postData & "&" & x & "=" & valued

por

postData = postData & "&" & x & "=" & Server.URLEncode(valued)

assim você fara o Encode substituindo assim caracteres especiais pelo Hexadecimal equivalente.

 

E não se esqueça de colocar

Response.Charset = "ISO-8859-1"

 

Essas são as coisas que o PagSeguro não contou para gente

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha este exemplo:

 

<%
response.ContentType = "text/HTML"
response.Charset = "ISO-8859-1"

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

if Request.Form.count > 0 then

result = notificationPost()

if Request.Form("TransacaoID") <> empty then
	transacaoID = Request.Form("TransacaoID")
Else
	transacaoID = ""
end If

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
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, tive esse mesmo problema e acabei implementando em PHP acredita?! rs.. f***... fiquei muito tempo pesquisando também, achei a documentação bem fraca para um sistema tão grande e utilizado como este...

 

Mas enfim,

o código que o xanburzum pos é exatamente o que você deve ter usado e tem no site da visie, esse é que tem erro...

 

Uma pergunta Adriano Moura, você conseguiu gravar os registros retornados no BD tranquilamente?!

 

:D

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adriano,

 

Value pele dica.

Me ajudou bastante..

Mas você conseguiu pegar o status e gravar no db???

Caso afirmativo... Por favor compartilhe também... Pois o suporte do PagSeguro. Deus me livre.

Abraço

 

JGD

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.