Ir para conteúdo

POWERED BY:

Arquivado

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

gremio10

[Resolvido] Problema para transformar variáveis

Recommended Posts

Fala Galera, eu estou trabalhando com valores salvos no banco de dados, e na hora de transformar ele em inteiro, e enviar para o Gateway de pagamento, ele me retorna não capturado, o estranho é que se na variável eu colocar um valor inteiro, ex: 1000, ele captura, dando o retorno correto.

 

esse é a tabela que busca os valores

 

CREATE TABLE `payment_way` (
 `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `payment` varchar(50) DEFAULT NULL,
 `value` int(10) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

 

eu mando do value, que vem (string) virar (int), mas ele não consegue pegar.

 

Estou usando a classe da Cielo do João Batista, que funciona perfeitamente, mas é esse problema que está me encomodando =)...

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou trabalhando com valores inteiros, não estou mexendo neles como monetário.

 

Apenas estou me referindo que quando busco o valor inteiro do meu banco, ele vem em formato string, e quando o transformo para int novamente, a Cielo não consegue capturar, e quando eu coloco um valor estático na variável, ele consegue.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo gremio10, Já tentou debugar? var_dump($variavel) para ver se realmente ela é do tipo int no momento de enviar o valor para captura?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu estou fazendo isso, quando ele vem do banco ele me retorna

 

string '1990' (length=4)

 

quando eu dou o (int)

 

int 1990

 

quando dou o (float)

 

float 1990

 

:huh:

 

estranho =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é .. estranho ..

 

mysql> use imasters;
Database changed
mysql> create table cielo(
   ->       valor int( 11 ) not null
   -> )engine = myisam;
Query OK, 0 rows affected (0.14 sec)

mysql> insert into cielo values( 100 ) , ( 100.00 ) , ( '100.00' ) , ( '100' ) ;

Query OK, 4 rows affected (0.06 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from cielo;
+-------+
| valor |
+-------+
|   100 |
|   100 |
|   100 |
|   100 |
+-------+
4 rows in set (0.03 sec)

mysql> alter table cielo add valor1 float( 9 , 2 );
Query OK, 4 rows affected (0.03 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from cielo;
+-------+--------+
| valor | valor1 |
+-------+--------+
|   100 |   NULL |
|   100 |   NULL |
|   100 |   NULL |
|   100 |   NULL |
+-------+--------+
4 rows in set (0.00 sec)

mysql> update cielo set valor1 = 100.00 ;
Query OK, 4 rows affected (0.05 sec)
Rows matched: 4  Changed: 4  Warnings: 0

mysql> select * from cielo;
+-------+--------+
| valor | valor1 |
+-------+--------+
|   100 | 100.00 |
|   100 | 100.00 |
|   100 | 100.00 |
|   100 | 100.00 |
+-------+--------+
4 rows in set (0.00 sec)

mysql>

 

Saída:

<?php
$Numbers = Array ( 
	 100.00 , 
	 100 ,
	 '100' 
) ; 
echo '<pre>';

var_dump ( $Numbers ) ;

$a = ( int ) $Numbers[ 0 ] ;
$b = ( int ) $Numbers[ 1 ] ;
$c = ( int ) $Numbers[ 2 ] ; 

var_dump( $a , $b , $c ) ;

$PDO = new PDO( 'mysql:dbname=imasters' , 'root' , '?' );
$Data = $PDO->query( 'SELECT * FROM `cielo`' )->fetchAll( PDO::FETCH_ASSOC ) ;

var_dump ( $Data ) ;

$a = ( int ) $Data[ 0 ][ 'valor' ] ;
$b = ( int ) $Data[ 1 ][ 'valor' ] ;
$c = ( int ) $Data[ 2 ][ 'valor' ] ; 
$d = ( int ) $Data[ 3 ][ 'valor' ] ;

$aa = ( float ) $Data[ 0 ][ 'valor1' ] ;
$bb = ( float ) $Data[ 1 ][ 'valor1' ] ;
$cc = ( float ) $Data[ 2 ][ 'valor1' ] ;
$dd = ( float ) $Data[ 3 ][ 'valor1' ] ;

var_dump ( $a , $b , $c , $d , $aa , $bb , $cc , $dd );

 

Saída:

array(3) {
 [0]=>
 float(100)
 [1]=>
 int(100)
 [2]=>
 string(3) "100"
}
int(100)
int(100)
int(100)
array(4) {
 [0]=>
 array(2) {
   ["valor"]=>
   string(3) "100"
   ["valor1"]=>
   string(6) "100.00"
 }
 [1]=>
 array(2) {
   ["valor"]=>
   string(3) "100"
   ["valor1"]=>
   string(6) "100.00"
 }
 [2]=>
 array(2) {
   ["valor"]=>
   string(3) "100"
   ["valor1"]=>
   string(6) "100.00"
 }
 [3]=>
 array(2) {
   ["valor"]=>
   string(3) "100"
   ["valor1"]=>
   string(6) "100.00"
 }
}
int(100)
int(100)
int(100)
int(100)
float(100)
float(100)
float(100)
float(100)

 

Isso aí ta me cheirando bug

 

:)

 

Mostra como você está atrelando isso no método que seta o valor do pagamento da cielo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$profissionais_payment_way = new Application_Model_ProfissionalPaymentWay();
$paymentWay = $profissionais_payment_way->listByUserId( $field[ "id" ] );

valuePay = (int)$paymentWay[ "value" ];

Zend_Debug::dump( $paymentWay[ "value" ] );exit;


if( $creditCard[ "credit_card_id" ] == 1 )
               {
                   $card = Zend_Cielo_Cielo_CreditCard::VISA;
               }
               else
               {
                   $card = Zend_Cielo_Cielo_CreditCard::MASTER_CARD;
               }

               $cielo = new Zend_Cielo_Execute_Payment();
               $cielo->setCard( $card );

               $orderNumber = $field[ "id" ];
               $orderValue = $valuePay;

               $paymentProduct = Zend_Cielo_Cielo_PaymentProduct::ONE_TIME_PAYMENT;

               $cielo_id = $cielo->buildRequest( $creditCard[ "card_number" ], $creditCard[ "card_validation" ], 1, $creditCard[ "card_security_code" ], $orderNumber, $orderValue, $paymentProduct );

 

 

Zend_Cielo_Cielo_Execute_Payment()

 

<?php

class Zend_Cielo_Execute_Payment 
{    
   protected $card;

   public function buildRequest( $cardNumber, $cardExpiration, $indicator, $securityCode, $orderNumber, $orderValue, $paymentProduct, $parcels = 1 )
   {        
       if( $this->getCard() == "" || is_null( $this->getCard() ) )
       {
           throw new Zend_Exception( "Você deve atribuir um valor para o cartão." );
           exit;
       }

       $cardNumber = $this->decode( $cardNumber );
       $securityCode = $this->decode( $securityCode );
       $orderValue = (float)$orderValue;

       $cielo = new Zend_Cielo_Cielo_Cielo( Zend_Cielo_Cielo_CieloMode::DEPLOYMENT );

       $cielo->setAffiliationCode( "xx" );
       $cielo->setAffiliationKey( "xx" );

       $tid = $cielo->buildTIDRequest( $this->getCard(), Zend_Cielo_Cielo_PaymentProduct::ONE_TIME_PAYMENT )->call()->getTID();

       $transaction = $cielo
                           ->automaticCapture()
                           ->buildAuthorizationRequest( $tid, $this->getCard(), $cardNumber, $cardExpiration, $indicator, $securityCode, $orderNumber, $orderValue, $paymentProduct )
                           ->call();

       $authorization = $transaction->getAuthorization();

       try
       {
           $transactionTID = $transaction->getTID();
           $transactionPan = $transaction->getPan();
           $transactionStatus = $transaction->getStatus();
           $authorizationValue = $authorization->getValue();
           $authorizationDateTime = $authorization->getDateTime();

           $card = array();
           $card[ "tid" ] = $transactionTID;
           $card[ "pan" ] = $transactionPan;
           $card[ "status" ] = $transactionStatus;
           $card[ "value" ] = $authorizationValue;
           $card[ "date" ] = $authorizationDateTime;
           $card[ "profissionais_id" ] = $orderNumber; //id do profissional

           $cielo = new Application_Model_Cielo();
           $cielo_id = $cielo->insert( $card );

           return $cielo_id;
       }
       catch( Zend_Db_Table_Exception $e )
       {

       }
   }  
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa é bom lembrar que para simular uma transação autorizada, é necessário que no valor da transação os dois últimos dígitos seja 0. Do contrário, toda autorização será negada, fiz um experimento aqui .. realmente está negando as autorizações, mesmo passando o valor diretamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites
é necessário que no valor da transação os dois últimos dígitos seja 0

 

obrigado Andrey pela dica, dei uma lida novamente no que você falou e mudei os valores no meu banco, e realmente, como você falou, quando coloquei dois 0 ele foi capturado corretamente.

 

Abraços.

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.