Jump to content
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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By renzogr
      Olá Masters
       
      Estou precisando incluir uma string num campo de uma tabela mysql.
      É o seguinte:
      Tenho um campo contendo instruções de uma receita culinária e preciso colocar a string "-- " (sem aspas) no início de cada linha do campo das instruções.
      Já tentei o 
      UPDATE tabela SET variavel = concat("-- ", variavel); mas ele só altera a primeira linha...  Preciso encontrar as demais linhas dentro do campo e colocar a string na frente.
       
      Alguém tem uma ideia de como fazer ?
       
    • By diogoglobaltec
      criei um plano de adesão no pagseguro, mas quando cobro a assinatura no painel o valor vem errado
       
      CÓDIGO DATA TIPO VALOR (R$) STATUS 61056E69760C4E67B9128A113AA2B397 12/09/2019 15:09 Pagamento 1,50 Aguardando pagamento  
       
      eu queria que o valor cobrado fosse R$ 150,00 e não 1,50...  o curl que enviei para gerar o plano é esse :
       
       
      curl --location --request POST "https://ws.sandbox.pagseguro.uol.com.br/pre-approvals/request/?email=meuemail&token=meutoken" \
        --header "Accept: application/vnd.pagseguro.com.br.v3+xml;charset=ISO-8859-1" \
        --header "Content-Type: application/xml;charset=ISO-8859-1" \
        --data "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" standalone=\"yes\"?>
      <preApprovalRequest>
      <preApproval>
      <name>Plano - Teste</name>
      <reference>TESTEREF</reference>
      <charge>AUTO</charge>
      <period>MONTHLY</period>
      <amountPerPayment>200.00</amountPerPayment>
      <cancelURL>http://sitedocliente.com</cancelURL>
      <membershipFee>150.00</membershipFee>
      <trialPeriodDuration>28</trialPeriodDuration>
      </preApproval>
      <maxUses>500</maxUses>
      </preApprovalRequest>"
       
       
      então ...  acho que errei algo no plano de adesão ....
    • By Antena
      Olá pessoal, 
      Estou com um problema , onde o script não está possibilitando a inserção de novos dados desde o dia 02/09. O erro apresentado é este:
       
      02-Sep-2019 13:11:18 America/Fortaleza] PHP Notice: Uninitialized string offset: 17 in /home/xxx/xxx/site/config/func.php on line 30 A parte da função que apresenta este problema é este:
       
      function remove_extra_in_url($url) { $extra=array('https://','http://','www.',' '); $url=strtolower($url); $url=str_replace($extra,'',$url); $i=0; $site_name=''; $len=strlen($url); while($url[$i]!='/' && $url[$i]!='?' && $i<$len) { $site_name.=$url[$i]; $i++; } return $site_name; } Mais especificamente esta linha:
       
      while($url[$i]!='/' && $url[$i]!='?' && $i<$len)  
       
      Alguém poderia me ajudar?
    • By Flaviaac
      Boa tarde galera!
       
      Estou tendo um problema esquisito aqui.
      Sou iniciante e não faço a mínima ideia do que pode ser.
       
       
      Veja só, no campo dropdown abaixo coloquei no "value" o ID, mas ele salva no banco como tipo STRING e não INT.
      <?php $sql = "SELECT id, sigla FROM local ORDER BY sigla ASC"; $result = $conn->query($sql); ?> . . . <select name="local" class="form-control"> <option selected>Selecione...</option> <?php while($row = $result->fetch_assoc()){ echo "<option value=".$row['id'].">".$row['sigla']."</option>"; } ?> </select> . . . Dei um var_dump() pra saber o que apareceria e ele mostra como STRING.
      <pre> <?php $sql = "SELECT id, sigla FROM local ORDER BY sigla ASC"; $result = $conn->query($sql); $row = $result->fetch_assoc(); var_dump($row['id']); ?> </pre> Resultado:
      string(1) "5"  
       
      Esse é o Banco de dados:
      Coloquei a coluna ID como INT.
      -- phpMyAdmin SQL Dump -- version 4.8.3 -- https://www.phpmyadmin.net/ SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- Banco de dados: `arq` -- -- -------------------------------------------------------- -- -- Estrutura para tabela `local` -- CREATE TABLE `local` ( `id` int(11) NOT NULL, `SIGLA` mediumtext NOT NULL, `LOCAL` mediumtext NOT NULL, `TELEFONE` mediumtext NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Fazendo dump de dados para tabela `local` -- INSERT INTO `local` (`id`, `SIGLA`, `LOCAL`, `TELEFONE`) VALUES (1, 'AAC', 'AAC', '2222-2222'), (2, 'DSV', 'DSV', '1111-1111'), (3, 'SCA', 'SCA', '3333-3333'); -- -- Índices de tabelas apagadas -- -- -- Índices de tabela `local` -- ALTER TABLE `local` ADD PRIMARY KEY (`id`); -- -- AUTO_INCREMENT de tabelas apagadas -- -- -- AUTO_INCREMENT de tabela `local` -- ALTER TABLE `local` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; Obrigada pessoal!
       
    • By icaroperetti45
      Faça um programa em JAVA que deve ficar lendo uma letra por vez do teclado até que o operador digite a letra x. Após o operador digitar x o programa deve apresentar na tela o número de vezes que o operador digitou dois caracteres iguais em sequencia.
       
      Rapazeada, sou iniciante no java e gostaria de uma ajuda com o Exercício a seguir! Gostaria de saber como utilizo o != para string no while!
       
      package br.edu.ifcvideira.Lista3;
      import java.util.Scanner;
      public class Exercicio7 {
              public static void main(String[] args) {
                  Scanner in = new Scanner(System.in);
                  
                  String letra = null;
                  String letraCorreta = "x";
                  
                  while (letra.equals(letraCorreta)) {
                      
                  }
              }        
      }
       
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.