Avisos
Vaciar todo

SERMEPA / REDSYS  

Página 1 / 2
 
Sergio
 Sergio
Reputable Member

Hola estoy ultimando las pruebas de integracion de sermepa y todo me funciona bien excepto el cambio del estado del pedido. He estado mirando el POST con el Firedebug y veo que en el entorno de pruebas (segun video de configuracion sermepa de webempresa) no existen los campos necesarios para cambiar el estado del pedido (notify_sermepa.php)

Ds_signature
Ds_response
etc.....

Esto solo ocurre en el entorno de pruebas.....o en el entorno de pruebas debería cambiar el estado del pedido?

La URL www.pienso24horas.com, usuario de pruebas Contenido solo visible a usuarios registrados

Espero vuestros comentarios al respecto.

Citar
Respondido : 09/01/2012 3:50 pm
Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

El cambio del estado de pedido con la pasarela de pago Sermepa se haría desde el archivo notify_sermepa.php (o el nombre que le hayas puesto) y debería funcionar tanto en el entorno de pruebas como en el real.

En el caso de que no se esté actualizando el pedido una vez realizado el pago de pruebas de forma correcta o incorrecta, puede deberse a distintas razones:

- Desde la configuración de la pasarela de pago de Virtuemart no estás indicando correctamente el nombre del archivo de notficación. Por ejemplo si tienes el siguiente código en la configuración:

$urlMerchant= JURI::base().'administrator/components/com_virtuemart/notificacion_sermepa.php';

El archivo se tendría que llamar notificacion_sermepa.php y debería de estar colocado en la ruta administrator/components/com_virtuemart de tu web.

- En el archivo de notificación notify_sermepa.php no has puesto los datos correctos de configuración. Aquí tendrías que configurar los siguientes valores con los de tu negocio:

$clave='clave_negocio';                     // Clave de comercio proporcionada por Sermepa.
$name='nombre_negocio';                        // Nombre del comercio que sale en la transaccion.
$code='codigo_negocio';                        // Codigo de comercio proporcionado por Sermepa.
$terminal='1';                                      // Terminal usado.

Estos valores tienes que coincidir con los que hayas puesto en la configuración de Virtuemart.

- No se está calculando de forma correcta el valor de la firma en el archivo notify_sermepa.php
Para comprobar esto edita el archivo y cambia la línea:

