Ir para conteúdo

Arquivado

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

Helinho Coelho

[Resolvido] Migração de Carrinho Próprio para o Pagseguro usando

Recommended Posts

Olá pessoal, estou com muitas dificuldades para migrar o meu carrinho em ASP para o Pagseguro! Veja bem, eu tenho o carrinho que gera o pedido do cliente em meu site e estes dados são inseridos em meu Banco de Dados, depois eu exibo uma página que contém todos os produtos do carrinho (puxados pelo BD e repetidos em uma tabela) e o FORM do Pagseguro (com seus respectivos hiddens) para a efetivar a migração.

 

Ok, quando se trata de um registro (um produto) o pedido é enviado normalmente, mas eu não consigo fazer com que os hiddens busquem as informações do pedido com vários registros (produtos).

 

Se alguém puder me ajudar eu agradeço!

 

Hélio Coelho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Helinho.

 

Você deve montar um loop pegando as informações de seu pedido para conseguir realizar tal tarefa.

Você está usando xml para armazenar as informações do pedido?

 

Pode postar a parte do código que monta a visualização do pedido na tela?

 

 

 

Obs:

Você postou essa mesma dúvida em outro tópico, não há a necessidade de a postar em diversos lugares. Mesmo porque o outro tópico foi aberto para publicar reclamações na migração para o novo pagseguro, que não é seu caso.

Exclui seu post de lá e você pode continuar sendo atendido por aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Cláudio,

 

Em primeiro lugar quero agradecer sua disposição em me ajudar neste caso. Não estou utilizando "XML" não, mas apenas interações em "ASP". Bom, vamos lá!

 

Meu carrinho é executado em três páginas:

 

1) "carrinho.asp" (onde o cliente escolhe produtos, deleta produtos, atualiza carrinho e fecha o pedido);

2) "salvar.asp" (aqui o pedido é gerado, as informações são salvas em um BD "dados.mdb" e a listagem do pedido é enviada para a página "pagamento.asp");

3) "pagamento.asp" (aqui as informações do pedido são vizualizadas em uma tabela referente a "Session.(cod_pedido)" do cliente que puxa os dados diretamente do BD, anteriormente inseridas pela página "salvar.asp". Vale ressaltar que abaixo da tabela existe um "FORM" com hiddens e um botão que aciona os campos hiddens para a página do PAGSEGURO).

 

Nesta página (pagamento.asp) eu tenho um Recordset (RSpedido_detalhe) que busca os Bindings do BD. Bom, o problema está aqui na página "pagamento.asp" e eu quero enviar apenas 4 informações de CADA produto do PEDIDO DO CLIENTE para o PAGSEGURO. Estas informações estão numeradas abaixo:

 

"email_cobranca" (sem problema)

"tipo" (CP, sem problema)

"moeda" (BRL, sem problema)

 

1) "item_id_1" (no value do hidden está <%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>)

2) "item_descr_1" (no value do hidden está <%=(RSpedido_detalhe.Fields.Item("produto").Value)%>)

3) "item_quant_1" (no value do hidden está <%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>)

4) "item_valor_1" (no value do hidden está <%=(RSpedido_detalhe.Fields.Item("preco").Value)%>)

 

QUESTÃO: EU NÃO SEI FAZER UM LOOP UTILIZANDO "FORM" E MUITO MENOS UTILIZANDO "HIDDENS"! Visto que o PagSeguro pede para numerar os campos de 1 até no máximo 25. Ex: item_id_1; item_id_2; item_id_3...

 

Dê uma olhada no código da página "pagamento.asp"

 

[dados da QueryString "cod_pedido" da página anterior]
<%
Dim RSpedido_detalhe__MMColParam
RSpedido_detalhe__MMColParam = "1"
If (Request.QueryString("cod_pedido") <> "") Then 
RSpedido_detalhe__MMColParam = Request.QueryString("cod_pedido")
End If
%>

