Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Carregando comentários...