Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Eu estou desenvolvendo um carrinho de compras num arquivo chamando carrinho.php e entre os scripts disponíveis da API para pagar através PagSeguro escolhi um que chama um arquivo com as informações da API (pagseguro.php), pega os dados presente nele e abre API do Checkout Transparente para o pagamento. Este é o script:
<script>
function enviaPagseguro(){
$.post('pagseguro.php','',function(data){
$('#code').val(data);
$('#comprar').submit();
})
}
</script>
O que eu não estou conseguindo fazer é passar o valor total das compras do carrinho para o arquivo com os parâmetros da APPI. Com valores fixos a API funciona bem, como posso exemplificar com os seguintes parâmetros:
$data['token'] =OCULTO';
$data['email'] = OCULTO';
$data['currency'] = 'BRL';
$data['itemId1'] = '1';
$data['itemQuantity1'] = '1';
$data['itemDescription1'] = 'Produto de Teste';
$data['itemAmount1'] = '299.00';
$url = 'https://ws.pagseguro.uol.com.br/v2/checkout';
O que eu desejo é fazer três coisas, que não estou sabendo fazer.
Primeira: passar como valor do parâmetro $data['itemAmount1'] a variável que possuo na página que faz a totalização da compra, chamada de $ttcompra;
Segunda: passar como valor do parâmetro $data['itemQuantity1'] a variável que mostra o total de itens, chamada $ttitems.
E a terceira é que desejaria que nas informações a serem enviadas para o PagSeguro estivesse um novo item, com o valor do código da compra.
É possível isso nesta API eu estou utilizando? Busquei na documentação dela no PagSeguro e não achei. Eles estão mudando a página e não se encontra muita coisa.Ajudou sim Felipe, com a sugestão de estrutura da tabela para controlar a ordem dos pedidos. Porém, olhando creio que eu não fui claro no pedido de informação, pois não mencionei que o que eu não estou conseguindo fazer é passar as referidas variaveis do PHP, $ttcompra e $ttitens, da página onde está o carrinho, chamada carrinho.php, para a página onde está o script do PagSeguro, chamada pagseguro.php.
O carrinho funciona, o script do Pag Seguro com valores estáticos e de teste funciona, mas não consigo fazer a passagem acima, de um arquivo para o outro.
Você pode armazenar os valores utilizando
sessões, assim, poderá transitar entre as
requisições de páginas "sem perder" os
valores presentes nas mesmas...
Aureo Almeida
Se você quer transitar valores e variáveis de um arquivo para outro existe apenas 2 meios.
Ou via FORM usando os métodos POST e GET ou no PHP criando variáveis de SESSÃO.
Exemplo:
Vamos dizer que eu estou na página carrinho.php e eu tenho a variável abaixo que eu quero usar dentro do pagseguro.php.
//OBRIGATORIAMENTE eu tenho que ter o comando
SESSION_START(); //Este comando inicia a area de variável de sessão.
$_SESSION['VarQualquer'] = 'Conteudo'; //Aqui eu criei a variavel de sessão VARQUALQUER que eu quero usar na outra página.
//Pronto, variável atribuida,
Agora eu estou em ***pagseguro.php*** e quero usar aquela variável que declarei dentro de ***carrinho.php***.
//Para que eu possa ler a variável acima neste arquivo, eu tenho OBRIGATORIAMENTE colocar o mesmo comando
SESSION_START(); //Este comando inicia a area de variável de sessão.
//Agora eu posso fazer o que quiser com aquela variável.
echo $_SESSION['VarQualquer'];
if (!empty($_SESSION['VarQualquer'])){
echo "Variável com valor: ".$_SESSION['VarQualquer'];
} else {
echo "Variável vazia.";
}
$_SESSION['VarQualquer'] = "Novo valor";
echo $_SESSION['VarQualquer'];
Então vamos ao que eu entendi do seu problema:
Você tem na sua página*** CARRINHO.PHP*** os seguintes campos com os seguintes conteúdos:
$data['token'] = 'OCULTO';
$data['email'] = 'OCULTO';
$data['currency'] = 'BRL';
$data['itemId1'] = '1';
$data['itemQuantity1'] = '1';
$data['itemDescription1'] = 'Produto de Teste';
$data['itemAmount1'] = '299.00';
Se estas variaveis estão sendo transitadas com os valores FIXOS como mostra acima de ***CARRINHO.PHP*** para ***PAGSEGURO.PHP*** eu acredito que desta forma não deve funcionar de nenhum jeito, mas se você diz que funcionar com os valores acima, então o exemplo abaixo **TEM** que funcionar:
//Experimente desta forma e altere os valores, mas tome cuidado para
//não colocar informações que a API não estão preparados para receber;
$var_do_php_token = 'OCULTO';
$var_do_php_email = 'OCULTO';
$var_do_php_tipo_moeda = 'BRL';
$var_do_php_iten = '1';
$var_do_php_qtd = '2';
$var_do_php_desc = 'Carrinho de controle remoto';
$var_do_php_montante = '2000.00';
$data['token'] = $var_do_php_token;
$data['email'] = $var_do_php_email;
$data['currency'] = $var_do_php_tipo_moeda;
$data['itemId1'] = $var_do_php_iten;
$data['itemQuantity1'] = $var_do_php_qtd;
$data['itemDescription1'] = $var_do_php_desc;
$data['itemAmount1'] = $var_do_php_montante;
Agora se não for isso, eu realmente não entendi o que você esta tentando fazer.
Mas recomendo você a usar no lugar de $data as variáveis de $_SESSION assim:
Página ***CARRINHO.PHP***
//Experimente desta forma e altere os valores, mas tome cuidado para
//não colocar informações que a API não estão preparados para receber;
$var_do_php_token = 'OCULTO';
$var_do_php_email = 'OCULTO';
$var_do_php_tipo_moeda = 'BRL';
$var_do_php_iten = '1';
$var_do_php_qtd = '2';
$var_do_php_desc = 'Carrinho de controle remoto';
$var_do_php_montante = '2000.00';
SESSION_START();
$_SESSION['token'] = $var_do_php_token;
$_SESSION['email'] = $var_do_php_email;
$_SESSION['currency'] = $var_do_php_tipo_moeda;
$_SESSION['itemId1'] = $var_do_php_iten;
$_SESSION['itemQuantity1'] = $var_do_php_qtd;
$_SESSION['itemDescription1'] = $var_do_php_desc;
$_SESSION['itemAmount1'] = $var_do_php_montante;
E na sua pagina ***PAGSEGURO.PHP*** você faz assim:
SESSION_START();
echo $_SESSION['token'];
echo $_SESSION['email'];
echo $_SESSION['currency'];
echo $_SESSION['itemId1'];
echo $_SESSION['itemQuantity1'];
echo $_SESSION['itemDescription1']
echo $_SESSION['itemAmount1']
Espero ter ajudado de alguma forma
Att.
***Felipe Guedes Coutinho***Obrigado pela orientação Felipe. O problema era um pouco diferente da compreensão que tiveste, mas tentei tua solução, pois poderia se aplicar, e infelizmente o lightbox do pag seguro não funcionou. Fica rodando.
Na verdade, é na página do PagSeguro que eu tenho as seguintes variáveis.
$data['token'] = 'Oculto';
$data['email'] = 'Oculto';
$data['currency'] = 'BRL';
$data['itemId1'] = '1';
$data['itemQuantity1'] = '1';
$data['itemDescription1'] = 'Produto de Teste';
$data['itemAmount1'] = '200.00';
Eu tenho uma sessão na página carrinho.php chamada provisoriamente de carrinho: $_SESSION['carrinho'] = array();. Ela funciona para armazenar os produtos.
O que eu gostaria de passar para a página pagseguro.php são duas variáveis: uma com o valor total da compra no carrinho, e outra com a descrição do produto. A primeira é a variável $produto_nome e a segunda é a $ttcomprabrasil, definidas na página carrinho.php.
$data['itemDescription1'] = $produto_nome;
$data['itemAmount1'] = $ttcomprabrasil;
Talvez fique mais claro o problema, que eu não tenha conseguido passar concretamente, pois trabalhei com o problema mais geral, e que eu ainda não consegui resolver.Aureo Almeida
Acho que entendi.
Dentro de CARRINHO.PHP você tem 2 variáveis:
ESSA --> $produto_nome e ESSA --> $ttcomprabrasil
É isso? E você quer passar essas duas variáveis para dentro da página PAGSEGURO.PHP.
Dentro de CARRINHO.PHP você faz isso:
SESSION_START(); //Obrigatório colocar SESSION_START();
//Cria 2 variáveis de sessão para armazenar o conteudo e passar para ***PAGSEGURO.PHP***
$_SESSION['descricao'] = $produto_nome;
$_SESSION['valorTotal'] = $ttcomprabrasil;
//Pronto, agora você tem duas variáveis de sessão que pode utilizar em outras páginas.
//Como por exemplo ***PAGSEGURO.PHP***
Em **PAGSEGURO.PHP** você vai fazer o seguinte:
SESSION_START(); //Obrigatório colocar SESSION_START();
$data['itemDescription1'] = $_SESSION['descricao']; //Pegando a variável criada em CARRINHO.PHP
$data['itemAmount1'] = $_SESSION['valorTotal']; //Pegando a variável criada em CARRINHO.PHP
***OBS.:** Apenas tenha em mente que o CONTEUDO dessas duas variáveis de sessão que criamos em **CARRINHO.PHP** e estamos usando em **PAGSEGURO.PHP** precisam ser do **TIPO STRING**, o conteudo precisa estar entre **aspas simples**, se elas não tiverem entre **aspas simples**, na hora que você for fazer a movimentação acima você precisa colocar assim:*
$data['itemDescription1'] = " ' ".$_SESSION['descricao']." ' ";
$data['itemAmount1'] = " ' ".$_SESSION['valorTotal']." ' ";
Se você der um echo nas variáveis de sessão elas tem que aparecer assim:
echo $_SESSION['descricao']
Display: 'desc'
echo $_SESSION['valorTotal']
Display '299.00'
Sem espaço entre as aspas " e simples '.
Se a minha resposta for útil não esqueça de agradecer e votar positivo.
Espero ter ajudado de alguma forma.
Att***Felipe Guedes Coutinho***>
1 hora atrás, Felipe Guedes Coutinho disse:
Se a minha resposta for útil não esqueça de agradecer e votar positivo.
Espero ter ajudado de alguma forma.
AttFelipe Guedes Coutinho
Felipe. Funcionou. Muito obrigado
Apesar de ter resolvida a forma de passar os dados, como informei após realizar um exemplo simples com a proposta que passaste, estou com um problema de concatenação de aspas nas variáveis em tempo de execução.
Fiz como sugeriste, criando as variáveis de sessão na página carrinho.php e passando para a página pagseguro.php. No exemplo simples ok, funcionou e passou os valores que atribui a ela de forma estática. Quando atribuo o valor a ela manualmente, entre aspas simples, ela funciona.
Porém, quando atribuo valor em tempo de execução, não.
EXEMPLIFICANDO
FUNCIONA CORRETAMENTE A DEFINIÇÃO NA PÁGINA CARRINHO.PHP
$ttcomprabrasil= ’50.00’;
$_SESSION['valorTotal'] = $ttcomprabrasil;
NÃO FUNCIONA NA PÁGINA CARRINHO.PHP
$_SESSION['valorTotal'] = $ttcomprabrasil;
A referida variável tem o valor da soma de outras duas:
$ttcomprabrasil = $frete + $valor_total_venda;
Testei e ela funciona e imprime corretamente os valores.
CÓDIGO NA PÁGINA PAGSEGURO.PHP
session_start();
$data['itemDescription1'] = $_SESSION['descricao'];
$data['itemAmount1'] = $_SESSION['valorTotal'];
$data['token'] =;
$data['email'] =;
$data['currency'] = 'BRL';
$data['itemId1'] = '1';
$data['itemQuantity1'] = '1';
$data['itemDescription1'] = "'".$_SESSION['descricao']."'";
$data['itemAmount1'] = "'".$_SESSION['valorTotal']."'";Aureo Almeida
Existem meios de você manipular a variável.
Se você faz a soma de 2 valores, você tera uma variável com conteudo Numérico.
Experimente usar algum comando do PHP que converta.
Vou deixar alguns aqui e você faz os testes para ver se funciona.
Faça assim:
$ttcomprabrasil_string = strval($ttcomprabrasil); //Isso deve converter o conteudo numérico para STRING.
$_SESSION['valorTotal'] = $ttcomprabrasil_string;
Existem outros comandos.
$ttcomprabrasil_string = settype($ttcomprabrasil, "integer"); // $ttcomprabrasil é agora 5 (integer)
$ttcomprabrasil_string = settype($ttcomprabrasil, "string"); // $ttcomprabrasil é agora "1" (string)
Se você quiser ver se o conteudo da sua variável é NUMERICA ou STRING faça isso
echo gettype($ttcomprabrasil); //Vai escrever INTEGER se for Numérico e STRING se for Alphanumérico.
Então para o seu problema você pode usar o *SETTYPE(**$suaVar*, **"string"); ou *strval(****$suaVar**);*
Veja se isso resolve o seu novo problema.
Se a minha resposta for útil não esqueça de agradecer e votar positivo.
Espero ter ajudado de alguma forma.
AttFelipe Guedes Coutinho
Eu estava há meses com o mesmo problema, tentando inputar o valor total da compra em POST para a página pagseguro.php e não ia de jeito nenhum.
Com a dica de utilizar SESSION do Felipe Guedes Coutinho, funcionou! Só precisei adicionar uma regrinha de number_format pq o PagSeguro é rígido com o formato 000.00.
Grande abraço e obrigado pelas dicas preciosíssimas!
Aureo Almeida
Exemplo: '299.00'
Pode ser que você tenha formato de moeda ficando com ponto e virgula, o que pode dar erro.
Segunda: passar como valor do parâmetro $data['itemQuantity1'] a variável que mostra o total de itens, chamada $ttitems.
Resposta: