Ir para conteúdo

POWERED BY:

Arquivado

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

Fabricio MF

Problemas com ASP Clássico e Pagseguro

Recommended Posts

Olá galera!

 

Seguinte, to criando um site de vendas on-line, para tal estou usando o ASP Clássico e fazendo a integração com o pagseguro, estou seguindo os tutoriais officiais que se encontram no site do pagseguro. De começo, eu não sabia como fazer requisições a servidores por meio do método http, então pesquisei e aprendi que para tal coisa usa-se o Server.XMLHTTP, até ai tranquilo, vamos ao meu problema, estou usando o teste server do pag seguro e tentando pelo site on-line, porém em nenhum dos dois o meu post é aceito, retornando assim um "Unauthorized" ou no caso do teste server diz que "Houve uma falha ao decodificar a venda recebida", lembrando que estou tendo este problema ( Pelo menos por enquanto ) na hora de registrar uma nava venda no pagseguro e receber seu tão falado xml com o código de transação tanto por POST como por XML. Então galera vou postar meu código aqui para ver se alguem consegue me dar uma luz.

 

Versão POST

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
If not Session("Login") = "Logado" and Session("NCliente") = "" Then
Response.Redirect("/pagina_restrita.asp")
end if
%>
<%
If not vartype(Session("VConexaoProd")) <> 0 Then
%>
<!--#include virtual="/BD/conexao_prod.asp"-->
<%
End If
If not vartype(Session("VConexaoCad")) <> 0 Then
%>
<!--#include virtual="/BD/conexao_cad.asp"-->
<%
End If
%>
<!--#include virtual="/comuns/verifica_compra.asp"-->
<%
Dim CompraId
CompraId = Request.QueryString("CompraId")
%>

<!--#include virtual="/BD/conexao_pagseguro.asp"--> 
<%
Dim TB_Logs, VSTR_Logs, VSTR_Ex_Logs

VSTR_Logs = "INSERT INTO TB_Logs ( Cód_Compra, Processo, Data, Hora, Origem, Log) VALUES (" & CompraId & ", 'processa_venda2.asp', '"

Set TB_Logs = Server.CreateObject("ADODB.RecordSet")
%>

<% Dim Requisicao, Req_URL, Req_TXT, N_Itens

'Abertura de dados

Dim TB_Cliente, VStr_Cliente

VStr_Cliente = "SELECT * FROM TB_Clientes WHERE Código=" & Session("CódCli")

Set TB_Cliente = Server.CreateObject("ADODB.RecordSet")
TB_Cliente.Open VStr_Cliente, Session("VConexaoCad")

Dim TB_Meu_Carrinho, VStr_Meu_Carrinho

VStr_Meu_Carrinho = "SELECT * FROM TB_Compras_Prod WHERE Cód_Compra=" & CompraId & " ORDER BY Produto"

Set TB_Meu_Carrinho = Server.CreateObject("ADODB.RecordSet")
TB_Meu_Carrinho.Open VStr_Meu_Carrinho, Session("VConexaoCad")
 If TB_Meu_Carrinho.Eof then

 End if


'Fim da abertura de dados
'Req_URL = "127.0.0.1"
Req_URL = "https://ws.pagseguro.uol.com.br/v2/checkout"
'Req_URL = "http://localhost:9090/checkout/checkout.jhtml"

Req_TXT = "email=pestoque@pestoque.com.br\" & vbcrlf &_
"&token=6492DDA0799B4943AB5EC21EBCAD98D9\" & vbcrlf &_
"&currency=BRL\" & vbcrlf

'Loop de itens

N_Itens = 0

while not TB_Meu_Carrinho.Eof 

N_Itens = N_Itens + 1

Req_TXT = Req_TXT & "&itemId" & N_Itens &"=" & N_Itens & "\"  & vbcrlf &_  
           "&itemDescription" & N_Itens &"=" & TB_Meu_Carrinho("Produto") & "\"  & vbcrlf &_  
           "&itemAmount" & N_Itens &"=" & TB_Meu_Carrinho("Qtde") & "\"  & vbcrlf &_  
           "&itemQuantity" & N_Itens &"=" & TB_Meu_Carrinho("Valor_Un") & "\"  & vbcrlf &_  
           "&itemWeight" & N_Itens &"=1000\" & vbcrlf

TB_Meu_Carrinho.MoveNext
Wend

Req_TXT = Req_TXT & "&reference=" & CompraId & "\" & vbcrlf

Req_TXT = Req_TXT & "&senderName=" & TB_Cliente("Cliente") & "\"  & vbcrlf &_  
       "&senderEmail=" & TB_Cliente("E_Mail") & "\"  & vbcrlf

Req_TXT = Req_TXT & "&shippingType=2\"  & vbcrlf

