Ir para conteúdo

POWERED BY:

Arquivado

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

Aureo Almeida

API PagSeguro não reconhece variável em tempo de execução convertida em STRING

Recommended Posts

O Felipe Guedes Coutinho ajudou na resolução de um problema quanto a como passar valores de variáveis de uma página com um carrinho para um arquivo com a API do PagSeguro. Consegui fazer isso através de sessões, e a passagem ocorre normalmente. O problema que surgiu dessa solução, que para o meu contexto é a melhor, é que a API do PagSeguro Lightbox não está reconhecendo variáveis em tempo de execução. Mesmo que convertidas em STRING. O tópico que abri e que creio que se esgotou o problema original em que o Felipe Guedes Coutinho ajudou a resolver foi este:

Colocando o problema. Possuo duas variáveis, uma que contém um nome de produto que quero passar como parâmetro para um pagamento no PagSeguro lightbox, e outra com o valor. Ambas são oriundas de um processo em tempo de execução, e não há problema com ele, pois elas são preenchidas normalmente e os valores são impressos no display. A variável $produto_nome e a $ttBrasil. Elas são repassadas para duas variáveis SESSION:

$_SESSION['descricao'] = $produto_nome;
$_SESSION['valorTotal'] = $ttBrasil;

Na página em que se encontra o script da API do PagSeguro, chamada pagseguro.php, esses valores são recebidos sem problemas (numa condição que explicitarei), de duas formas:

$data['itemDescription1'] = $_SESSION['descricao'];
$data['itemAmount1'] = $_SESSION['valorTotal'];
Ou 
$data['itemDescription1'] = "'".$_SESSION['descricao']."'";
$data['itemAmount1'] = "'".$_SESSION['valorTotal']."'";

O problema é que este processo funciona normalmente e a variável é reconhecida quando o valor é declarado estaticamente e entre aspas simples. Em tempo de execução não.

Funciona quando:

$ttBrasil = '50.00';
$produto_nome = 'Nome de Teste';

Se as variáveis vierem em tempo de execução, mesmo existindo (eu as imprimo no display normalmente), a API do PagSeguro não reconhece. Quando falo em tempo de execução, é as SESSION recebendo diretamente as variáveis:

$_SESSION['descricao'] = $produto_nome;
$_SESSION['valorTotal'] = $ttBrasil;

 

A variável $ttBrasil é DECIMAL no BD, reconhecida como DOUBLE pelo PHP. Eu converti ela para STRING de várias formas, sempre mantendo o problema, mas achei mais adequado usar a função STRING, que converte FLOAT em STRING:

$ttBrasil = (string) $ttBrasil;

Verifiquei após a conversão e ela retorna como do tipo STRING. Uso esses comandos para verificar o tipo de variável e o valor.

echo gettype($ttBrasil);
echo $_SESSION['valorTotal'];

Este é o problema que não consegui resolver.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aureo Almeida

Veja que o exemplo que eu coloquei o resultado FINAL da variável que é a variável que você tem dentro de PAGSEGURO.PHP tem exatamente o conteudo que necessita.

 

//Variável ttBrasil é a soma de dois numericos, logo ela é do tipo INTEGER
$ttBrasil = 1 + 1400000;

//Exibe o TIPO da variável
echo gettype($ttBrasil);

//Exibe o conteudo da variável
echo $ttBrasil."<br>";

//Variável $_SESSION['valorTotal'] esta assumindo uma STRING porque estou concatenando com aspas simples o resultado dela, logo ela é do tipo STRING
$_SESSION['valorTotal'] = "'".number_format($ttBrasil, 2 , ',', '')."'";

//Exibe o TIPO da variável
echo gettype($_SESSION['valorTotal']);

//Exibe o conteudo da variável
echo $_SESSION['valorTotal']."<br>";

//Aqui estou passando para $data['itemDescription1'] o conteudo da variável $_SESSION['valorTotal'] que é uma STRING, logo ela é do tipo STRING também
$data['itemDescription1'] = $_SESSION['valorTotal'];

//Exibe o TIPO da variável
echo gettype($data['itemDescription1']);

//Exibe o conteudo da variável
echo $data['itemDescription1'];

Então o problema ai é outro e não o TIPO da STRING.

 

Tente entender o que está acontecendo nas suas movimentações, recomendo você a fazer os DISPLAY's do TIPO da VARIÁVEL e logo em seguida o DISPLAY's do CONTEÚDO da VARIÁVEL.

 

Se não funcionar o jeito vai se você colocar os códigos completos para que possamos fazer o próprio teste para uma melhor analise.

 

Mas na teoria TEM que FUNCIONAR.

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala pessoal.
      Tudo bem?
       
      Tenho o seguinte código que funcionda perfeitamente:
       
      date_default_timezone_set("America/Sao_Paulo");
      $d_inicio= date('Y-m-d');
      $d_final= date('Y-m-d', strtotime('+30  day'));
       
      Mas eu quero definir a quantidade de dias pegando o valor que a variável:
       
      date_default_timezone_set("America/Sao_Paulo");
      $tempo = 30;
      $d_inicio= date('Y-m-d');
      $d_final= date('Y-m-d', strtotime('+$tempo  day'));
       
      Mas quando declaro com variável não funciona.
      Obrigado pela ajuda.
    • Por emmanuelsiqueira30
      Pessoal boa tarde.
      Estou precisando de um help na seguinte questão:
      Estou com um formulário em PHP, chamada cadastro.php que passa um POST para a página de transação chamada resumo-boleto.php, porém o arquivo que possui as configurações (config.php) de E-mail e Token, quando uso o do Sandbox funciona e gera o boleto normalmente mas ao colocar em produção não passa nenhum parametro.
       
       
    • Por emmanuelsiqueira30
      Pessoal boa tarde.
      Estou precisando de um help na seguinte questão:
      Estou com um formulário em PHP, chamada cadastro.php que passa um POST para a página de transação chamada resumo-boleto.php, porém o arquivo que possui as configurações (config.php) de E-mail e Token, quando uso o do Sandbox funciona e gera o boleto normalmente mas ao colocar em produção não passa nenhum parametro.
    • Por Leandro T.
      pessoal bom dia alguém poderia me ajudar com o FormValidation?
       
      "nomefuncionario": {
                  validators: {
                      
                  
                    notEmpty: {
                      message: "Nome completo do funcionário é obrigatório."
                    } , <=== este funciona normalmente
                      
                      callback: {  // agora o callback nao consigo fazer funcionar
                              message: 'este nome não é valido',
                              callback: function (input) {
                                  if (input.value = 'algum valor digitado') {
                                      return true
                                  } }},
                      
                      
                      
                  }
    • Por nathanmoreira
      Após diversos cálculos provindos de um código, recebo um número inteiro ao qual não sei o tamanho ao certo (pode variar de 1 pra frente). Quero passar esse número para string e formatar ele de maneira a colocar um ,00 no final e, a cada 3 números antes da virgula, um ponto. Ou seja, deixar o número num formato como: 45.114.477,00
       
      Como fazer? 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.