Pasarela de pago Servired para Magento. Bug

De todos es conocido el módulo de pago para Servired. Para aquellos que no lo conozcáis está disponible desde Magento Connect.

Módulo de pago para Servired

Bueno, si te dedicas a desarrollar tiendas para Magento, o incluso si quieres probar suerte con la tuya, es muy posible que termines instalando este módulo. La verdad es que funciona perfectamente. Hoy, uno de nuestros clientes ha encontrado un pequeño “bug”. La verdad es que es bastante chorra pero buscando la solución al final hemos encontrado mucha gente que pregunta y poca que responde.

El problema se describe en este post:

http://www.magentocommerce.com/boards/viewthread/33072/

El caso es que cuando se realiza una transacción que devuelve como resultado una operación válida, el estado del pedido no es visible desde “Mi cuenta” o desde el histórico de pedidos de un cliente. Además, el administrador se encontrará en el administrador con pedidos que no pueden cambiar de estado (lo cual es bastante engorroso).

Podríamos aprovechar la ocasión para hablar del módulo que permite ampliar el número de estados por los que puede pasar un pedido. Creo recordar que ya hablamos hace unas semanas.

La solución os la dejo aquí y si alguien quiere ampliarla será bien recibido.

El problema radica básicamente en la asignación de orderStatus y orderState. Lo primero que tenemos que hacer es buscar la función “public function  successAction() ” en el fichero StandardController.php que hay en módulo de Servired. al principio de la función comentar las líneas que hay referentes a la asignación del orderStatus e incluir estas dos:

</p>
<p>$orderState = Mage_Sales_Model_Order::STATE_PROCESSING;<br /> $orderStatus = Mage::getModel('servired/standard')-&gt;getConfigData('order_status');</p>
<p>

Al final de la misma función, justo antes de “$order->save();”  incluir estas líneas:

</p>
<p>if (!$orderStatus) {<br /> $orderStatus = $order-&gt;getConfig()-&gt;getStateDefaultStatus($orderState);<br /> }<br /> <br /> $order-&gt;setState($orderState, $orderStatus,$comment,true);</p>
<p>

Con esto será suficiente. La explicación pasa por asignar correctamente un orderStatus y un orderState. En el caso de no estar disponible el orderState le asignaremos uno por defecto. Ahora ya podemos ver en el histórico de pedidos de nuestro cliente el pago realizado con el módulo para Magento de Servired.

Saludos.

 


Compartir:
  • Print this article!
  • Facebook
  • Twitter
  • Meneame
  • Google Bookmarks
  • del.icio.us
  • Digg


COMENTARIOS

Hey, gracias por la info pero la verdad no hemos tenido este problema si no algunos muy diferente… pero esta bien saberlo

saludos


Hola Sergio,

Estoy intentando solucionar este bug de servired, pero la verdad es que soy un novato en php… Mi problema es que no sé exactamente donde colocar este código adicional que comentas. Si no fuera molestia, ¿te importaría mostrar la función completa con la nueva modificación, de modo que pueda copiar y pegar en StandardController.php?


Esta es la función que comentas, en la cual no sé donde situar el código:

public function successAction()
{
$params = $this->getRequest()->getParams();

/**
* Si en la URLOK se han recibido parametros (en la administracion del
* TPV se puede poner que se reciban o no, por defecto es NO)
* Es MUY RECOMENDABLE configurar el TPV para que envie parametros a
* las URLOK y URLKO de otra forma no se podra certificar que la
* comunicacion viene del TPV y no de otra fuente.
*/
if(count($params) > 0)
{
$Ds_Response = $params['Ds_Response'];
if($this->firmaValida($params))
{
$comment = ”;
if($Ds_Response == ’0930′)
{
if($params['Ds_PayMethod'] == ‘R’)
{
$comment = ‘Realizado por Transferencia bancaria’;
} else
{
$comment = ‘Realizado por Domiciliacion bancaria’;
}
} elseif($Ds_Response >= ’0000′ && $Ds_Response addsuccess(Mage::helper(‘servired’)->__($comment, $Ds_Response));
$this->_redirect(‘checkout/onepage/success’);

//Si la firma no es valida
} else
{
/**
* Redireccionar a Pagina Inicio de la tienda.
*/
$this->_redirect(”);
}
} else
{
/**
* Si no se enviaron parametros
* Si esta configurado el TPV para no mandar parametros por GET
* a las URLOK y URLKO, no nos queda mas remedio que mostrar
* el mensaje de “transacción correcta”, aunque puede que
* la llamada a la URLOK o URLKO no se haya hecho por el TPV.
* A nivel de seguridad no es importante, puesto que aunque
* se muestre el mensaje de que se ha hecho correctamente
* la transaccion, en realidad el estado de la transaccion
* se controla mediante el callbackAction (que obligatoriamente
* recibe parametros via POST, entre ellos la firma)
*/
$session = Mage::getSingleton(‘checkout/session’);
$session->addsuccess(Mage::helper(‘servired’)->__(‘Transaccion autorizada’));
$this->_redirect(‘checkout/onepage/success’);
}
}


Seguro que la funcion a modificar es successAction() no veo que incluya la linea $order->save();


Hay un módulo de pago nuevo compatible con enterprise y community que hace las devoluciones desde el admin.
http://www.magentocommerce.com/magento-connect/Interactiv4/extension/6192/servired_pro



la función a modificar no es successAction() sino callbackAction()
Saludos


PARTICIPA EN LA CONVERSACIÓN

Introduce tu información personal o utiliza tu cuenta de twitter o facebook para acceder

 






SIGUENOSEN: