diff --git a/CHANGELOG.md b/CHANGELOG.md index 21795b6..aecd62e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ Changelog --------- +3.2.0 +- Alterado fluxo do checkout transparente para o fluxo padrão do Magento (onepage) +- Atualizada tela de cofiguração do módulo (admin), adicionando categorias e possibilitando habilitar métodos transparentes (boleto, débito online e cartão de crédito) individualmente + 3.1.0 - Adicionada biblioteca de máscaras (Vannila-Masker) - Corrigidos bugs no checkout transparente diff --git a/README.md b/README.md index 47c991f..3e2759e 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,17 @@ Com o módulo instalado e configurado, você pode pode oferecer o PagSeguro como - Integração com a [API de Pagamentos](https://dev.pagseguro.uol.com.br/documentacao/pagamentos) - Integração com a [API de Notificações](https://pagseguro.uol.com.br/v2/guia-de-integracao/api-de-notificacoes.html#!rmcl) +## Índice +**[Requisitos](#requisitos)**
+**[Instalação](#instalação)**
+**[Configuração](#configuração)**
+**[Transações](#transações)**
+**[Dúvidas](#dúvidas)**
+**[Changelog](#changelog)**
+**[Notas](#notas)**
+**[Contribuições](#contribuições)**
+**[Licença](#licença)**
+ ## Requisitos - [Magento](https://www.magentocommerce.com/) Community 1.9.0 até 1.9.3.4 (ainda em fase de testes nas versões 1.6.x, 1.7.x, 1.8.x) - [PHP](http://www.php.net/) 5.4.27+, 5.5.x+, 5.6.x+ (ainda em fase de testes nas versões 7.x) @@ -19,10 +30,11 @@ Com o módulo instalado e configurado, você pode pode oferecer o PagSeguro como - Certifique-se de que não há instalação de outros módulos para o PagSeguro em seu sistema; - Caso utilize a compilação do Magento, desative-a e limpe-a *(Sistema -> Ferramentas -> Compilação)*; -- Baixe a última versão do módulo **[nesse link](https://github.com/pagseguro/magento/raw/master/UOL_PagSeguro-3.1.0.tgz)** ou então baixe o repositório como arquivo zip através do botão do GitHub; +- Baixe a última versão do módulo **[nesse link](https://github.com/pagseguro/magento/raw/master/UOL_PagSeguro-3.2.0.tgz)** ou então baixe o repositório como arquivo zip através do botão do GitHub; - Na área administrativa do seu Magento, acesse o menu *Sistema/System -> Magento Connect -> Magento Connect Manager*. Caso tenha uma versão anterior do módulo instalada faça a remoção agora; - No Magento Connect Manger, dentro da seção Direct package file upload, clique em **Escolher arquivo/Choose file**, selecione o arquivo UOL_PagSeguro-x.x.x.tgz (baixado anteriormente), clique no botão de upload e acompanhe a instalação do módulo no console da página; - Caso utilize a compilação, volte para a área administrativa do Magento, ative-a e execute-a novamente; +- Pronto, ao finalizar o processo o módulo do PagSeguro estará instalando no seu Magento! Siga para a [próxima seção](#configuração) para configurar e começar a usar o módulo. > Caso tenha uma versão do módulo do PagSeguro anterior à 2.3 instalada, copie o arquivo *remove-module-2.2.php* para a raíz de instalação do seu Magento e execute o arquivo no browser, ex.: www.meusite.com.br/magento/remove-module-2.2.php. Siga as instruções na tela para a remoção dos arquivos. @@ -31,8 +43,9 @@ Configuração --- Para acessar e configurar o módulo acesse o menu PagSeguro -> Configurações. As opções disponíveis estão descritas abaixo. - - **ativar módulo**: ativa/desativa o módulo. - - **nome de exibição**: define o nome que será utilizado para o meio de pagamento na tela de checkout. + ------------------------- + **Configurações Gerais** + - **ambiente**: especifica em que ambiente as transações serão feitas *(produção/sandbox)*. - **e-mail**: e-mail cadastrado no PagSeguro. - **token**: token cadastrado no PagSeguro. @@ -43,7 +56,6 @@ Para acessar e configurar o módulo acesse o menu PagSeguro -> Configurações. - **ativar log**: ativa/desativa a geração de logs. - **diretório**: informe o local e nome do arquivo a partir da raíz de instalação do Magento onde se deseja criar o arquivo de log. Ex.: /pagseguro.log. - *Por padrão o módulo virá configurado para salvar o arquivo de log em /var/pagseguro.log*. - - **checkout**: especifica o modelo de checkout que será utilizado. É possível escolher entre checkout padrão, checkout lightbox e checkout transparente. - **listar transações abandonadas?**: ativa/desativa a pesquisa de transações que foram abandonadas no checkout do PagSeguro. - **template de e-mail**: define qual o template de email sua loja usuará para o envio do email de recuperação de venda. - **oferecer desconto para ...**: ativa/desativa desconto para checkouts utilizando este meio de pagamento @@ -51,6 +63,30 @@ Para acessar e configurar o módulo acesse o menu PagSeguro -> Configurações. - **transações -> abandonadas**: permite consultar as transações que foram abandonadas nos últimos 10 dias, desta forma você pode enviar emails de recuperação de venda. O e-mail conterá um link que redirecionará o comprador para o fluxo de pagamento, exatamente no ponto onde ele parou. - **listar parcelamento**: Habilita a exibição de uma listagem de parcelas na tela de visualização do produto. (Irá exibir o maior parcelamento disponível para o produto na tela de exibição do mesmo) + ------------------------- + **Configurar Tipos de Checkout** + + - *PagSeguro (Padrão ou Lightbox)* + - **ativar**: ativa/desativa o meio de pagamento PagSeguro (padrão ou lightbox). + - **nome de exibição**: define o nome que será utilizado para o meio de pagamento na tela de checkout. + - **checkout**: especifica o modelo de checkout que será utilizado. É possível escolher entre checkout padrão ou checkout lightbox. + + + - *Checkout Transparente - Cartão de Crédito* + - **ativar**: ativa/desativa o meio de pagamento Checkout Transparente - Cartão de Crédito. + - **nome de exibição**: define o nome que será utilizado para esse meio de pagamento na tela de checkout. + + + - *Checkout Transparente - Boleto Bancário* + - **ativar**: ativa/desativa o meio de pagamento Checkout Transparente - Boleto Bancário. + - **nome de exibição**: define o nome que será utilizado para esse meio de pagamento na tela de checkout. + + + - *Checkout Transparente - Débito Online* + - **ativar**: ativa/desativa o meio de pagamento Checkout Transparente - Débito Online. + - **nome de exibição**: define o nome que será utilizado para esse meio de pagamento na tela de checkout. + + Transações ------------ --- diff --git a/UOL_PagSeguro-3.1.0.tgz b/UOL_PagSeguro-3.1.0.tgz deleted file mode 100644 index 9e7e0f2..0000000 Binary files a/UOL_PagSeguro-3.1.0.tgz and /dev/null differ diff --git a/UOL_PagSeguro-3.2.0.tgz b/UOL_PagSeguro-3.2.0.tgz new file mode 100644 index 0000000..fe8a15d Binary files /dev/null and b/UOL_PagSeguro-3.2.0.tgz differ diff --git a/app/code/community/UOL/PagSeguro/Block/Form/Boleto.php b/app/code/community/UOL/PagSeguro/Block/Form/Boleto.php new file mode 100644 index 0000000..e4bd30b --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Block/Form/Boleto.php @@ -0,0 +1,23 @@ +setBoletoSession($paymentModel->getSession()); + $this->setTemplate('uol/pagseguro/form/boleto.phtml'); + } + + protected function _prepareLayout() + { + if ($this->getLayout()->getBlock('head')) { + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/direct-payment.js'); + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/boleto.js'); + $this->getLayout()->getBlock('head')->addItem('skin_css', 'uol/pagseguro/css/direct-payment.css'); + } + } +} \ No newline at end of file diff --git a/app/code/community/UOL/PagSeguro/Block/Form/CreditCard.php b/app/code/community/UOL/PagSeguro/Block/Form/CreditCard.php new file mode 100644 index 0000000..9d8a143 --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Block/Form/CreditCard.php @@ -0,0 +1,26 @@ +getQuote()->getTotals()['grand_total']; + $this->setGrandTotal($totals->getData()['value']); + + $paymentModel = Mage::getSingleton('UOL_PagSeguro_Model_PaymentMethod'); + $this->setCreditCardSession($paymentModel->getSession()); + $this->setTemplate('uol/pagseguro/form/creditcard.phtml'); + } + + protected function _prepareLayout() + { + if ($this->getLayout()->getBlock('head')) { + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/direct-payment.js'); + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/credit-card.js'); + $this->getLayout()->getBlock('head')->addItem('skin_css', 'uol/pagseguro/css/direct-payment.css'); + } + } +} diff --git a/app/code/community/UOL/PagSeguro/Block/Form/OnlineDebit.php b/app/code/community/UOL/PagSeguro/Block/Form/OnlineDebit.php new file mode 100644 index 0000000..a0e7045 --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Block/Form/OnlineDebit.php @@ -0,0 +1,23 @@ +setOnlineDebitSession($paymentModel->getSession()); + $this->setTemplate('uol/pagseguro/form/onlinedebit.phtml'); + } + + protected function _prepareLayout() + { + if ($this->getLayout()->getBlock('head')) { + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/direct-payment.js'); + $this->getLayout()->getBlock('head')->addItem('skin_js', 'uol/pagseguro/js/online-debit.js'); + $this->getLayout()->getBlock('head')->addItem('skin_css', 'uol/pagseguro/css/direct-payment.css'); + } + } +} diff --git a/app/code/community/UOL/PagSeguro/Helper/Data.php b/app/code/community/UOL/PagSeguro/Helper/Data.php index a1255a5..930dce4 100644 --- a/app/code/community/UOL/PagSeguro/Helper/Data.php +++ b/app/code/community/UOL/PagSeguro/Helper/Data.php @@ -574,4 +574,36 @@ protected function getOrderMagetoDateConvert($date) { return date("d/m/Y H:i:s", Mage::getModel("core/date")->timestamp($date)); } + + public function getPagSeguroDirectPaymentJs() + { + if (Mage::getStoreConfig('payment/pagseguro/environment') === 'production') { + return 'https://stc.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js'; + } + + return 'https://stc.sandbox.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js'; + } + + /** + * Format original document and return it as an array, with it "washed" value + * and type + * @param string $document + * @return array + * @throws Exception + */ + public function formatDocument($document) + { + $documentNumbers = preg_replace('/[^0-9]/', '', $document); + switch (strlen($documentNumbers)) { + case 14: + return ['number' => $documentNumbers, 'type' => 'CNPJ']; + break; + case 11: + return ['number' => $documentNumbers, 'type' => 'CPF']; + break; + default: + throw new Exception('Invalid document'); + break; + } + } } diff --git a/app/code/community/UOL/PagSeguro/Helper/Requirements.php b/app/code/community/UOL/PagSeguro/Helper/Requirements.php index a710659..de3f0de 100644 --- a/app/code/community/UOL/PagSeguro/Helper/Requirements.php +++ b/app/code/community/UOL/PagSeguro/Helper/Requirements.php @@ -33,11 +33,11 @@ public function validateRequirements() $version = str_replace('.', '', phpversion()); if ($version < 540) { - $msg = $this->__('PagSeguroLibrary: É necessária a versão 5.4.0 do PHP ou maior.'); + $msg = $this->__('PagSeguroLibrary: É necessária a versão 5.4.27 do PHP ou maior.'); $req['version']['text'] = $msg; $req['version']['status'] = false; } else { - $req['version']['text'] = $this->__('Versão do PHP superior à 5.4.0.'); + $req['version']['text'] = $this->__('Versão do PHP superior à 5.4.27.'); $req['version']['status'] = true; } diff --git a/app/code/community/UOL/PagSeguro/Model/Boleto.php b/app/code/community/UOL/PagSeguro/Model/Boleto.php new file mode 100644 index 0000000..5b335de --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Model/Boleto.php @@ -0,0 +1,55 @@ +getInfoInstance(); + + if ($data->getBoletoCpf()) { + $info->setBoletoCpf($data->getBoletoCpf()); + } + + if ($data->getBoletoHash()) { + $info->setBoletoHash($data->getBoletoHash()); + } + + Mage::getSingleton('customer/session') + ->setData('boletoHash', $info->getBoletoHash()) + ->setData('boletoDocument', $info->getBoletoCpf()); + + return $this; + } + + public function validate() + { + parent::validate(); + $info = $this->getInfoInstance(); + return $this; + } + + /** + * @return string + */ + public function getOrderPlaceRedirectUrl() + { + return Mage::getUrl('pagseguro/payment/request'); + } + +} diff --git a/app/code/community/UOL/PagSeguro/Model/Checkout.php b/app/code/community/UOL/PagSeguro/Model/Checkout.php index b61c231..ac49413 100644 --- a/app/code/community/UOL/PagSeguro/Model/Checkout.php +++ b/app/code/community/UOL/PagSeguro/Model/Checkout.php @@ -8,8 +8,7 @@ public function toOptionArray() return array( array('value' => 'PADRAO', 'label' => $helper->__('Padrão')), - array('value' => 'LIGHTBOX', 'label' => $helper->__('Lightbox')), - array('value' => 'TRANSPARENTE', 'label' => $helper->__('Transparente')), + array('value' => 'LIGHTBOX', 'label' => $helper->__('Lightbox')) ); } } diff --git a/app/code/community/UOL/PagSeguro/Model/CreditCard.php b/app/code/community/UOL/PagSeguro/Model/CreditCard.php new file mode 100644 index 0000000..6a19ceb --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Model/CreditCard.php @@ -0,0 +1,90 @@ +getInfoInstance(); + + if ($data->getCreditCardCpf()) { + $info->setCreditCardCpf($data->getCreditCardCpf()); + } + + if ($data->getCreditCardHash()) { + $info->setCreditCardHash($data->getCreditCardHash()); + } + + if ($data->getCreditCardHolder()) { + $info->setCreditCardHolder($data->getCreditCardHolder()); + } + + if ($data->getCreditCardHolderBirthdate()) { + $info->setCreditCardHolderBirthdate($data->getCreditCardHolderBirthdate()); + } + + if ($data->getCreditCardToken()) { + $info->setCreditCardToken($data->getCreditCardToken()); + } + + if ($data->getCreditCardInstallment()) { + $info->setCreditCardInstallment($data->getCreditCardInstallment()); + } + + if ($data->getCreditCardInstallmentValue()) { + $info->setCreditCardInstallmentValue($data->getCreditCardInstallmentValue()); + } + + Mage::getSingleton('customer/session') + ->setData('creditCardHash', $info->getCreditCardHash()) + ->setData('creditCardDocument', $info->getCreditCardCpf()) + ->setData('creditCardHolder', $info->getCreditCardHolder()) + ->setData('creditCardBirthdate', $info->getCreditCardHolderBirthdate()) + ->setData('creditCardToken', $info->getCreditCardToken()) + ->setData('creditCardInstallment', $info->getCreditCardInstallment()) + ->setData('creditCardInstallmentValue', $info->getCreditCardInstallmentValue()); + + return $this; + } + + /** + * Validate the payment before request + * @return $this + */ + public function validate() + { + parent::validate(); + $info = $this->getInfoInstance(); + + return $this; + } + + /** + * @return string + */ + public function getOrderPlaceRedirectUrl() + { + return Mage::getUrl('pagseguro/payment/request'); + } +} diff --git a/app/code/community/UOL/PagSeguro/Model/InstallmentsMethod.php b/app/code/community/UOL/PagSeguro/Model/InstallmentsMethod.php index 342536f..92756c8 100644 --- a/app/code/community/UOL/PagSeguro/Model/InstallmentsMethod.php +++ b/app/code/community/UOL/PagSeguro/Model/InstallmentsMethod.php @@ -180,8 +180,7 @@ private function getMaxInstallment($installments) */ public function enabled() { - return (Mage::getStoreConfig('payment/pagseguro/active') == 1 && - Mage::getStoreConfig('payment/pagseguro/installments') == 1) ? + return (Mage::getStoreConfig('payment/pagseguro/installments') == 1) ? true : false; } diff --git a/app/code/community/UOL/PagSeguro/Model/Library.php b/app/code/community/UOL/PagSeguro/Model/Library.php index a18560c..3ea48cf 100644 --- a/app/code/community/UOL/PagSeguro/Model/Library.php +++ b/app/code/community/UOL/PagSeguro/Model/Library.php @@ -10,9 +10,9 @@ class UOL_PagSeguro_Model_Library */ public function __construct() { - define("SHIPPING_TYPE", 3); - define("SHIPPING_COST", 0.00); - define("CURRENCY", "BRL"); + defined("SHIPPING_TYPE") or define("SHIPPING_TYPE", 3); + defined("SHIPPING_COST") or define("SHIPPING_COST", 0.00); + defined("CURRENCY") or define("CURRENCY", "BRL"); \PagSeguro\Library::initialize(); \PagSeguro\Library::cmsVersion()->setName('Magento')->setRelease(Mage::getVersion()); \PagSeguro\Library::moduleVersion()->setName('PagSeguro')->setRelease(Mage::getConfig()->getModuleConfig("UOL_PagSeguro")->version); @@ -69,7 +69,7 @@ public function getAccountCredentials() */ public function getCharset() { - return Mage::getStoreConfig('payment/pagseguro/environment'); + return Mage::getStoreConfig('payment/pagseguro/charset'); } /** @@ -93,6 +93,6 @@ public function getLog() */ public function getPaymentCheckoutType() { - return Mage::getStoreConfig('payment/pagseguro/checkout'); + return Mage::getStoreConfig('payment/pagseguro_default_lightbox/checkout'); } } \ No newline at end of file diff --git a/app/code/community/UOL/PagSeguro/Model/OnlineDebit.php b/app/code/community/UOL/PagSeguro/Model/OnlineDebit.php new file mode 100644 index 0000000..cb1d493 --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Model/OnlineDebit.php @@ -0,0 +1,69 @@ +getInfoInstance(); + + if ($data->getOnlineDebitCpf()) { + $info->setOnlineDebitCpf($data->getOnlineDebitCpf()); + } + + if ($data->getOnlineDebitHash()) { + $info->setOnlineDebitHash($data->getOnlineDebitHash()); + } + + if ($data->getOnlineDebitBankName()) { + $info->setOnlineDebitBankName($data->getOnlineDebitBankName()); + } + + Mage::getSingleton('customer/session') + ->setData('onlineDebitHash', $info->getOnlineDebitHash()) + ->setData('onlineDebitDocument', $info->getOnlineDebitCpf()) + ->setData('onlineDebitBankName', $info->getOnlineDebitBankName()); + + return $this; + } + + /** + * Validate the payment before request + * @return $this + */ + public function validate() + { + parent::validate(); + $info = $this->getInfoInstance(); + + return $this; + } + + /** + * @return string + */ + public function getOrderPlaceRedirectUrl() + { + return Mage::getUrl('pagseguro/payment/request'); + } + +} diff --git a/app/code/community/UOL/PagSeguro/Model/PagSeguro.php b/app/code/community/UOL/PagSeguro/Model/PagSeguro.php new file mode 100644 index 0000000..e8d6cba --- /dev/null +++ b/app/code/community/UOL/PagSeguro/Model/PagSeguro.php @@ -0,0 +1,28 @@ +getConfigData('notification')) { - $notificationUrl = $this->getConfigData('notification'); + $notificationPath = Mage::getStoreConfig('payment/pagseguro/notification'); + + if ($notificationPath) { + $notificationUrl = $notificationPath; } else { $notificationUrl = Mage::app()->getStore(0)->getBaseUrl().'pagseguro/notification/send/'; } @@ -155,51 +159,63 @@ private function getNotificationURL() return $notificationUrl; } - /** - * @param $params - * - * @return \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit - */ - public function paymentDirect($params) - { + /** + * Get the direct payment method (boleto, onlibe debit or credit card) + * and instantiate the respective payment object + * @param string $paymentMethod + * @param array $paymentData + * @return \PagSeguro\Domains\Requests\DirectPayment\Boleto + * || \PagSeguro\Domains\Requests\DirectPayment\CreditCard + * || \PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $payment + */ + public function paymentDirect($paymentMethod, $paymentData) + { $payment = null; - switch ($params['method']) { - case 'boleto': + + switch ($paymentMethod) { + case 'pagseguro_boleto': + $formatedDocument = $this->helper->formatDocument($paymentData['boletoDocument']); $payment = new \PagSeguro\Domains\Requests\DirectPayment\Boleto(); $payment->setSender()->setDocument()->withParameters( - 'CPF', - $params['bilitDocument'] + $formatedDocument['type'], + $formatedDocument['number'] ); + $payment->setSender()->setHash($paymentData['boletoHash']); break; - case 'credit-card': + + case 'pagseguro_credit_card': + $formatedDocument = $this->helper->formatDocument($paymentData['creditCardDocument']); + $payment = new \PagSeguro\Domains\Requests\DirectPayment\CreditCard(); - $payment->setToken($params['token']); - $payment->setInstallment()->withParameters($params['cardInstallment'], - number_format($params['cardInstallmentValue'], 2, '.', '')); - $payment->setHolder()->setBirthdate($params['cardHolderBirthdate']); - $payment->setHolder()->setName($params['cardHolderName']); + $payment->setToken($paymentData['creditCardToken']); + $payment->setInstallment()->withParameters($paymentData['creditCardInstallment'], + number_format($paymentData['creditCardInstallmentValue'], 2, '.', '')); + $payment->setHolder()->setBirthdate($paymentData['creditCardBirthdate']); + $payment->setHolder()->setName($paymentData['creditCardHolder']); $payment->setHolder()->setPhone()->withArray($this->helper->formatPhone($this->order->getBillingAddress()->getTelephone())); $payment->setHolder()->setDocument()->withParameters( - 'CPF', - $params['cardHolderDocument'] + $formatedDocument['type'], + $formatedDocument['number'] ); $payment->setSender()->setDocument()->withParameters( - 'CPF', - $params['cardHolderDocument'] + $formatedDocument['type'], + $formatedDocument['number'] ); $orderAddress = new UOL_PagSeguro_Model_OrderAddress($this->order); $payment->setBilling()->setAddress()->instance($orderAddress->getBillingAddress()); + $payment->setSender()->setHash($paymentData['creditCardHash']); break; - case 'online-debit': + case 'pagseguro_online_debit': + $formatedDocument = $this->helper->formatDocument($paymentData['onlineDebitDocument']); $payment = new \PagSeguro\Domains\Requests\DirectPayment\OnlineDebit(); - $payment->setBankName($params['debitBankName']); + $payment->setBankName($paymentData['onlineDebitBankName']); $payment->setSender()->setDocument()->withParameters( - 'CPF', - $params['debitDocument'] + $formatedDocument['type'], + $formatedDocument['number'] ); + $payment->setSender()->setHash($paymentData['onlineDebitHash']); break; } - $payment->setSender()->setHash($params['senderHash']); /** @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $payment */ return $this->payment($payment); @@ -250,4 +266,16 @@ public function setOrder(Mage_Sales_Model_Order $order) { return $this->order = $order; } + + /** + * getter for $_session (must be public to be instatiated in blocks) + * @return type + */ + public function getSession() + { + if (is_null($this->_session) || empty($this->_session)) { + $this->_session = $this->getPaymentSession()->getResult(); + } + return $this->_session; + } } diff --git a/app/code/community/UOL/PagSeguro/controllers/PaymentController.php b/app/code/community/UOL/PagSeguro/controllers/PaymentController.php index 62e5bab..8025f5a 100644 --- a/app/code/community/UOL/PagSeguro/controllers/PaymentController.php +++ b/app/code/community/UOL/PagSeguro/controllers/PaymentController.php @@ -74,6 +74,7 @@ private function loadAndRenderLayout(Array $items = [], $returnAaJson = false) public function defaultAction() { $link = null; + try { /** @var Mage_Sales_Model_Order $order */ $order = Mage::getModel('sales/order')->load($this->getCheckout()->getLastOrderId()); @@ -81,7 +82,9 @@ public function defaultAction() /** * @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $payment */ + $payment = $this->payment->paymentDefault(); + $this->payment->addPagseguroOrders($order); $this->payment->clearCheckoutSession($order); /** @@ -111,53 +114,54 @@ public function directAction() $result = null; $json = false; $redirect = null; + try { /** @var Mage_Sales_Model_Order $order */ $order = Mage::getModel('sales/order')->load($this->getCheckout()->getLastOrderId()); - if ($this->getRequest()->getMethod() === 'POST') { - $this->payment->setOrder($order); - /** - * @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $payment - */ - $payment = $this->payment->paymentDirect($this->getRequest()->getParams()); - $this->payment->addPagseguroOrders($order); - $this->payment->clearCheckoutSession($order); - /** - * @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $result - */ - $result = $this->payment->paymentRegister($payment); - if (method_exists($result, 'getPaymentLink') && $result->getPaymentLink()) { - $link = $result->getPaymentLink(); - $json = true; - $redirect = Mage::getUrl('pagseguro/payment/success').'?redirect='.$link; - } else { - $json = true; - $redirect = Mage::getUrl('pagseguro/payment/success'); - } - $order->sendNewOrderEmail(); + + $customerPaymentData = Mage::getSingleton('customer/session')->getData(); + + $this->payment->setOrder($order); + /** + * @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $payment + */ + $payment = $this->payment->paymentDirect($order->getPayment()->getMethod(), $customerPaymentData); + $this->payment->addPagseguroOrders($order); + $this->payment->clearCheckoutSession($order); + /** + * @var \PagSeguro\Domains\Requests\DirectPayment\Boleto|\PagSeguro\Domains\Requests\DirectPayment\CreditCard|\PagSeguro\Domains\Requests\DirectPayment\OnlineDebit $result + */ + $result = $this->payment->paymentRegister($payment); + + if ($result === false) { + //\PagSeguro\Resources\Log\Logger::error(''); + $this->canceledStatus($order); + return Mage_Core_Controller_Varien_Action::_redirect('pagseguro/payment/error', array('_secure'=> false)); + }; + /** controy redirect url according with payment return link **/ + if (method_exists($result, 'getPaymentLink') && $result->getPaymentLink()) { + $link = $result->getPaymentLink(); + $json = true; + //$redirect = Mage::getUrl('pagseguro/payment/success').'?redirect='.$link; + $redirect = 'pagseguro/payment/success';//?redirect='.$link; + $redirectParams = array('_secure'=> false, '_query'=> array('redirect' => $link)); } else { - /** @var string $paymentSession */ - $paymentSession = $this->payment->getPaymentSession()->getResult(); + $json = true; + //$redirect = Mage::getUrl('pagseguro/payment/success'); + $redirect = 'pagseguro/payment/success'; + $redirectParams = array(); } - } catch (Exception $exception) { - \PagSeguro\Resources\Log\Logger::error($exception); - Mage::logException($exception); + $order->sendNewOrderEmail(); + + } catch (\Exception $exception) { $this->canceledStatus($order); - } - if ($this->payment->getEnvironment() === 'production') { - $pagseguroJS = 'https://stc.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js'; - } else { - $pagseguroJS = 'https://stc.sandbox.pagseguro.uol.com.br/pagseguro/api/v2/checkout/pagseguro.directpayment.js'; + return Mage_Core_Controller_Varien_Action::_redirect('pagseguro/payment/error', array('_secure'=> false)); } - return $this->loadAndRenderLayout([ - 'paymentSession' => $paymentSession, - 'order' => $order, - 'result' => $result, - 'link' => $link, - 'redirect' => $redirect, - 'pagseguroJS' => $pagseguroJS, - ], $json); + return Mage_Core_Controller_Varien_Action::_redirect( + $redirect, + $redirectParams + ); } /** @@ -206,12 +210,18 @@ public function lightboxAction() */ public function requestAction() { - if ($this->getRequest()->getMethod() === 'GET' && $this->payment->getPaymentCheckoutType() === 'TRANSPARENTE') { + $order = Mage::getModel('sales/order')->load($this->getCheckout()->getLastOrderId()); + $orderPaymentMethod = $order->getPayment()->getMethod(); + + if ($orderPaymentMethod === 'pagseguro_online_debit' || $orderPaymentMethod === 'pagseguro_boleto' ||$orderPaymentMethod === 'pagseguro_credit_card') { $this->_redirectUrl(Mage::getUrl('pagseguro/payment/direct')); - } elseif ($this->payment->getPaymentCheckoutType() === 'PADRAO') { + } elseif ($orderPaymentMethod === 'pagseguro_default_lightbox' && $this->payment->getPaymentCheckoutType() === 'PADRAO') { $this->_redirectUrl(Mage::getUrl('pagseguro/payment/default')); - } elseif ($this->payment->getPaymentCheckoutType() === 'LIGHTBOX') { + } elseif ($orderPaymentMethod === 'pagseguro_default_lightbox' && $this->payment->getPaymentCheckoutType() === 'LIGHTBOX') { $this->_redirectUrl(Mage::getUrl('pagseguro/payment/lightbox')); + } else { + \PagSeguro\Resources\Log\Logger::error('Método de pagamento inválido para o PagSeguro'); + return Mage_Core_Controller_Varien_Action::_redirect('pagseguro/payment/error', array('_secure'=> false)); } } @@ -222,4 +232,14 @@ public function successAction() { return $this->loadAndRenderLayout(); } + + /** + * Default payment error screen + * @return UOL_PagSeguro_PaymentController + */ + public function errorAction() + { + return $this->loadAndRenderLayout(); + } + } diff --git a/app/code/community/UOL/PagSeguro/etc/config.xml b/app/code/community/UOL/PagSeguro/etc/config.xml index c7d3358..0918351 100644 --- a/app/code/community/UOL/PagSeguro/etc/config.xml +++ b/app/code/community/UOL/PagSeguro/etc/config.xml @@ -19,10 +19,15 @@ limitations under the License. - 3.1.0 + 3.2.0 + + + PagSeguro + + UOL_PagSeguro_Block @@ -204,13 +209,41 @@ limitations under the License. - + 0 - UOL_PagSeguro_Model_PaymentMethod + UOL_PagSeguro_Model_Pagseguro PagSeguro - /var/pagseguro.log - 0 + pagseguro + 1 + + + 0 + UOL_PagSeguro_Model_CreditCard + Cartão de Crédito + pagseguro + 2 + + + 0 + UOL_PagSeguro_Model_Boleto + Boleto Bancário + pagseguro + 3 + + + 0 + UOL_PagSeguro_Model_OnlineDebit + Débito Online + pagseguro + 4 + + + + 0 + UOL_PagSeguro_Model_PagSeguroDeprecated + pagseguro + diff --git a/app/code/community/UOL/PagSeguro/etc/system.xml b/app/code/community/UOL/PagSeguro/etc/system.xml index e5fec24..50d8874 100644 --- a/app/code/community/UOL/PagSeguro/etc/system.xml +++ b/app/code/community/UOL/PagSeguro/etc/system.xml @@ -20,285 +20,401 @@ limitations under the License. - + 670 1 1 1 + complex - - - - uol_pagseguro/adminhtml_config - - label - 1 - 1 - 1 - 1 - - - - Deseja habilitar o módulo? - select - adminhtml/system_config_source_yesno - 10 - 1 - 1 - 1 - - - <label>NOME DE EXIBIÇÃO</label> - <tooltip>Informe o nome que deve ser apresentado para este meio de pagamento no checkout de sua loja.</tooltip> - <frontend_type>text</frontend_type> + <pagseguro type="group" translate="label"> + <label>Configurações Gerais</label> <sort_order>20</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> - - - - Define o ambiente de uso. - select - uol_pagseguro/environment - 30 - 1 - 0 - 0 - - - - Clique <a href="https://pagseguro.uol.com.br/registration/registration.jhtml?ep=7&tipo=cadastro#!vendedor" target="_blank">aqui</a> e cadastre-se grátis. - text - 40 - 1 - 1 - 1 - - - - Acesse sua conta PagSeguro ou Sandbox para obter um token. - text - 50 - 1 - 1 - 1 - - - - Ao final do fluxo de pagamento no PagSeguro, seu cliente será redirecionado de volta para sua loja ou para a URL que você informar neste campo. Para utilizar essa funcionalidade você deve acessar sua conta PagSeguro ou Sandbox e habilitar requisições de pagamentos gerados somente via API. - text - 60 - 1 - 1 - 1 - - - - Sempre que uma transação mudar de status, o PagSeguro envia uma notificação para sua loja ou para a URL que você informar neste campo. - 70 - 1 - 1 - 1 - - - - Defina o charset de acordo com a codificação do seu sistema. - select - uol_pagseguro/values - 80 - 1 - 1 - 1 - - - - Criar arquivo de log? - select - adminhtml/system_config_source_yesno - 90 - 1 - 1 - 1 - - - - Caminho para o arquivo de log. - text - 100 - 1 - 1 - 1 - - 1 - - - - - Selecione o tipo de checkout desejado. - select - uol_pagseguro/checkout - 110 - 1 - 1 - 1 - - - - Ativa e desativa consulta de transações abandonadas - select - adminhtml/system_config_source_yesno - 120 - 1 - 1 - 1 - - - - - Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. - discount-confirm - select - adminhtml/system_config_source_yesno - 140 - 1 - 1 - 1 - - - - Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 - required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value - text - 145 - 1 - 1 - 1 - - 1 - - - - - Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. - discount-confirm - select - adminhtml/system_config_source_yesno - 150 - 1 - 1 - 1 - - - - Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 - required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value - text - 155 - 1 - 1 - 1 - - 1 - - - - - Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. - discount-confirm - select - adminhtml/system_config_source_yesno - 160 - 1 - 1 - 1 - - - - Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 - required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value - text - 165 - 1 - 1 - 1 - - 1 - - - - - Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. - discount-confirm - select - adminhtml/system_config_source_yesno - 170 - 1 - 1 - 1 - - - - Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 - required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value - text - 175 - 1 - 1 - 1 - - 1 - - - - - Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. - discount-confirm - select - adminhtml/system_config_source_yesno - 180 - 1 - 1 - 1 - - - - Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 - required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value - text - 185 - 1 - 1 - 1 - - 1 - - - - - Habilita a exibição da listagem de parcelas na tela de visualização do produto. (Irá exibir o maior parcelamento disponível para o produto no pagamento com cartão de crédito) - select - adminhtml/system_config_source_yesno - 190 + + + + + uol_pagseguro/adminhtml_config + + label + + 1 + 1 + 1 + 1 + + + + Define o ambiente de uso. + select + uol_pagseguro/environment + 30 + 1 + 0 + 0 + + + + Clique <a href="https://pagseguro.uol.com.br/registration/registration.jhtml?ep=7&tipo=cadastro#!vendedor" target="_blank">aqui</a> e cadastre-se grátis. + text + 40 + 1 + 1 + 1 + + + + Acesse sua conta PagSeguro ou Sandbox para obter um token. + text + 50 + 1 + 1 + 1 + + + + Ao final do fluxo de pagamento no PagSeguro, seu cliente será redirecionado de volta para sua loja ou para a URL que você informar neste campo. Para utilizar essa funcionalidade você deve acessar sua conta PagSeguro ou Sandbox e habilitar requisições de pagamentos gerados somente via API. + text + 60 + 1 + 1 + 1 + + + + Sempre que uma transação mudar de status, o PagSeguro envia uma notificação para sua loja ou para a URL que você informar neste campo. + 70 + 1 + 1 + 1 + + + + Defina o charset de acordo com a codificação do seu sistema. + select + uol_pagseguro/values + 80 + 1 + 1 + 1 + + + + Criar arquivo de log? + select + adminhtml/system_config_source_yesno + 90 + 1 + 1 + 1 + + + + Caminho para o arquivo de log. + text + 100 + 1 + 1 + 1 + + 1 + + + + + + Ativa e desativa consulta de transações abandonadas + select + adminhtml/system_config_source_yesno + 120 + 1 + 1 + 1 + + + + + Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. + discount-confirm + select + adminhtml/system_config_source_yesno + 140 + 1 + 1 + 1 + + + + Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 + required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value + text + 145 + 1 + 1 + 1 + + 1 + + + + + Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. + discount-confirm + select + adminhtml/system_config_source_yesno + 150 + 1 + 1 + 1 + + + + Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 + required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value + text + 155 + 1 + 1 + 1 + + 1 + + + + + Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. + discount-confirm + select + adminhtml/system_config_source_yesno + 160 + 1 + 1 + 1 + + + + Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 + required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value + text + 165 + 1 + 1 + 1 + + 1 + + + + + Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. + discount-confirm + select + adminhtml/system_config_source_yesno + 170 + 1 + 1 + 1 + + + + Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 + required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value + text + 175 + 1 + 1 + 1 + + 1 + + + + + Ao ativar esta opção, seu comprador vai receber um desconto caso escolha pagar com este meio de pagamento. O desconto será aplicado com base no subtotal do checkout PagSeguro. + discount-confirm + select + adminhtml/system_config_source_yesno + 180 + 1 + 1 + 1 + + + + Informe o percentual de desconto a ser concedido para este meio de pagamento. Aceita valores de 0.01 à 99.99 + required-entry validate-number validate-number-range number-range-0.01-99.99 discount-value + text + 185 + 1 + 1 + 1 + + 1 + + + + + Habilita a exibição da listagem de parcelas na tela de visualização do produto. (Irá exibir o maior parcelamento disponível para o produto no pagamento com cartão de crédito) + select + adminhtml/system_config_source_yesno + 190 + 1 + 1 + 1 + + + + + + + + 690 1 1 1 - + + + + 10 + 1 + 1 + 1 + + + + Ativa/desativa o meio de pagamento PagSeguro (Padrão ou Lightbox) + select + adminhtml/system_config_source_yesno + 10 + 1 + 1 + 1 + + + + Selecione o tipo de checkout desejado para utilizar com o PagSeguro (Padrão ou Lightbox). + select + uol_pagseguro/checkout + 20 + 1 + 1 + 1 + + + <label>NOME DE EXIBIÇÃO</label> + <tooltip>Informe o nome que deve ser apresentado para este meio de pagamento no checkout de sua loja.</tooltip> + <frontend_type>text</frontend_type> + <sort_order>30</sort_order> + <show_in_default>1</show_in_default> + <show_in_website>1</show_in_website> + <show_in_store>1</show_in_store> + + + + + + 20 + 1 + 1 + 1 + + + + Ativa / desativa o meio de pagamento Checkout Transparente - Cartão de Crédito + select + adminhtml/system_config_source_yesno + 10 + 1 + 1 + 1 + + + <label>NOME DE EXIBIÇÃO</label> + <tooltip>Informe o nome que deve ser apresentado para este meio de pagamento no checkout de sua loja.</tooltip> + <frontend_type>text</frontend_type> + <sort_order>20</sort_order> + <show_in_default>1</show_in_default> + <show_in_website>1</show_in_website> + <show_in_store>1</show_in_store> + + + + + + 30 + 1 + 1 + 1 + + + + Ativa / desativa o meio de pagamento Checkout Transparente - Boleto + select + adminhtml/system_config_source_yesno + 10 + 1 + 1 + 1 + + + <label>NOME DE EXIBIÇÃO</label> + <tooltip>Informe o nome que deve ser apresentado para este meio de pagamento no checkout de sua loja.</tooltip> + <frontend_type>text</frontend_type> + <sort_order>20</sort_order> + <show_in_default>1</show_in_default> + <show_in_website>1</show_in_website> + <show_in_store>1</show_in_store> + + + + + + 40 + 1 + 1 + 1 + + + + Ativa / desativa o meio de pagamento Checkout Transparente - Débito Online + select + adminhtml/system_config_source_yesno + 10 + 1 + 1 + 1 + + + <label>NOME DE EXIBIÇÃO</label> + <tooltip>Informe o nome que deve ser apresentado para este meio de pagamento no checkout de sua loja.</tooltip> + <frontend_type>text</frontend_type> + <sort_order>20</sort_order> + <show_in_default>1</show_in_default> + <show_in_website>1</show_in_website> + <show_in_store>1</show_in_store> + + + + + - + diff --git a/app/design/adminhtml/default/default/layout/uol/pagseguro.xml b/app/design/adminhtml/default/default/layout/uol/pagseguro.xml index c3d5057..c63406a 100644 --- a/app/design/adminhtml/default/default/layout/uol/pagseguro.xml +++ b/app/design/adminhtml/default/default/layout/uol/pagseguro.xml @@ -19,7 +19,43 @@ limitations under the License. - + + payment_method + +
Código da Transação
+ payment_code + a-center + center + payment.transaction_code + text +
+ real_order_id +
+ + payment_method + +
Código da Transação
+ payment_code + a-center + center + payment.transaction_code + text +
+ real_order_id +
+ + payment_method + +
Código da Transação
+ payment_code + a-center + center + payment.transaction_code + text +
+ real_order_id +
+ payment_method
Código da Transação
@@ -33,7 +69,43 @@ limitations under the License.
- + + payment_environment + +
Ambiente
+ payment_environment + a-center + center + payment.environment + text +
+ payment_method +
+ + payment_environment + +
Ambiente
+ payment_environment + a-center + center + payment.environment + text +
+ payment_method +
+ + payment_environment + +
Ambiente
+ payment_environment + a-center + center + payment.environment + text +
+ payment_method +
+ payment_environment
Ambiente
diff --git a/app/design/frontend/base/default/layout/uol/pagseguro.xml b/app/design/frontend/base/default/layout/uol/pagseguro.xml index bfd3990..4dad35c 100644 --- a/app/design/frontend/base/default/layout/uol/pagseguro.xml +++ b/app/design/frontend/base/default/layout/uol/pagseguro.xml @@ -72,6 +72,18 @@ limitations under the License.
+ + + + + + + + + + + + diff --git a/app/design/frontend/base/default/template/uol/pagseguro/direct/payment.phtml b/app/design/frontend/base/default/template/uol/pagseguro/direct/payment.phtml index 1a6028f..1272ed4 100644 --- a/app/design/frontend/base/default/template/uol/pagseguro/direct/payment.phtml +++ b/app/design/frontend/base/default/template/uol/pagseguro/direct/payment.phtml @@ -1,4 +1,4 @@ - +

Pedido efetuado

diff --git a/app/design/frontend/base/default/template/uol/pagseguro/form/boleto.phtml b/app/design/frontend/base/default/template/uol/pagseguro/form/boleto.phtml new file mode 100644 index 0000000..0c219f3 --- /dev/null +++ b/app/design/frontend/base/default/template/uol/pagseguro/form/boleto.phtml @@ -0,0 +1,65 @@ + + + + + diff --git a/app/design/frontend/base/default/template/uol/pagseguro/form/creditcard.phtml b/app/design/frontend/base/default/template/uol/pagseguro/form/creditcard.phtml new file mode 100644 index 0000000..34279d4 --- /dev/null +++ b/app/design/frontend/base/default/template/uol/pagseguro/form/creditcard.phtml @@ -0,0 +1,172 @@ + + + + + + + + + diff --git a/app/design/frontend/base/default/template/uol/pagseguro/form/onlinedebit.phtml b/app/design/frontend/base/default/template/uol/pagseguro/form/onlinedebit.phtml new file mode 100644 index 0000000..d1baab1 --- /dev/null +++ b/app/design/frontend/base/default/template/uol/pagseguro/form/onlinedebit.phtml @@ -0,0 +1,103 @@ + + + + +