[dados do Recordset]
<%
Dim RSpedido_detalhe
Dim RSpedido_detalhe_numRows
Set RSpedido_detalhe = Server.CreateObject("ADODB.Recordset")
RSpedido_detalhe.ActiveConnection = MM_dados_STRING
RSpedido_detalhe.Source = "SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + ""
RSpedido_detalhe.CursorType = 0
RSpedido_detalhe.CursorLocation = 2
RSpedido_detalhe.LockType = 3
RSpedido_detalhe.Open()
RSpedido_detalhe_numRows = 0
%>

[dados do Loop]
<%
Dim Loop__numRows
Dim Loop__index
Loop__numRows = -1
Loop__index = 0
RSpedido_detalhe_numRows = RSpedido_detalhe_numRows + Loop__numRows
%>

<html>
<head>
<meta/>
<title></title>
</head>
<body>

[tabela que visualiza a listagem do pedido do cliente]
<table>
<tr>
<td>item_id_1</td>
<td>item_descr_1</td>
<td>item_quant_1</td>
<td>item_valor_1</td>
</tr>

[loop na tabela]
<%While ((Loop__numRows <> 0) AND (NOT RSpedido_detalhe.EOF))%>
<tr>
<td><%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("produto").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("preco").Value)%></td>
</tr>
<%
Loop__index=Loop__index+1
Loop__numRows=Loop__numRows-1
RSpedido_detalhe.MoveNext()
Wend
%>
</table>

[form e hiddens que serão enviados para o PagSeguro]
<form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input name="email_cobranca" type="hidden"  value="email@meudominio.com.br" />
<input name="tipo" type="hidden" value="CP" />
<input name="moeda" type="hidden" value="BRL" />
<input name="item_id_1" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_1" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_1" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_1" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

[botão enviar do form]
<label> 
<input name="enviar" type="submit" id="enviar" value="Formas de Pagamento" />
</label>
</form>

</body>
</html>
<%
RSpedido_detalhe.Close()
Set RSpedido_detalhe = Nothing
%>

 

 

Espero ter conseguido deixar claro minha dúvida!

 

Grato pela atenção,

 

Helinho Coelho

Belo Horizonte-MG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, algumas coisas fiquei meio perdido mas no geral deu para entender.

 

Só preciso de mais uma coisa agora, poste o retorno dessa consulta:

 

"SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + ""

 

Estou pedindo isso, porque seu loop terá que ser montado conforme seus dados estão sendo armazenados.

Então preciso ver o retorno da consulta para bolar um loop que se encaixe.

 

Mas assim, vou te adiantar algo. Para colocar mais de um produto você tem que fazer assim:

 

<%
for = i = 1 to alguma_coisa
%>

<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

<%
RS_pedido.movenext
next
%>

O que precisamos descobrir agora, é o que colocar em "alguma_coisa".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cláudio,

 

Perdoe a minha ignorância, mas como eu faço para visualizar "o retorno da consulta de um BD"? O quê tenho que fazer para encontrar a informação de que você precisa quanto à consulta: "SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + ""?

 

Esta consulta (...+ Replace(RSpedido_detalhe__MMColParam, "'", "''") + "") foi especificada para não perder as informações do pedido do cliente da página anterior "salvar.asp"!

 

Me ajuda a te ajudar nessa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte. Ponha isso em seu código:

 

response.write "SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + ""

 

Fazendo isso, essa query aparecerá no seu site (depois você tira, é só pra teste). Copie da forma que vai aparecer no seu site e a execute direto em seu banco de dados. Poste aqui o resultado da consulta (a tabela contendo os dados).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok Claudio,

 

o response.write retornou o seguinte:

 

 

SELECT * FROM pedido_detalhe WHERE cod_pedido = 9

 

 

 

É como eu lhe expliquei anteriormente. A query "SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + "" busca as informações dos produtos no BD de acordo com a referencia "cod_pedido" que a página "salvar.asp" enviou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De qualquer maneira eu compreendi onde você quer chegar. você está querendo fazer o loop nos hiddens modificando apenas o número de identificação de cada campo usando o <%=i%>. Sendo que o "i" corresponde ao número de registros existentes (linhas) no atual pedido do cliente, não é!?

 