'Testa o xml
'Dim ReqTeste, TesteErro

'Set ReqTeste = Server.CreateObject("MSXML2.DOMDocument.4.0")
'ReqTeste.async = False
'ReqTeste.loadxml(Req_TXT)
'if ReqTeste.parseError <> 0 then

'TesteErro = response.write ("Código do erro: " & ReqTeste.parseError.errorCode & "<br>")
'TesteErro = TesteErro & response.write ("Posição no arquivo: " & ReqTeste.parseError.filepos & "<br>")
'TesteErro = TesteErro & response.write ("Linha: " & ReqTeste.parseError.line & "<br>")
'TesteErro = TesteErro & response.write ("Posição na linha: " & ReqTeste.parseError.linepos & "<br>")
'TesteErro = TesteErro & response.write ("Descrição: " & ReqTeste.parseError.reason & "<br>")
'TesteErro = TesteErro & response.write ("Texto que causa o erro: " & ReqTeste.parseError.srcText & "<br>")
'TesteErro = TesteErro & response.write ("Url do arquivo com problemas: " & ReqTeste.parseError.url)

'Grava um log
'VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'Sistema - Erro', '" & TesteErro & "')"
'set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
'set TB_Logs = Nothing
'Fim do Log

'Set ReqTeste = Nothing
'Response.Redirect("/pag_seguro/erro.asp")
'end if
'Fim do teste

'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'Sistema', '" & Req_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log

Set Requisicao = Server.CreateObject("MSXML2.ServerXMLHTTP")
Requisicao.Open "POST", Req_URL, False
Requisicao.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1"
Requisicao.Send Req_TXT

'Leitura do retorno

Dim Ret_TXT, Retorno, Retorno_Raiz, CodTransacao

Ret_TXT = Requisicao.ResponseText

'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log

Set Retorno = Server.CreateObject("MSXML2.DOMDocument.4.0")
Retorno.async = False
Retorno.loadxml(Ret_TXT)

Set Retorno_Raiz = Retorno.documentElement

If Retorno_Raiz.NodeName = "errors" then
'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro - Erro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log
Response.Redirect("/pag_seguro/erro.asp")
elseif Retorno_Raiz.NodeName = "checkout" Then
CodTransacao = Retorno_Raiz.childNodes.item(0).text
else
'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro - Erro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log
Response.Redirect("/pag_seguro/erro.asp")
end if

'Fim da leitura do retorno

' Reta final - Grava o código e redireciona
Dim TB_Compra, VSTR_Compra

VSTR_Compra = "UPDATE TB_Compras SET Cód_TransaçãoPS = '" & CodTransacao & "' WHERE Código = " & CompraId

Set TB_Compra = Server.CreateObject("ADODB.RecordSet")
set TB_Compra = Session("VConexaoCad").execute(VSTR_Compra)
set TB_Compra = Nothing

%>
<!--#include virtual="/BD/desconexao_pagseguro.asp"--> 
<% Response.Redirect("https://pagseguro.uol.com.br/v2/checkout/payment.html?code=" & CodTransacao) %>

 

Versão XML

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
If not Session("Login") = "Logado" and Session("NCliente") = "" Then
Response.Redirect("/pagina_restrita.asp")
end if
%>
<%
If not vartype(Session("VConexaoProd")) <> 0 Then
%>
<!--#include virtual="/BD/conexao_prod.asp"-->
<%
End If
If not vartype(Session("VConexaoCad")) <> 0 Then
%>
<!--#include virtual="/BD/conexao_cad.asp"-->
<%
End If
%>
<!--#include virtual="/comuns/verifica_compra.asp"-->
<%
Dim CompraId
CompraId = Request.QueryString("CompraId")
%>

<!--#include virtual="/BD/conexao_pagseguro.asp"--> 
<%
Dim TB_Logs, VSTR_Logs, VSTR_Ex_Logs

VSTR_Logs = "INSERT INTO TB_Logs ( Cód_Compra, Processo, Data, Hora, Origem, Log) VALUES (" & CompraId & ", 'processa_venda.asp', '"

Set TB_Logs = Server.CreateObject("ADODB.RecordSet")
%>

<% Dim Requisicao, Req_URL, Req_TXT, N_Itens

'Abertura de dados

Dim TB_Cliente, VStr_Cliente

VStr_Cliente = "SELECT * FROM TB_Clientes WHERE Código=" & Session("CódCli")

Set TB_Cliente = Server.CreateObject("ADODB.RecordSet")
TB_Cliente.Open VStr_Cliente, Session("VConexaoCad")

Dim TB_Meu_Carrinho, VStr_Meu_Carrinho

VStr_Meu_Carrinho = "SELECT * FROM TB_Compras_Prod WHERE Cód_Compra=" & CompraId & " ORDER BY Produto"

