Bem vindo ao brockdev.com, não seja tímido compartilhe suas duvidas e conhecimento. :D

Váriavel valor total do pedido ?

Bom dia gurizada,


Preciso de um help! kk eu tenho que achar a variavel do módulo pagseguro do bruno que carrega o valor total do pedido pra poder somar a essa variável um valor fixo, alguma ideia ?

«1345

Comentários

  • baixei o módulo do pagseguro do site deles mesmo e to procurando a variavel do pagseguro q carrega o toal do pedido ou as taxas extras achei esse código do PaymentMethod.php




      //Define Extra Amount Information
            $PaymentRequest->setExtraAmount($this->_extraAmount());


            try {
                $payment_url = $PaymentRequest->register($this->getCredentialsInformation());
                
            } catch (PagSeguroServiceException $ex) {
                Mage::log($ex->getMessage());
                $this->_redirectUrl(Mage::getUrl() . 'checkout/onepage');
            }


            return $payment_url;
        }


        /**
         * Extra Amount
         * @return extra amount
         */
        private function _extraAmount()
        {
            $_tax_amount = self::toFloat($this->Order->getTaxAmount());
            $_discount_amount = self::toFloat($this->Order->getBaseDiscountAmount());


            return PagSeguroHelper::decimalFormat($_discount_amount + $_tax_amount);
        }
     


  • Abraao Marques Moderador Global
    brunowd, tem o método:

        private static function toFloat($_value)
        {
            return (float) $_value;
        }


    Ele é chamado no método:

        private function getItensInformation()
        {
            $Itens = $this->Order->getAllVisibleItems();

            $PagSeguroItens = array();

            //CarShop Items
            foreach ($Itens as $item) {
                    $PagSeguroItem = new PagSeguroItem();
                    $PagSeguroItem->setId($item->getId());
                    $PagSeguroItem->setDescription(self::fixStringLength($item->getName(), 255));
                    $PagSeguroItem->setQuantity(self::toFloat($item->getQtyOrdered()));
                    $PagSeguroItem->setWeight(round($item->getWeight()));
                    $PagSeguroItem->setAmount(self::toFloat($item->getPrice()));

                    array_push($PagSeguroItens, $PagSeguroItem);
            }

            return $PagSeguroItens;
        }


    Faça o seguinte: cria uma constante (const TAXA), atribua o valor que você precisa e no método chame-a. Depois, testa e manda o resultado para nós aqui!!!

        private static function toFloat($_value)
        {
            return (float) $_value + self::TAXA;
        }


    Um abraço!
  • Faça o seguinte: cria uma constante (const TAXA), atribua o valor que você precisa e no método chame-a. Depois, testa e manda o resultado para nós aqui!!!

        private static function toFloat($_value)
        {
            return (float) $_value + self::TAXA;
        }

    Realmente Abraao Marques, muito obrigado pela luz kk
    E que arquivo está o método ? Mas o chato disso tudo é que não sei "programar", ae fica difícil 
  • Abraao Marques Moderador Global
    No mesmo que você referenciou: PaymentMethod.php

    No início do arquivo tem a constante: const REAL = 'REAL';

    Logo abaixo dela, acrescente a constante: const TAXA = '5,00';

    Esse valor que passei aí é apenas para exemplo.

    Aí, testa e vê no que dá e posta o resultado aqui.


    Um abraço.



  • Abraao Marques Moderador Global
    Se não funcionar, tenta escrever a constante dessa maneira: const TAXA = 5.00;

    Notou a diferença?

    Testa novamente.


    Um abraço.
  • Obrigado novamente Abraao Marques 

    Vou testar aqui :D
  • Sim notei a diferença da vírgula(,) pra ponto(.) kk
  • brunowdbrunowd Usuário
    editado September 2014

    Se não funcionar, tenta escrever a constante dessa maneira: const TAXA = 5.00;

    Olá Abraao,

    Então.. fiz a alteração mas aquele valor que coloquei é adicionado a quantidade e valor do item, e no campo extras é somado o dobro coloquei o valor de  como nas imagens...


  • brunowdbrunowd Usuário
    editado September 2014
    o código ficou assim...

    coloquei 

    const TAXA = '10.00';

    logo abaixo de :

    const REAL = 'REAL';

    substitui

     private static function toFloat($_value)
        {
            return (float) $_value;
        }

    por:
      private static function toFloat($_value)
        {
            return (float) $_value + self::TAXA;
        }


    Mas isso acaba que acrescentando o valor em todos os itens em 10 reais. Seria acrescentada o valor somente no campo extras.
  • Abraao Marques Moderador Global
    Vou dar uma olhada para você.

    Já te retorno!
  • Vou dar uma olhada para você.

    Já te retorno!

    Sim Abraao, obrigado e fico no aguardo.

    Taalvez nos ajude...

    https://pagseguro.uo...o-via-html.html

    Veja o item extraAmount no link, o valor definido será aplicado uma vez, antes do total do carrinho de compras. 

    Entre as linhas 190 e 215 é sobre o extraAmount, coloque o valor 10.00 lá e deve dar certo....

     .

    talvez:

        private function _extraAmount(10.00)
     
  • Abraao Marques Moderador Global
    brunowd disse:

    Vou dar uma olhada para você.

    Já te retorno!

    Sim Abraao, obrigado e fico no aguardo.

    Taalvez nos ajude...

    https://pagseguro.uo...o-via-html.html

    Veja o item extraAmount no link, o valor definido será aplicado uma vez, antes do total do carrinho de compras. 

    Entre as linhas 190 e 215 é sobre o extraAmount, coloque o valor 10.00 lá e deve dar certo....

     .

    talvez:

        private function _extraAmount(10.00)
     
    Fala, brunowd.

    Eu já estava mexendo exatamente neste arquivo, mas está ocorrendo erro quando redirecionava para o pagseguro. Mas, está resolvido:

    Faça o seguinte, no método:

        private function _extraAmount()
        {
            $_tax_amount = self::toFloat($this->Order->getTaxAmount());
            $_discount_amount = self::toFloat($this->Order->getBaseDiscountAmount());

            return PagSeguroHelper::decimalFormat($_discount_amount + $_tax_amount);
        }

    Acrescente:

        private function _extraAmount()
        {
            $_tax_amount = self::toFloat($this->Order->getTaxAmount());
            $_tax_amount += 10.00;
            $_discount_amount = self::toFloat($this->Order->getBaseDiscountAmount());

            return PagSeguroHelper::decimalFormat($_discount_amount + $_tax_amount);
        }


    Testei, e deu certo. Foi redodinho para o pagseguro com o extra de R$ 10,00.

    Mas, aí, ponha exatamente como está aí.


    O arquivo é o PaymentMethod.php


    Testa aí e posta o resultado aqui!


    Um abraço!
  • Sim Abraão, funcionou!

    Muito mais muito grato mesmo por esta sua solução.
    Abraços e sucesso pra você!
  • Abraao Marques Moderador Global
    Bom saber disso!!!

    Qualquer coisa, posta aí!


    Um abraço e sucesso aí, brunowd!

    :D
  • Opa Abraao,

    Eu fiz o teste na instalação de desenvolvimento...
    Testei na instalação que está no ar  Mezz Brindes e Lembranças
    E ele não vai pro pagseguro, fiz as mesmas alterações, 
    Tela em branco e não prossegue, alguma ideia?
    Talvez seja conflito com o módulo do bruno arrasive? Como faço para desinstalar este módulo?
  • Abraao Marques Moderador Global
    brunowd, se não está indo para o pagseguro, tem erro, então.

    Estava ocorrendo erro para mim, também. Erro no redirecionamento, mesmo. Mas, isso estava ocorrendo por que eu estava mexendo no lugar errado.

    Essa parada não é conflito, não.

    Qual a versão do módulo do pagseguro que está utilizando? Outra coisa, ponha o todo o script do seu arquivo PaymentMethod.php para eu dar uma olhada aqui. Tem alguma coisa perdida nesse arquivo que está dando esse problema.
  • baixei o módulo diretamente pelo site do pagseguro versão 2.2 

    Meu magento é 1.7.0.2
  • Abraao Marques Moderador Global
    A mesma versão que uso.

    Manda todo o script do arquivo PaymentMethod.php.
  • Abraao Marques Moderador Global
    Testei a sua loja agora. Realmente, pára numa página em branco quando vai para o pagseguro. Retira a modificação que você fez o arquivo, por enquanto para você não perder venda.
  • sim removi kk

    o código...app/code/local/PagSeguro/PagSeguro/Model/PaymentMethod.php

    <?php

    /*
     * ***********************************************************************
     Copyright [2013] [PagSeguro Internet Ltda.]

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at


     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
     * ***********************************************************************
     */

    include_once (Mage::getSingleton('PagSeguro_PagSeguro_Helper_Data')->getPageSeguroUrl() . '/PagSeguroLibrary/PagSeguroLibrary.php');
    include_once(Mage::getSingleton('PagSeguro_PagSeguro_Helper_Data')->getPageSeguroUrl() . '/Defines.php');

    use Mage_Payment_Model_Method_Abstract as MethodAbstract;

    /**
     * PagSeguro payment model
     */
    class PagSeguro_PagSeguro_Model_PaymentMethod extends MethodAbstract
    {
        protected $_code = 'pagseguro';
        protected $_isGateway = true;
        protected $_canAuthorize = true;
        protected $_canCapture = true;
        protected $_canCapturePartial = false;
        protected $_canRefund = false;
        protected $_canVoid = true;
        protected $_canUseInternal = true;
        protected $_canUseCheckout = true;
        protected $_canUseForMultishipping = true;
        private $Module_Version = '2.2';
        private $Order;
        private $Shipping_Data;
        
        const REAL = 'REAL';
       



  •     /**
         * Get the shipping Data of the Order
         *
         * @return type
         */
        private function getShippingData()
        {
            $isOrderVirtual = $this->Order->getIsVirtual();
            $OrderParams = null;
            if ($isOrderVirtual) {
                    $OrderParams = $this->Order->getBillingAddress();
            } else {
                    $OrderParams = $this->Order->getShippingAddress();
            }

            return $OrderParams->getData();
        }

        /**
         * Set the Order of checkout session
         *
         * @param type $Order
         */
        public function setOrder($Order)
        {
            if ($Order != null and !empty($Order)) {
                    $this->Order = $Order;
                    $this->Shipping_Data = $this->getShippingData();
            } else {
                    throw new Exception(
                        "[PagSeguroModuleException] Message: Parâmetro Inválido para o método setOrder()."
                    );
            }
        }

  •   /**
         * Return the created payment request html with payment url and set the PagSeguroConfig's
         *
         * @return PaymentRequestURL
         */
        public function getRedirectPaymentHtml($Order)
        {
            $this->setPagSeguroConfig();
            $payment_url =  $this->createPaymentRequest();

            //limpar o cart
            $cart = Mage::getSingleton('checkout/cart');
            foreach (Mage::getSingleton('checkout/session')->getQuote()->getItemsCollection() as $item) {
                $cart->removeItem($item->getId());
            }
            $cart->save();

            $Order->save();
            
            $checkout = $this->getRedirectCheckout();
            
            if ($checkout == 'LIGHTBOX') {
                $code = $this->base64url_encode($payment_url);
                
                return Mage::getUrl('pagseguro/payment/payment',array(
                    '_secure' => true, 'type' => 'geral', 'code' => $code
                ));
            }
            return $payment_url;
        }

        private function base64url_encode($text)
        {
            return strtr(base64_encode($text), '+/=', '-_,');
        }
  • /**
         * Set Config's to PagSeguro API
         *
         */
        private function setPagSeguroConfig()
        {
            $_activeLog = $this->getConfigData('log');
            $_charset = $this->getConfigData('charset');

            Mage::getSingleton('PagSeguro_PagSeguro_Helper_Data')->saveAllStatusPagSeguro();

            //Module version
            PagSeguroLibrary::setModuleVersion('magento' . ':' . $this->Module_Version);

            //CMS version
            PagSeguroLibrary::setCMSVersion('magento' . ':' . Mage::getVersion());

            //Setup Charset
            if ($_charset != null and !empty($_charset)) {
                    PagSeguroConfig::setApplicationCharset($_charset);
            }

            //Setup Log
            if ($_activeLog == 1) {
                $_log_file = $this->getConfigData('log_file');
                if (self::checkFile(Mage::getBaseDir() . '/' . $_log_file)) {
                    PagSeguroConfig::activeLog(Mage::getBaseDir() . '/' . $_log_file);
                } else {
                    PagSeguroConfig::activeLog(); //Default Log
                }
            }
        }
  •  private function _validator()
        {
            require_once(Mage::getSingleton('PagSeguro_PagSeguro_Helper_Data')->getPageSeguroUrl() . '/Updates.php');
            
            Updates::createTableModule();
        }

        /**
         * Create PagSeguro payment request html with payment url
         *
         * @return string
         */
        private function createPaymentRequest()
        {    
            $this->_validator();
            
            $PaymentRequest = new PagSeguroPaymentRequest();

            $PaymentRequest->setCurrency(PagSeguroCurrencies::getIsoCodeByName(self::REAL));

            $PaymentRequest->setReference($this->Order->getId()); //Order ID

            $PaymentRequest->setShipping($this->getShippingInformation()); //Shipping
            $PaymentRequest->setSender($this->getSenderInformation()); //Sender
            $PaymentRequest->setItems($this->getItensInformation()); //Itens

            $PaymentRequest->setShippingType(SHIPPING_TYPE);
            $PaymentRequest->setShippingCost(number_format($this->Order->getShippingAmount(), 2, '.', ''));

            $PaymentRequest->setNotificationURL($this->getNotificationURL());

            //Define Redirect Url
            $redirect_url = $this->getRedirectUrl();
            if (!empty($redirect_url) and $redirect_url != null) {
                    $PaymentRequest->setRedirectURL($redirect_url);
            } else {
                    $PaymentRequest->setRedirectURL(Mage::getUrl() . 'checkout/onepage/success/');
            }

            //Define Extra Amount Information
            $PaymentRequest->setExtraAmount($this->_extraAmount());

            try {
                $payment_url = $PaymentRequest->register($this->getCredentialsInformation());
                
            } catch (PagSeguroServiceException $ex) {
                Mage::log($ex->getMessage());
                $this->_redirectUrl(Mage::getUrl() . 'checkout/onepage');
            }

            return $payment_url;
        }
  •  /**
         * Extra Amount
         * @return extra amount
         */
        private function _extraAmount() 
        {
            $_tax_amount = self::toFloat($this->Order->getTaxAmount());
            $_tax_amount += 20.00;
            $_discount_amount = self::toFloat($this->Order->getBaseDiscountAmount());
            

            return PagSeguroHelper::decimalFormat($_discount_amount + $_tax_amount  );
        }

        /**
         *
         * @return Notification URL
         */
        private function getNotificationURL()
        {
            $notification_url = $this->getConfigData('notification');

            return ($notification_url != null && $notification_url != "") ?
                $notification_url : Mage::getUrl() . 'pagseguro/notification/send/';
        }

        private function _addressConfig($fullAddress)
        {
    require_once(Mage::getSingleton('PagSeguro_PagSeguro_Helper_Data')->getPageSeguroUrl() . '/AddressConfig.php');
            return AddressConfig::trataEndereco($fullAddress);
        }

        /**
         *
         * @return PagSeguroShipping
         */
        private function getShippingInformation()
        {

            $fileOSC = scandir(getcwd().'/app/code/local/DeivisonArthur');

            $street = "";
            $number = "";
            $complement = "";
            $complement = "";

            if (!$fileOSC) {

                $fullAddress = $this->_addressConfig($this->Shipping_Data['street']);
        
                $street = $fullAddress[0] != '' ? $fullAddress[0] : $this->_addressConfig($this->Shipping_Data['street']);
                $number = is_null($fullAddress[1]) ? '' : $fullAddress[1];
                $complement = is_null($fullAddress[2]) ? '' : $fullAddress[2];
                $complement = is_null($fullAddress[3]) ? '' : $fullAddress[3];
            
            }
  • $PagSeguroShipping = new PagSeguroShipping();

            $PagSeguroAddress = new PagSeguroAddress();
            $PagSeguroAddress->setCity($this->Shipping_Data['city']);
            $PagSeguroAddress->setPostalCode( self::fixPostalCode($this->Shipping_Data['postcode']) );
            $PagSeguroAddress->setState($this->Shipping_Data['region']);
            $PagSeguroAddress->setStreet($street);
            $PagSeguroAddress->setNumber($number);
            $PagSeguroAddress->setComplement($complement);
            $PagSeguroAddress->setDistrict($district);
            $PagSeguroShipping->setAddress($PagSeguroAddress);

            return $PagSeguroShipping;
        }

        /**
         *
         * @return PagSeguroItem
         */
        private function getItensInformation()
        {
            $Itens = $this->Order->getAllVisibleItems();

            $PagSeguroItens = array();

            //CarShop Items
            foreach ($Itens as $item) {
                    $PagSeguroItem = new PagSeguroItem();
                    $PagSeguroItem->setId($item->getId());
                    $PagSeguroItem->setDescription(self::fixStringLength($item->getName(), 255));
                    $PagSeguroItem->setQuantity(self::toFloat($item->getQtyOrdered()));
                    $PagSeguroItem->setWeight(round($item->getWeight()));
                    $PagSeguroItem->setAmount(self::toFloat($item->getPrice()));
            
                    array_push($PagSeguroItens, $PagSeguroItem);
            }

            return $PagSeguroItens;
        }

        /**
         *
         * @return PagSeguroAccountCredentials
         */
        public function getCredentialsInformation()
        {
            $adm_email = $this->getConfigData('email');
            $adm_token = $this->getConfigData('token');
            $credentials = new PagSeguroAccountCredentials($adm_email, $adm_token);

            return $credentials;
        }

        /**
         *
         * @return PagSeguroSender
         */
        private function getSenderInformation()
        {
            $PagSeguroSender = new PagSeguroSender();

            $PagSeguroSender->setEmail($this->Order['customer_email']);
            $PagSeguroSender->setName($this->Order['customer_firstname'] . ' ' . $this->Order['customer_lastname']);

            return $PagSeguroSender;
        }

        /**
         * Redirect to pagseguro request controller after user click in 'PLACE ORDER'
         *
         */
        public function getOrderPlaceRedirectUrl()
        {
            return Mage::getUrl($this->getCode() . '/payment/request');
        }

  •     /*
         * Get the redirect url configured by user
         * @return string
         */
        private function getRedirectUrl()
        {
            return $this->getConfigData('url');
        }
        
        private function getRedirectCheckout()
        {
            return $this->getConfigData('checkout');
        }

        private static function fixStringLength($_value, $_length, $_endchars = '...')
        {
            if (!empty($_value) and !empty($_length)) {
                $_cut_len = (int) $_length - (int) strlen($_endchars);

                if (strlen($_value) > $_length) {
                    $str_cut = substr($_value, 0, $_cut_len);
                    $_value = $str_cut . $_endchars;
                }
            }

            return $_value;
        }

        /**
         * Convert value to float.
         *
         * @param $_value
         * @return float
         */
        private static function toFloat($_value)
        {
            return (float) $_value;
        }

        /**
         * If file not exist, try create.
         *
         * @param string $filename
         * @return boolean
         */
        private static function checkFile($_file)
        {
            try {
                $f = fopen($_file, 'a');
                $_file_exist = true;
                fclose($f);
            } catch (Exception $ex) {
                $_file_exist = false;
                Mage::logException($ex);
            }
            return $_file_exist;
        }
    /**
     *
     * remove all non-numeric characters from Postal Code.
     * @return fixedPostalCode
     * 
     */
    public static function fixPostalCode($postalCode)
    {
    return preg_replace("/[^0-9]/", "", $postalCode);
    }
    public function canUseForMultishipping()
        {
            return $this->_canUseForMultishipping;
        }
    }
  • Coloquei assim por causa do limite de caracteres e também não consegui anexar o arquivo!
  • Abraao Marques Moderador Global
    Depois que você removeu a modificação que fez, o problema de redirecionamento resolveu?
  • o Erro permanece
Entre ou Registre-se para fazer um comentário.