Ir para conteúdo

POWERED BY:

Arquivado

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

GuilhermeManga

Como salvar no DB e depois enviar os dados para PagSeguro via POST

Recommended Posts

Olá minha dúvida deve ser muito fácil de responder, pq todo mundo deve fazer isso.

Agradeço desde de já a ajuda.

 

Tenho um formulário que o cliente preenche com os dados da compra, se na colocar a action do formulário direto para o pague seguro não vou poder salvar os dados antes:

 

<form target="pagseguro" method="post"

action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">

 

Preciso mandar para uma página que salve os dados do banco antes de mandar para esse página do pague seguro, mas quando eu faço isso não tenho como mandar via Post os dados pare o pague seguro.

 

 

Não sei se eu fui claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugestão:

1: Você pode criar uma tela onde você atualize seu BD, e depois redirecione para o PagSeguro.

2: Use ajax para fazer as duas coisas ao mesmo tempo... segue exemplo

<script>
function checkout() {
document.pagseguro.submit();//Envia o formulario, provavelmente irá abrir em outra janela o pagseguro.
$.ajax({
	type: 'POST',
	data: $("#IdDoSeuFormularioDoPagSeguro").serialize();//Aqui ele pega os dados do formulario.
	url: 'suaUrlQueGravaNoBD.php',//Use a pagina que faz o tratamento de atualização do banco
	success: function() {
		location = 'urlDeCompraFinalizada.php';//Se ter sucesso ele redireciona para outra janela
	}
});
} 
</script>

 

No exemplo acima estou usando jQuery, caso surgir alguma duvida segue documentação

http://api.jquery.com/jQuery.post/

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode me explicar melhor como utilizar esse script ?

 



<script>

function checkout() {
       document.form1.submit();//Envia o formulario, provavelmente irá abrir em outra janela o pagseguro.
       $.ajax({
               type: 'POST',
               data: $("#form1").serialize(), //Aqui ele pega os dados do formulario.
               url: 'pagseguro/comprar_pontos.php',//Use a pagina que faz o tratamento de atualização do banco
               success: function() {
                       location = 'status_pontos.php';//Se ter sucesso ele redireciona para outra janela
               }
       });
} 
</script>

<form name="form1" id="form1"  method="post">
                       <input type="hidden" name="receiverEmail" value="meuEmail@hotmail.com" />
                       <input type="hidden" name="currency" value="BRL" />
                       <input type="hidden" name="itemId" value="<?php echo $_SESSION["ID_EMP"]; ?>" />
                       <input type="hidden" name="itemDescription" value="10" />
                       <input type="hidden" name="itemQuantity" value="1" />
                       <input type="hidden" name="itemAmount" value="40.00" />
                       <input type="hidden" name="itemWeight" value="" />
                       <input type="hidden" name="itemShippingCost" value="0.00" />
                       <input type="submit" value="Solicitar Compra" />
                   </form>

 

Tenho que baixar algum arquivo do JQUERY ? se sim aonde ?

 

 

pagseguro/comprar_pontos.php

error_reporting(E_ERROR | E_WARNING | E_PARSE); 
include("../../../config/config.php");
$dia = date('d/m/Y'); 
$liberado = "N"; 
	$inseri = "INSERT INTO `{$tabela18}`  (CODIGOID_PONTOS_EMP,									  	QUANTIDADE_PONTOS_EMP,									  	VALOR_PONTOS_EMP,									  	LIBERADO_PONTOS_EMP, 									  	DATACADASTRO_PONTOS_EMP) VALUES   (									  	'".$_SESSION["ID_EMP"]."',									  	'".$_POST["itemDescription"]."', 									  	'".$_POST["itemAmount"]."',									  	'".$liberado."',									  	'".$dia."')"; 
	$query = mysql_query($inseri)or die(mysql_error()); 

 

 

 

Não esta abrindo nada do pagseguro... pode me explicar melhor como usar esse script

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seria algo mais ou menos assim

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Untitled Document</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>

function checkout(f) {	

	$.ajax({
	   type: 'POST',
	   url: 'gravaNoBanco.php',//sua pagina aqui
	   data: $("#" + f.id).serialize(),
	   success: function(msg){
		   return true
		   },
	   error: function(msg){
		   alert('Ocorreu erro.')
		   },
	});
	return false;
}
</script>
</head>

<body>

<form name="form1" id="form1"  method="post" action="www.google.com.br" onSubmit="return checkout(this)">
                   	<input type="hidden" name="receiverEmail" value="meuEmail@hotmail.com" />
                   	<input type="hidden" name="currency" value="BRL" />
                   	<input type="hidden" name="itemId" value="ss" />
                   	<input type="hidden" name="itemDescription" value="10" />
                   	<input type="hidden" name="itemQuantity" value="1" />
                   	<input type="hidden" name="itemAmount" value="40.00" />
                   	<input type="hidden" name="itemWeight" value="" />
                   	<input type="hidden" name="itemShippingCost" value="0.00" />
                   	<input type="submit" value="Solicitar Compra" />
               	</form>
</body>
</html>

 

 

Creio que para você seria interessante utilizar a API do PagSeguro, que nesse caso o tratamento é envio é no seu servidor, assim você consegue atualizar o banco antes de enviar para o pagSeguro e deixa todos os dados de forma oculta.

http://links.soudev.com.br/desenvolvimento/criando-uma-requisicao-de-pagamento-do-pagseguro-via-xml-usando-php-%E2%80%93-sem-utilizar-a-biblioteca-oficial-|-sounoob/

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou integrando o script em API que você me indicou, estou com umas pequenas duvidas no xml .

 

- ali em <items> o comprador so vai fazer uma solicitação de compra por vez , então eu apenas retirei um <item></item>, ta certo ?