Set TB_Meu_Carrinho = Server.CreateObject("ADODB.RecordSet")
TB_Meu_Carrinho.Open VStr_Meu_Carrinho, Session("VConexaoCad")
 If TB_Meu_Carrinho.Eof then

 End if


'Fim da abertura de dados
'Req_URL = "127.0.0.1"
'Req_URL = "https://ws.pagseguro.uol.com.br/v2/checkout?email=pestoque@pestoque.com.br&token=6492DDA0799B4943AB5EC21EBCAD98D9"
Req_URL = "http://localhost:9090/checkout/checkout.jhtml?email=pestoque@pestoque.com.br&token=6492DDA0799B4943AB5EC21EBCAD98D9"

Req_TXT = "<?xml version=""1.0"" encoding=""ISO-8859-1"" standalone=""yes""?>" &_
"<checkout>" &_
   "<currency>BRL</currency>" &_  
   "<items>"

'Loop de itens

N_Itens = 0

while not TB_Meu_Carrinho.Eof 

N_Itens = N_Itens + 1

Req_TXT = Req_TXT & "        <item>" &_  
           "<id>" & N_Itens & "</id>" &_  
           "<description>" & TB_Meu_Carrinho("Produto") & "</description>" &_  
           "<amount>" & TB_Meu_Carrinho("Qtde") & "</amount>" &_  
           "<quantity>" & TB_Meu_Carrinho("Valor_Un") & "</quantity>" &_  
           "<weight>1000</weight>" &_  
       "</item> "

TB_Meu_Carrinho.MoveNext
Wend

Req_TXT = Req_TXT & "</items>"

Req_TXT = Req_TXT & "<reference>" & CompraId & "</reference>"

Req_TXT = Req_TXT & "    <sender>" &_  
       "<name>" & TB_Cliente("Cliente") & "</name>" &_  
       "<email>" & TB_Cliente("E_Mail") & "</email>" &_   
   "</sender> "

Req_TXT = Req_TXT & "    <shipping>" &_  
       "<type>2</type>" &_   
   "</shipping>" &_  
"</checkout> "

'Testa o xml
Dim ReqTeste, TesteErro

Set ReqTeste = Server.CreateObject("MSXML2.DOMDocument.4.0")
ReqTeste.async = False
ReqTeste.loadxml(Req_TXT)
if ReqTeste.parseError <> 0 then

TesteErro = response.write ("Código do erro: " & ReqTeste.parseError.errorCode & "<br>")
TesteErro = TesteErro & response.write ("Posição no arquivo: " & ReqTeste.parseError.filepos & "<br>")
TesteErro = TesteErro & response.write ("Linha: " & ReqTeste.parseError.line & "<br>")
TesteErro = TesteErro & response.write ("Posição na linha: " & ReqTeste.parseError.linepos & "<br>")
TesteErro = TesteErro & response.write ("Descrição: " & ReqTeste.parseError.reason & "<br>")
TesteErro = TesteErro & response.write ("Texto que causa o erro: " & ReqTeste.parseError.srcText & "<br>")
TesteErro = TesteErro & response.write ("Url do arquivo com problemas: " & ReqTeste.parseError.url)

'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'Sistema - Erro', '" & TesteErro & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log

Set ReqTeste = Nothing
Response.Redirect("/pag_seguro/erro.asp")
end if
'Fim do teste

'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'Sistema', '" & Req_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log

Set Requisicao = Server.CreateObject("MSXML2.ServerXMLHTTP")
Requisicao.Open "POST", Req_URL, False
Requisicao.SetRequestHeader "Content-Type", "application/xml; charset=ISO-8859-1"
Requisicao.Send Req_TXT

'Leitura do retorno

Dim Ret_TXT, Retorno, Retorno_Raiz, CodTransacao

Ret_TXT = Requisicao.ResponseText

'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log

Set Retorno = Server.CreateObject("MSXML2.DOMDocument.4.0")
Retorno.async = False
Retorno.loadxml(Ret_TXT)

Set Retorno_Raiz = Retorno.documentElement

If Retorno_Raiz.NodeName = "errors" then
'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro - Erro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log
Response.Redirect("/pag_seguro/erro.asp")
elseif Retorno_Raiz.NodeName = "checkout" Then
CodTransacao = Retorno_Raiz.childNodes.item(0).text
else
'Grava um log
VSTR_Ex_Logs = VSTR_Logs & Date & "', '" & Time & "', 'PagSeguro - Erro', '" & Ret_TXT & "')"
set TB_Logs = VBD_PagSeguro.execute(VSTR_Ex_Logs)
set TB_Logs = Nothing
'Fim do Log
Response.Redirect("/pag_seguro/erro.asp")
end if