Mas a questão é que a query que você pediu para eu testar como consulta no BD não diz quantos registros existem e sim qual é o número do pedido (cod_pedido) que se deve buscar no BD para visualizar na tabela, para depois repetir as linhas que existirem dentro deste pedido até o final. O meu BD tem duas tabelas linkadas (tabela "pedido" e tabela "pedido_detalhe"). As informações da "tabela pedido_detalhe" são puxadas para dentro da "tabela pedido", ou seja, cada linha de registro da "tabela pedido" tem um sinal de "+" e quando você abre aparecem as informações (produto por produto comprado) que estão na "tabela pedido_detalhe".

 

Com isso acredito que precisamos descobrir a query que identifica os "Records" do BD. O número (quantidade) de registros de cada pedido. Para PEDIDO me refiro ao pacote de produtos comprados e para NÚMERO DE REGISTROS me refiro a cada produto comprado que está dentro deste pacote, deu pra entender!? Espero que sim... pois já estou aflito com este problema! (rs)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi o que você quis dizer, mas você está errado. Repare no código que você mesmo já fez:

<%
Dim RSpedido_detalhe
Dim RSpedido_detalhe_numRows
Set RSpedido_detalhe = Server.CreateObject("ADODB.Recordset")
RSpedido_detalhe.ActiveConnection = MM_dados_STRING
RSpedido_detalhe.Source = "SELECT * FROM pedido_detalhe WHERE cod_pedido = " + Replace(RSpedido_detalhe__MMColParam, "'", "''") + ""
RSpedido_detalhe.CursorType = 0
RSpedido_detalhe.CursorLocation = 2
RSpedido_detalhe.LockType = 3
RSpedido_detalhe.Open()
RSpedido_detalhe_numRows = 0
%>

[dados do Loop]
<%
Dim Loop__numRows
Dim Loop__index
Loop__numRows = -1
Loop__index = 0
RSpedido_detalhe_numRows = RSpedido_detalhe_numRows + Loop__numRows
%>

<html>
<head>
<meta/>
<title></title>
</head>
<body>

[tabela que visualiza a listagem do pedido do cliente]
<table>
<tr>
<td>item_id_1</td>
<td>item_descr_1</td>
<td>item_quant_1</td>
<td>item_valor_1</td>
</tr>

[loop na tabela]
<%While ((Loop__numRows <> 0) AND (NOT RSpedido_detalhe.EOF))%>
<tr>
<td><%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("produto").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%></td>
<td><%=(RSpedido_detalhe.Fields.Item("preco").Value)%></td>

Você está usando essa mesma query para preencher os primeiros dados do form. E você disse que quando compra um produto só isso funciona, logo a query está funcionando.

Agora vamos na lógica. Quando você compra um produto só, na sua tela que exibe os detalhes do pedido, exibe um produto só, e você está conseguindo passar um produto só para o pagseguro. Sendo assim, quando você compra mais de um produto, acredito eu que na sua tela de exibição dos detalhes do pedido, também esteja exibindo todos os produtos comprados. Estou correto? Agora repare que para qualquer um dos dos casos, a query usada é a mesma. Sendo assim, também temos condições de com ela passar todos os produtos para o pagseguro.

 

E não, essa query não serve para ver o número do pedido. O número do pedido está sendo passado aqui:

RSpedido_detalhe__MMColParam = Request.QueryString("cod_pedido")

Essa query serve exatamente para pegar os dados do pedido.

 

Faça o seguinte:

Faça a consulta na sua tabela, dê um print no resultado e post a imagem aqui. Use esse servidor para armazenar sua imagem e postar aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal, da forma como sua consulta está montada, fica fácil montar seu loop.

 

Tente assim:

 

<%
do until Rspedido.eof
%>

<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

<%
RS_pedido.movenext
loop
%>

Ponha essa parte em seu código, teste e diga se deu erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cláudio,

 

Eu inseri o código que você postou e ficou da seguinte maneira:

 

<%

do until RSpedido_detalhe.eof

%>

<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />

<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />

<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />

<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

<%

RSpedido_detalhe.movenext

loop

%>

 

A página que mostra o pedido em uma tabela rodou sem erros, mas quando vai para o Pagseguro o mesmo diz: "O carrinho está vazio". Não seria porque nós esquecemos de dizer quem é o "i" que está identificando produto por produto? <%=i%>

 

Estamos quase lá... (rs)

Compartilhar este post


Link para o post
Compartilhar em outros sites

huahuahuha.... realmente eu tenho me mantido bem atendo à todas suas orientações! (rs)

 

Bom, eu fiz mas não deu certo! Ou então eu não soube onde colocar a linha de código de ativação do "i=i+1"

 

Eu fiz assim:

<%
i = 1
do until RSpedido_detalhe.EOF
i = i + 1
%>
<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />
<%
RSpedido_detalhe.MoveNext
loop
%>

Mas tenho a certeza de que fiz errado! Desculpe...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora tentei fazer o Loop desta forma (logo abaixo) e continua dando o seguinte retorno da página do Pagseguro: "O carrinho está vazio!"

<%
do until RSpedido_detalhe.EOF
i = 1
%>

<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

<%
RSpedido_detalhe.MoveNext
i = i + 1
loop
%>

Me faz um favor Cláudio, entra no seguinte endereço e verifique a sistemática do carrinho: www.metaisdolar.com.br/carrinho.asp

 

 

Grato,

 

Helinho Coelho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Helinho, você deve passar o valor iniciarl de i antes de entrar no loop, senão a cada passada que ele der vai atrabuir o valor 1 para i, nunca mudando.

 

 

Assim ó:

 

<%
i = 1
do until RSpedido_detalhe.EOF
%>

<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />

<%
RSpedido_detalhe.MoveNext
i = i + 1
loop
%>

Tenta ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Cláudio,

 

Fiz do jeitinho que você me orientou, mesmo assim continua dando o retorno do Pagseguro: "O carrinho está vazio". No meu modo de pensar eu creio que o Pagseguro está aceitando a codificação, mas não está reconhecendo os valores do BD. Bom, então eu inseri uma query na própria página "pagamentos.asp" e os valores do BD apareceram normalmente e exatamente ligados o referido pedido do carrinho.

 

E agora? Será que vamos conseguir resolver esta questão Cláudio? Abaixo se encontra o form que estou enviando para o Pagseguro de acordo com o que montamos juntos! Dá uma avaliada pelo meu site pra você ver: www.metaisdolar.com.br

 

 

Mais uma vez lhe agradeço a atenção,

 

Helinho Coelho

 

<form target="_parent" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca" value="helio@cwpublicidade.com" />
<input type="hidden" name="tipo" value="CP" />
<input type="hidden" name="moeda" value="BRL" />

<%
i = 1
do until RSpedido_detalhe.EOF
%>
<input name="item_id_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("cod_pedido").Value)%>" />
<input name="item_descr_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("produto").Value)%>" />
<input name="item_quant_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("quantidade").Value)%>" />
<input name="item_valor_<%=i%>" type="hidden" value="<%=(RSpedido_detalhe.Fields.Item("preco").Value)%>" />
<%
RSpedido_detalhe.MoveNext
i = i + 1
loop
%>

<label>
<input name="enviar_pagamento" type="submit" id="enviar_pagamento" value="Escolher forma de pagamento" />
</label>
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Helinho, tentei realizar uma compra, mas realmente ele deu carrinho vazio. Só que tentei olhar o código-fonte, mas não há nada no código que aparece sobre o pagseguro, acredito que esteja oculta nessa frame, não sei.

 

Tem como você postar como o form está sendo passado. Não com o código em asp, mas já com os valores nele?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cláudio,

 

No post anterior eu postei o form exatamente como estou enviando o para o Pagseguro. Bom, de qualquer maneira acesse este endereço abaixo e baixe a página "pagamento.asp" (2kb) na integra. Assim você terá a visão do todo!

 

http://www.metaisdolar.com.br/pagamento.rar

 

 

Grato,

 

Helinho Coelho

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade Helinho, você postou o código que está passando com a parte em ASP, eu queria ver o form pronto.

Se clicar no seu site com o botão direito do mouse e clicar em código fonte, verá que aparece seu código puro em html. Isso que tentei fazer no seu, mas não aparece seu form.

 

Mas tudo bem, darei uma olhada nessa página e ver o que acho.

Me aguarde responder aqui.

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.