if($Ds_Signature==$signature){

por lo siguiente:

if(1==1){

y comprueba si así sí que te actualiza el estado del pedido.

ResponderCitar
Respondido : 09/01/2012 4:59 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Sergio
 Sergio
Reputable Member

Hola Pablo el problema creo que radica en que en pruebas el valor Ds_Response no es enviado, al igual que el Ds_Signature, me lo puedes confirmar. La firma es correcta ya que si no autorizaría la operacion. Esta es la captura:

Sis_Numero_Tarjeta:4548812049400004
Sis_Caducidad_Tarjeta:1212
Sis_Signature:d7fd09688e1fe89a8db33c8aebae9593b4276c04
Sis_Resultado_Autenticacion:NO_AUTENTICADA
Ds_Merchant_MerchantSignature:77C4CB6C19515DD18D2E3477F2AAD2A1D7784997
Ds_Merchant_MerchantCode:322080409
Ds_Merchant_MerchantName:www.Pienso24horas.com
Ds_Merchant_Terminal:1
Ds_Merchant_Order:00000092-57D
Ds_Merchant_Amount:21,33
Ds_Merchant_Currency:978
Sis_URLRetorno: https://sis-t.sermepa.es:25443/sis/pagoFinanet;jsessionid=0000urrOOK5JmWNIav0mb-cd5QH:-1
Sis_Idioma:1

Una vez metido el SIP de la tarjeta de pruebas:

Sis_Resultado_Autenticacion:AUTENTICADA
Sis_Signature:880cb69548d6d87fb255935879203d459006d1e4

ResponderCitar
Respondido : 09/01/2012 8:20 pm
Sergio
 Sergio
Reputable Member

Pablo te anexo la configuracion del metodo de pago:

f("order_id").'&option=com_virtuemart&Itemid=64';
$urlKO = JURI::base().'index.php?option=com_content&view=article&id=58&Itemid=64';
$urlMerchant= JURI::base().'administrator/components/com_virtuemart/notify_servired.php'; // Para poder definir una URL del comercio es necesario usar PHP5
$descripcion = 'Comprar productos en www.pienso24horas.es';

$order = '000'.$db->f("order_id");
$amount=$db->f("order_total")*100;

$message = $amount.$order.$code.$currency.$tipoOperacion.$urlMerchant.$clave;
$signature = strtoupper(sha1($message));

if( $page == "checkout.thankyou" ) {
?>

<form name="form" action="" method="post">

<input type="hidden" name="Ds_Merchant_Amount" value="" />
<input type="hidden" name="Ds_Merchant_Currency" value="" />
<input type="hidden" name="Ds_Merchant_Order" value="" />
<input type="hidden" name="Ds_Merchant_ProductDescription" value="" />
<input type="hidden" name="Ds_Merchant_Titular" value="first_name ?> last_name ?>" />
<input type="hidden" name="Ds_Merchant_MerchantCode" value="" />
<input type="hidden" name="Ds_Merchant_MerchantURL" value="" />
<input type="hidden" name="Ds_Merchant_UrlOK" value="" />
<input type="hidden" name="Ds_Merchant_UrlKO" value="" />
<input type="hidden" name="Ds_Merchant_MerchantName" value="" />

<input type="hidden" name="Ds_Merchant_MerchantSignature" value="" />
<input type="hidden" name="Ds_Merchant_Terminal" value="" />
<input type="hidden" name="Ds_Merchant_TransactionType" value="" />

document.forms.form.submit();

Y aparte el notify.....que es ultimo que has publicado. Con las modificaciones del If para ver si entra

ResponderCitar
Respondido : 09/01/2012 8:35 pm

Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

Lo primero: no es conveniente que coloques el código de la configuración del comercio, ya que de esta forma estás revelando tú código de comercio. En principio no es grave porque todavía no se ha puesto la clave real.

En la múltiples configuraciones de pasarelas de pago Sermepa que he realizado he visto que en el modo de prueba también se pasan todos los datos, por lo que no hace falta esperar a pasar al modo real para poder confirmar los pedidos.

Si te llegan otros datos te aconsejo que consultes con tu entidad bancaria este hecho, para comprobar si se han producido cambios recientes en la configuración de la pasarela de pago Sermepa, o si puede que la pasarela de pago que estés utilizando no sea exactamente de Sermepa.

Por último, recuerda que la mejor forma de comprobar si un pago con tarjeta de crédito se ha realizado sería mirando en la administración de la pasarela de pago, ya que si te hackearan la web de forma que puedan actualizar un registro de la base de datos, podrías ver como confirmados pedidos que en realidad no se han pagado.

ResponderCitar
Respondido : 10/01/2012 11:12 am
Sergio
 Sergio
Reputable Member

Gracias Pablo lo revisare. Aunque si en el codigo ponemos 1==1 debería actualizar el estado no? La verdad es que no entiendo porque no lo hace...

ResponderCitar
Respondido : 10/01/2012 11:40 am

optimiza-automaticamente-todas-las-imagenes-de-tu-wordpress

Sergio
 Sergio
Reputable Member

Pablo he dejado el fichero adecuado para que modifique el estado del pedido, es decir he sacado, fuera de los if. Sigue sin modificar el estado..puede que el problema este en el if(_$POST)...como puedo saberlo?

//Incluido en las pruebas de modificacion del estado
$d['order_status'] = "C";
require_once ( CLASSPATH . 'ps_order.php' );
$ps_order= new ps_order;
$ps_order->order_status_update($d);

Me da que no esta haciendo ni caso al fichero

ResponderCitar
Respondido : 10/01/2012 2:06 pm
Sergio
 Sergio
Reputable Member

Otra prueba mas realizada...me estoy volviendo loco....he renombrado el fichero notify_servired....y milagro la transaccion la da por buena. Pero no da ningun error....como es esto posible....

ResponderCitar
Respondido : 10/01/2012 2:18 pm

wpdoctor-revisa-la-salud-de-tu-wordpress

Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

El archivo notify_servired.php no se utiliza para realizar las transacciones, sino solo para recibir el estado de la misma, con el fin de actualizar el estado del pedido.
Es decir, si el archivo no existe el pago se puede seguir realizando.

Sobre el código if(_$POST) realmente se encarga de comprobar que al llamar a este php se están enviando parámetros para su lectura. Estos normalmente tendrían que llegar con el método post, aunque si quieres puedes probar a sustituirlo por if(1==1)

ResponderCitar
Respondido : 10/01/2012 5:59 pm
Sergio
 Sergio
Reputable Member

también probado y tampoco actualiza el estado del producto.

ResponderCitar
Respondido : 10/01/2012 6:55 pm

Cursos Gratuitos WordPress

Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

En tal caso da la sensación de que no se está llamando al archivo notify_servired.php durante el pago.

Para comprobarlo realiza esta última prueba. Editar el archivo notify_servired.php y, previa copia, borra todo y deja el siguiente código:


Después, coloca un archivo test.txt vacio en la misma ruta del archivo notify_servired.php. Por último, haz una prueba de compra y comprueba si en el archivo test.txt que has subido se ha añadido algún texto. De no ser así, parece que no se está llamando al archivo notify_servired.php.

ResponderCitar
Respondido : 11/01/2012 12:47 pm
Sergio
 Sergio
Reputable Member

Hola Pablo probado y escribe dentro del fichero........he puesto esa cadena dentro del primer if ( 1 ==1 ) y escribe. Entonces lo que esta fallando es el update del campo estado:

//Incluido en las pruebas de modificacion del estado
$d['order_status'] = "C";
require_once ( CLASSPATH . 'ps_order.php' );
$ps_order= new ps_order;
$ps_order->order_status_update($d);

Que mas puedo seguir probando??

ResponderCitar
Respondido : 11/01/2012 1:39 pm

Gestor de Contraseñas - VPN Conexión Segura - Gestor 2FA (Segundo Factor de Autenticación

Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

En tal caso el problema debería de estar en que no recibe correctamente los datos de sermepa. Concretamente fallaría la siguiente consulta:

      $qv = "SELECT `order_id`, `order_number`, `user_id`, `order_subtotal`,
                    `order_total`, `order_currency`, `order_tax`,
                    `order_shipping_tax`, `coupon_discount`, `order_discount`
                FROM `#__{vm}_orders`
                WHERE `order_id`='".intval($Ds_Order)."'";
      $db = new ps_DB;
      $db->query($qv);
      $db->next_record();

Es decir, el campo Ds_Order que recibe no es correcto o no se llama así y por eso la consulta para coger los datos del pedido no coge ningún dato.

Tendrías que verificar los nombres de los campos que recibes desde Sermepa para ver si los nombres son los correctos.

ResponderCitar
Respondido : 11/01/2012 6:01 pm
Sergio
 Sergio
Reputable Member

Hola Pablo te anexo lo que me devuelve el TPV:

Ds_TransactionType:0;
Ds_Card_Country:724;
Ds_Date:28/03/2012;
Ds_SecurePayment:1;
Ds_Signature:8BE06C3E57ED19D22BA99BFDB610FB6B3F468299;
Ds_Order:00089;
Ds_Hour:21:37;
Ds_Response:0184;
Ds_AuthorisationCode: ;
Ds_Currency:978;
Ds_ConsumerLanguage:1;
Ds_MerchantCode:xxxxxxxxx;
Ds_Amount:371;
Ds_Terminal:001;
Server URL: sis.sermepa.es

Ya no se por donde seguir

ResponderCitar
Respondido : 29/03/2012 9:59 am

Pablo Velasco
 Pablo Velasco
Illustrious Member

Hola,

Estos datos que indicas parecen los correctos. Otra cosa es que se estén recibiendo correctamente en el archivo de notificación. Lo que habría que hacer es verificar que realmente se está llamando al archivo de notificación, porque es posible que el problema esté en que desde la pasarela de pago no se entre en este archivo.

Para hacer una prueba, edita el archivo de notificación de Sermepa y, previa copia de seguridad, sustituye todo el código que viene por el siguiente:

 

Además, tendrás que subir un archivo de texto txt con nombre test.txt en la misma ruta del archivo de notificación, que supongo que será administrator/components/com_virtuemart.

Después, han una prueba de compra de forma que se entre a pagar en la pasarela de pago. El pago puede ser correcto o no. Una vez que vuelvas de la pasarela a tu web edita el archivo test.txt y comprueba si dentro se ha escrito un texto. En caso contrario no se estaría llamando a este archivo.

ResponderCitar
Respondido : 29/03/2012 1:45 pm
Página 1 / 2