'Fim da leitura do retorno

' Reta final - Grava o código e redireciona
Dim TB_Compra, VSTR_Compra

VSTR_Compra = "UPDATE TB_Compras SET Cód_TransaçãoPS = '" & CodTransacao & "' WHERE Código = " & CompraId

Set TB_Compra = Server.CreateObject("ADODB.RecordSet")
set TB_Compra = Session("VConexaoCad").execute(VSTR_Compra)
set TB_Compra = Nothing

%>
<!--#include virtual="/BD/desconexao_pagseguro.asp"--> 
<% Response.Redirect("https://pagseguro.uol.com.br/v2/checkout/payment.html?code=" & CodTransacao) %>

 

Agora outra pergunta, como e pra que exatamente serve o retorno.asp que o pagseguro disponibiliza?

 

Bom galera, ta ai minha dúvida se algum tiver informações, exemplos, tutorias, qualquer coisa ajuda.

 

Grato desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera, voltei dinovo!

 

Depois de muito quebrar a minha cabeça, revendo os tutors do pagseguro e o meu código, consegui resolver meu problema ( ou pelo menos por enquanto ), descobri 3 coisas que estavam erradas, são elas:

 

1 - o meu código está com o encoding em UTF-8, e no código ele está passando o ISO-8859-1, com isso precisei mudar nas linhas que continham o nome ISO-8859-1 para UTF-8

 

2 - inverti 2 campos, o campo quantity com o amount

 

3 - no campo amount precisei colocar um replace para trocar a virgula para ponto

 

Bom, depois disso tudo, pelo menos fica um exemplo de requisição de compra ao pagseguro com o asp, bastando apenas fazer as mudanças que eu disse.

 

Vlw galera até depois.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então brow beleza? viu, faz de um jeito simples, passa por parâmentros FORM ACTION mesmo METHOD=POST ...

<form target="_self" method="post"

action="https://pagseguro.uol.com.br/v2/checkout/payment.html">

 

<!-- Campos obrigatórios -->

<input type="hidden" name="receiverEmail" value="SEUEMAIL@CADASTRONOPAGSEGURO">

<input type="hidden" name="currency" value="BRL">

 

<!-- Itens do pagamento (ao menos um item é obrigatório) -->

<input type="hidden" name="itemId1" value="0001">

<input type="hidden" name="itemDescription1" value="Notebook Prata">

<input type="hidden" name="itemAmount1" value="24300.00">

<input type="hidden" name="itemQuantity1" value="1">

<input type="hidden" name="itemWeight1" value="1000">

 

<input type="hidden" name="itemId2" value="0002">

<input type="hidden" name="itemDescription2" value="Notebook Rosa">

<input type="hidden" name="itemAmount2" value="25600.00">

<input type="hidden" name="itemQuantity2" value="2">

<input type="hidden" name="itemWeight2" value="750">

 

<!-- Código de referência do pagamento no seu sistema (opcional) -->

<input type="hidden" name="reference" value="REF1234">

 

<!-- Informações de frete (opcionais) -->

<input type="hidden" name="shippingType" value="1">

<input type="hidden" name="shippingAddressPostalCode" value="01452002">

<input type="hidden" name="shippingAddressStreet" value="Av. Brig. Faria Lima">

<input type="hidden" name="shippingAddressNumber" value="1384">

<input type="hidden" name="shippingAddressComplement" value="5o andar">

<input type="hidden" name="shippingAddressDistrict" value="Jardim Paulistano">

<input type="hidden" name="shippingAddressCity" value="Sao Paulo">

<input type="hidden" name="shippingAddressState" value="SP">

<input type="hidden" name="shippingAddressCountry" value="BRA">

 

<!-- Dados do comprador (opcionais) -->

<input type="hidden" name="senderName" value="José Comprador">

<input type="hidden" name="senderAreaCode" value="11">

<input type="hidden" name="senderPhone" value="56273440">

<input type="hidden" name="senderEmail" value="EMAILDECOBRANÇA@DAPESSOAQUECOMPROU">

 

<!-- submit do form (obrigatório) -->

<input type="image" name="submit"

src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/120x53-pagar.gif"

alt="Pague com PagSeguro">

 

</form>

Só pra você entender,seu código tem q passar os parâmetros acima para automaticamente air no gateway de pagamentos deles.

 

Ai você personaliza o botão do pagseguro acima e vualá, outra coisa, dentro do seu cadastro no pagseguro tem um retorno de página lá, coloca um link para depois que ele finalizar a compra você redireciona para essa página finalizando a sessão brow, tipo Obrigado, seu pedido foi processado corretamente \o/

 

qualquer coisa grita ai... meu e-mail : palamim@oai.com.br

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.