Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

[HOWTO] [ATOS] Message d’erreur retour boutique (avec no response)
 
ArthurCarayon
Jr. Member
 
Total Posts:  7
Joined:  2010-04-27
 

Bonjour,

J’ai remarqué que le message d’erreur sur la boutique n’était pas qualitatif, puisque si le client annule ou qu’il est rejeté par la banque, le message est le même. Le client peut être perdu et ne pas comprendre pourquoi il se retrouve sur le panier.

Allez donc dans /app/code/community/Quadra/Atos/PaymentController.php remplacer ceci :

public function cancelAction() {
        
if (!$this->getRequest()->isPost('DATA')) {
            $this
->_redirect('');
            return;
        
}

        
// Model par défaut
        
$model $this->getAtosMethod();
        
$response $model->getApiResponse()
                ->
doResponse($_REQUEST['DATA'], array('bin_response' => $model->getBinResponse()));

        if (
$response{
            
unset($model);
            
$this->_setAtosResponse($response);
            
Mage::getModel('atos/log_response')->logResponse('cancel'$response);

            
$realOrderIds $this->_getRealOrderIds();
            if (
count($realOrderIds) > 0{
                $order 
Mage::getModel('sales/order')->loadByIncrementId($realOrderIds[0]);
                
$model $this->getAtosMethod($order->getPayment()->getMethod());
                unset(
$order);
            
}

            
foreach ($realOrderIds as $realOrderId{
                $order 
Mage::getModel('sales/order')->loadByIncrementId($realOrderId);

                if (
$order->getId()) {
                    
if (!($status $model->getConfigData('order_status_payment_canceled'))) {
                        $status 
$order->getStatus();
                    
}

                    $order
->addStatusToHistory(
                            
$status$this->__('Order was canceled by customer')
                    );

                    if ((
$status == Mage_Sales_Model_Order::STATE_HOLDED) && $order->canHold()) {
                        $order
->hold();
                    
elseif (($status == Mage_Sales_Model_Order::STATE_CANCELED) && $order->canCancel()) {
                        $order
->cancel();
                    
}

                    $order
->save();
                
}
            }

            
if (!$model->getConfigData('empty_cart')) {
                Mage
::helper('atos')->reorder($this->_getRealOrderIds());
            
else {
                $this
->_session->setQuoteId($this->_session->getAtosQuoteId(true));
            
}

            $this
->_session->setCanRedirect(false);
            
$this->_session->addNotice($this->__('The payment was canceled.'));
        
}

        $this
->_redirect('checkout/cart');
    
}

par ceci :

public function cancelAction() {
        
if (!$this->getRequest()->isPost('DATA')) {
            $this
->_redirect('');
            return;
        
}

        
// Model par défaut
        
$model $this->getAtosMethod();
        
$response $model->getApiResponse()
                ->
doResponse($_REQUEST['DATA'], array('bin_response' => $model->getBinResponse()));

        if (
$response{
            
unset($model);
            
$this->_setAtosResponse($response);
            
Mage::getModel('atos/log_response')->logResponse('cancel'$response);

            
$realOrderIds $this->_getRealOrderIds();
            if (
count($realOrderIds) > 0{
                $order 
Mage::getModel('sales/order')->loadByIncrementId($realOrderIds[0]);
                
$model $this->getAtosMethod($order->getPayment()->getMethod());
                unset(
$order);
            
}

            
foreach ($realOrderIds as $realOrderId{
                $order 
Mage::getModel('sales/order')->loadByIncrementId($realOrderId);

                if (
$order->getId()) {
                    
if (!($status $model->getConfigData('order_status_payment_canceled'))) {
                        $status 
$order->getStatus();
                    
}

                    $order
->addStatusToHistory(
                            
$status$this->__('Order was canceled by customer')
                    );

                    if ((
$status == Mage_Sales_Model_Order::STATE_HOLDED) && $order->canHold()) {
                        $this
->_session->addNotice($this->__('Paiement rejeté. Contactez le support client pour plus d\'informations.'));
                        $order->hold();
                    } elseif (($status == Mage_Sales_Model_Order::STATE_CANCELED) && $order->canCancel()) {
                        $this->_session->addNotice($this->__('
Vous avez annulé le paiementPour toute question le support client est Ã  votre Ã©coute.'));
                        $order->cancel();
                    } else {
                        $this->_session->addNotice($this->__('
Il y a eu un problème... avez vous bien entré vos informations bancaire Réessayezou contactez-nous.'));
                    }

                    $order->save();
                }
            }

            if (!$model->getConfigData('
empty_cart')) {
                Mage::helper('
atos')->reorder($this->_getRealOrderIds());
            } else {
                $this->_session->setQuoteId($this->_session->getAtosQuoteId(true));
            }

            $this->_session->setCanRedirect(false);
            /*$this->_session->addNotice($this->__('
The payment was canceled.'));*/
        }

        $this->_redirect('
checkout/cart');
    }

Tout se passe entre les ligne 129 et 137, vous pouvez donc personnaliser le message d’erreur en fonction du type d’annulation. (annulé, rejeté, autre)

En espérant que ça en aide certains,
Bonne journée !

 
Magento Community Magento Community
Magento Community
Magento Community
 
plancton
Jr. Member
 
Total Posts:  19
Joined:  2009-07-29
 

Amon avis, le mieux est simplement d’ajouter les informations apportées par la banque au message “paiement annulé”.
Il suffit alors de remplacer :

$this->_session->addNotice($this->__('The payment was canceled.');

par

$bank_return Mage::getSingleton('atos/api_response')->describeResponse($response,'array');
$bank_message = isset($bank_return['response_code'])?' '.$bank_return['response_code']:'';
$bank_message .= (isset($bank_return['bank_response_code']) && $bank_return['bank_response_code']!=$bank_return['response_code'])?' : '.$bank_return['bank_response_code']:'';
$bank_message .= isset($bank_return['cvv_response_code'])?' - '.$bank_return['cvv_response_code']:'';
        
$this->_session->addNotice($this->__('The payment was canceled.').$bank_message);

ça marche aussi en cas d’annulation de l’internaute et cela donne les renseignements “précis” sur les raisons du refus.

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top