From 9d5483963164c5ba03486faf3f1dcfae475c5875 Mon Sep 17 00:00:00 2001 From: Ricardo Martins Date: Wed, 2 Sep 2020 10:14:22 +1000 Subject: [PATCH] =?UTF-8?q?-=20Melhoria:=20adicionado=20suporte=20=C3=A0?= =?UTF-8?q?=20novos=20status=20PagSeguro=20(Debitado=20e=20Reten=C3=A7?= =?UTF-8?q?=C3=A3o=20Tempor=C3=A1ria),=20fazendo=20com=20que=20pedidos=20s?= =?UTF-8?q?ejam=20cancelados=20ou=20entrem=20em=20espera=20caso=20o=20comp?= =?UTF-8?q?rador=20abra=20uma=20contesta=C3=A7=C3=A3o=20junto=20ao=20cart?= =?UTF-8?q?=C3=A3o=20de=20cr=C3=A9dito.=20-=20Melhoria:=20Adiciona=20IP=20?= =?UTF-8?q?do=20comprador=20aos=20par=C3=A2metros=20enviados=20ao=20PagSeg?= =?UTF-8?q?uro=20a=20fim=20de=20melhorar=20an=C3=A1lise=20de=20fraude,=20e?= =?UTF-8?q?m=20especial=20nos=20casos=20onde=20o=20sender=5Fhash=20n=C3=A3?= =?UTF-8?q?o=20foi=20enviado?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RicardoMartins/PagSeguro/Helper/Data.php | 16 ++++++++++++++ .../PagSeguro/Helper/Params.php | 22 ++++++++++++++++++- .../PagSeguro/Model/Abstract.php | 22 ++++++++++++++++--- .../RicardoMartins/PagSeguro/etc/config.xml | 2 +- 4 files changed, 57 insertions(+), 5 deletions(-) diff --git a/app/code/community/RicardoMartins/PagSeguro/Helper/Data.php b/app/code/community/RicardoMartins/PagSeguro/Helper/Data.php index 3f85c854..42223c71 100644 --- a/app/code/community/RicardoMartins/PagSeguro/Helper/Data.php +++ b/app/code/community/RicardoMartins/PagSeguro/Helper/Data.php @@ -176,6 +176,22 @@ public function getWsUrl($amend='', $useApp = false) return Mage::getStoreConfig(self::XML_PATH_PAYMENT_PAGSEGURO_WS_URL) . $amend; } + + /** + * Returns Webservice V3 URL based on selected environment (prod or sandbox) + * This API endpoint should be used only for GET requests + * + * @param string $amend suffix + * @param bool $useApp uses app? + * + * @return string + */ + public function getWsV3Url($amend='', $useApp = false) + { + $url = $this->getWsUrl($amend, $useApp); + return str_ireplace('/v2/', '/v3/', $url); + } + /** * Return PagSeguro's lib url based on selected environment (prod or sandbox) * @return string diff --git a/app/code/community/RicardoMartins/PagSeguro/Helper/Params.php b/app/code/community/RicardoMartins/PagSeguro/Helper/Params.php index afe8bae9..3cbf6895 100644 --- a/app/code/community/RicardoMartins/PagSeguro/Helper/Params.php +++ b/app/code/community/RicardoMartins/PagSeguro/Helper/Params.php @@ -86,9 +86,10 @@ public function getSenderParams(Mage_Sales_Model_Order $order, $payment) 'senderCPF' => $digits->filter($cpf), 'senderAreaCode'=> $phone['area'], 'senderPhone' => $phone['number'], - 'isSandbox' => (strpos('@sandbox.pagseguro', $customerEmail) !== false) + 'isSandbox' => (strpos('@sandbox.pagseguro', $customerEmail) !== false), ); + $return = $this->addSenderIp($return); if (strlen($return['senderCPF']) > 11) { $return['senderCNPJ'] = $return['senderCPF']; @@ -789,6 +790,25 @@ public function getPaymentParamsJson($paymentInfo) ) ) ); + } + + /** + * Adds sender ip to $originalParameters array or return original array if unsuccessful or not ip_v4 address + * @param array $originalParameters + * + * @return array + */ + public function addSenderIp($originalParameters) + { + $senderIp = $_SERVER['REMOTE_ADDR']; + + if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { //Cloudflare + $senderIp = $_SERVER['HTTP_CF_CONNECTING_IP']; + } + + if (false === filter_var($senderIp, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) + return $originalParameters; + return array_merge($originalParameters, array('senderIp'=>$senderIp)); } } diff --git a/app/code/community/RicardoMartins/PagSeguro/Model/Abstract.php b/app/code/community/RicardoMartins/PagSeguro/Model/Abstract.php index 48c25ac7..be5ba80c 100644 --- a/app/code/community/RicardoMartins/PagSeguro/Model/Abstract.php +++ b/app/code/community/RicardoMartins/PagSeguro/Model/Abstract.php @@ -100,7 +100,7 @@ public function proccessNotificatonResult(SimpleXMLElement $resultXML) $message = $processedState->getMessage(); - if ((int)$resultXML->status == 6) { //valor devolvido (gera credit memo e tenta cancelar o pedido) + if (in_array((int)$resultXML->status, array(6,8))) { //valor devolvido (gera credit memo e tenta cancelar o pedido) if ($order->canUnhold()) { $order->unhold(); } @@ -220,7 +220,7 @@ public function getNotificationStatus($notificationCode) { $helper = Mage::helper('ricardomartins_pagseguro'); $useApp = $helper->getLicenseType() == 'app'; - $url = $helper->getWsUrl('transactions/notifications/' . $notificationCode, $useApp); + $url = $helper->getWsV3Url('transactions/notifications/' . $notificationCode, $useApp); $params = array('token' => $helper->getToken(), 'email' => $helper->getMerchantEmail()); if ($useApp) { @@ -341,9 +341,25 @@ public function processStatus($statusCode) if ($this->_order && Mage::helper('ricardomartins_pagseguro')->canRetryOrder($this->_order)) { $return->setState(Mage_Sales_Model_Order::STATE_HOLDED); $return->setIsCustomerNotified(false); - $return->setMessage('Retentativa: a transação ia ser cancelada (status 7), mas a opção de retentativa estava ativada. O pedido será cancelado posteriormente caso o cliente não use o link de retentativa no prazo estabelecido.'); + $return->setMessage( + 'Retentativa: a transação ia ser cancelada (status 7), mas ' + . 'a opção de retentativa estava ativada. O pedido será cancelado posteriormente ' + . 'caso o cliente não use o link de retentativa no prazo estabelecido.' + ); } break; + case '8': + $return->setState(Mage_Sales_Model_Order::STATE_CANCELED); + $return->setIsCustomerNotified(false); + $return->setMessage('Debitado: o valor da transação foi devolvida ao comprador após processo' + . ' de disputa.'); + break; + case '9': + $return->setState(Mage_Sales_Model_Order::STATE_HOLDED); + $return->setIsCustomerNotified(false); + $return->setMessage('Retenção Temporária: O comprador abriu uma solicitação de chargeback junto à' + . ' operadora do cartão de crédito.'); + break; default: $return->setIsCustomerNotified(false); $return->setStateChanged(false); diff --git a/app/code/community/RicardoMartins/PagSeguro/etc/config.xml b/app/code/community/RicardoMartins/PagSeguro/etc/config.xml index 3cfe44b7..29743ec7 100644 --- a/app/code/community/RicardoMartins/PagSeguro/etc/config.xml +++ b/app/code/community/RicardoMartins/PagSeguro/etc/config.xml @@ -2,7 +2,7 @@ - 3.9.0 + 3.10.0