- como so vai poder fazer uma solicitação de compra por vez, em <id> pode ser tudo igual ? (msm numero).

o que significa o amount ? é o preço ?

o que significa o weight ?

- o que significa <reference>REF1234</reference> ?? devo alterar ?

- em <phone> gostaria de colocar o DDD jundo com o fone posso ?

 

- em <shipping> o produto a ser comprado sera pontos para ser usado no próprio site, então ñ será preciso o endereço do comprado, eu retirei.

 

a variavel xml ficou assim.



$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>
		<checkout>
			<currency>BRL</currency>
			<redirectURL>http://www.meusite.com.br/pagseguro/retorno.php</redirectURL>
			<items>
				<item>
					<id>".$_POST["itemId"]."</id>
					<description>".$_POST["itemDescription"]." Pontos</description>
					<amount>".$_POST["itemAmount"]."</amount>
					<quantity>".$_POST["itemQuantity"]."</quantity>
					<weight>".$_POST["itemWeight"]."</weight>
				</item>
			</items>
			<reference>REF1234</reference>
			<sender>
				<name>".$linha["NOME_PROPRIETARIO_EMP"]."</name>
				<email>".$linha["EMAIL_PROPRIETARIO_EMP"]."</email>
				<phone>
					<number>".$linha["TELEFONE_PROPRIETARIO_EMP"]."</number>
				</phone>
			</sender>
		</checkout>";

 

 

 

dessa forma eu fis um teste e deu erro a leitura parou aki

if(count($xml -> error) > 0){

header('Location: paginaDeErro.php');

exit;

}

porque sera ?

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei se fis oq você pedio, mas coloquei um

echo count($xml -> error);

retorno o valor 2

coloquei

echo $xml;

não retorno nada

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se usando

echo count($xml -> error);

ele gerou o numero dois, isso significa que deu dois erros...

 

Tente usar

print_r($xml -> error)

Ou

print_r($xml)

 

Você irá visualizar os erros gerados

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, com o print_r($xml) deu o seguinte erro

SimpleXMLElement Object ( [error] => Array ( [0] => SimpleXMLElement Object (

 => 11014 [message] => senderPhone invalid value: {0} ) [1] => SimpleXMLElement Object ( [code] => 11035 [message] => Item weight invalid Value: {0} ) ) )[/b]

[b]

[/b]

e com [color=#555753][font=monospace][size=2][color=#000000]print_r[/color][color=#666600]([/color][color=#000000]$xml [/color][color=#666600]->[/color][color=#000000] error[/color][color=#666600])[/color][/size][/font][/color]

[color=#555753][font=monospace][size=2][color=#666600]

[/color][/size][/font][/color]

[b]SimpleXMLElement Object ( [code] => 11035 [message] => Item weight invalid Value: {0} )[/b]

[b]

[/b]

[font='Times New Roman][size=3]o que significa ?[/size][/font]

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso quer dizer que o telefone e weight esta sendo enviado errado ?

 

olha o weight esta vazio, devo preenche algo ? se sim, o que ?

 

o phone - number esta buscando do Banco de dados dessa forma (00) 0000-0000

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que está vazio?

tenta passar zero

<weight>0</weight>

Ou então remove o <weight>

 

O numero de telefone não pode estar zerado

Ou informe um válido ou então remova o parametro

Compartilhar este post


Link para o post
Compartilhar em outros sites

obrigado, deu certo, a variavel xml ficou assim

 


$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>
		<checkout>
			<currency>BRL</currency>
			<redirectURL>http://www.semnome.com.br/login/parc/pagseguro/retorno.php</redirectURL>
			<items>
				<item>
					<id>".$_POST["itemId"]."</id>
					<description>".$_POST["itemDescription"]." Pontos</description>
					<amount>".$_POST["itemAmount"]."</amount>
					<quantity>".$_POST["itemQuantity"]."</quantity>
				</item>
			</items>
			<reference>REF1234</reference>
			<sender>
				<name>".$linha["NOME_PROPRIETARIO_EMP"]."</name>
				<email>".$linha["EMAIL_PROPRIETARIO_EMP"]."</email>
				<phone>
					<areaCode>".$DDD."</areaCode>
					<number>".$tel."</number>
				</phone>
			</sender>
			<shipping>
           <type>1</type>
           <address>
               <street>".$linha["ENDERECO_PROPRIETARIO_EMP"]."</street>
               <number>".$linha["NUMERO_PROPRIETARIO_EMP"]."</number>
               <complement>".$linha["COMPLEMENTO_PROPRIETARIO_EMP"]."</complement>
               <district>".$linha["BAIRRO_PROPRIETARIO_EMP"]."</district>
               <postalCode>".$cep."</postalCode>
               <city>".$linha["CIDADE_PROPRIETARIO_EMP"]."</city>
               <state>".$estado."</state>
               <country>".$linha["PAISES_PROPRIETARIO_EMP"]."</country>
           </address>
       </shipping>
		</checkout>";

 

 

como faço para apos o pagamento retornar ao meu site ?

 

ex: quando comprador clica no botão para fazer a compra e não faz o pagamento. vamos supor que ele deixa pra depois

tinha que ter um link para ele ter acesse na fatura criada, como faço isso ?

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Transação abandonada tem um tópico referente a isso.

http://forum.imasters.com.br/topic/446598-recuperar-transacao-abandonada/page__p__1765016__hl__abandonada__fromsearch__1#entry1765016

 

Retorno de dados tem uma área do fórum só para isso

http://forum.imasters.com.br/forum/313-retorno-automatico/

 

Se o assunto do tópico foi resolvido então posta as outras duvidas nos tópicos referente a sua duvida.

Antes de criar um novo tópico veja se não existe algum sobre o mesmo assunto.

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.