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.
Pablo el fichero lo escribe.
En el TPV estoy viendo que me da un error 500. He puesto un fichero solo con las cabeceras de PHP, y obtengo un 200.
Interpreto que el error esta en el notify.
Lo anexo por si ves algo:
initialise();
// load system plugin group
JPluginHelper::importPlugin( 'system' );
// trigger the onBeforeStart events
$mainframe->triggerEvent( 'onBeforeStart' );
$lang =& JFactory::getLanguage();
$mosConfig_lang = $GLOBALS['mosConfig_lang'] = strtolower( $lang->getBackwardLang() );
// Adjust the live site path
$mosConfig_live_site = str_replace('/administrator/components/com_virtuemart', '', JURI::base());
$mosConfig_absolute_path = JPATH_BASE;
} else {
define('_VALID_MOS', '1');
require_once($mosConfig_absolute_path. '/includes/joomla.php');
require_once($mosConfig_absolute_path. '/includes/database.php');
$database = new database( $mosConfig_host, $mosConfig_user, $mosConfig_password, $mosConfig_db, $mosConfig_dbprefix );
$mainframe = new mosMainFrame($database, 'com_virtuemart', $mosConfig_absolute_path );
}
// load Joomla Language File
if (file_exists( $mosConfig_absolute_path. '/language/'.$mosConfig_lang.'.php' )) {
require_once( $mosConfig_absolute_path. '/language/'.$mosConfig_lang.'.php' );
}
elseif (file_exists( $mosConfig_absolute_path. '/language/english.php' )) {
require_once( $mosConfig_absolute_path. '/language/english.php' );
}
/*** END of Joomla config ***/ /*** VirtueMart part ***/
require_once($mosConfig_absolute_path.'/administrator/components/com_virtuemart/virtuemart.cfg.php');
include_once( ADMINPATH.'/compat.joomla1.5.php' );
require_once( ADMINPATH. 'global.php' );
require_once( CLASSPATH. 'ps_main.php' );
/* @MWM1: Logging enhancements (file logging & composite logger). */
$vmLogIdentifier = "notify.php";
require_once(CLASSPATH."Log/LogInit.php");
$debug_email_address = $mosConfig_mailfrom;
// restart session
// Constructor initializes the session!
$sess = new ps_session();
/*** END VirtueMart part ***/
//1. Finished Initialization of the notify_servired.php script"
/**
* Read post from Servired system and update order status
**/
$i = 1;
$Ds_Date = trim(stripslashes($_POST['Ds_Date']));
$Ds_Hour = trim(stripslashes($_POST['Ds_Hour']));
$Ds_Amount = trim(stripslashes($_POST['Ds_Amount']));
$Ds_Currency = trim(stripslashes($_POST['Ds_Currency']));
$Ds_Order = trim(stripslashes($_POST['Ds_Order']));
// Can be USD, GBP, EUR, CAD, JPY
$Ds_MerchantCode = trim(stripslashes($_POST['Ds_MerchantCode']));
$Ds_Terminal = trim(stripslashes($_POST['Ds_Terminal']));
$Ds_Signature = trim(stripslashes($_POST['Ds_Signature']));
//respuesta de la transacción valores entre 0000 a 0099 indican que correcto
$Ds_Response = trim(stripslashes($_POST['Ds_Response']));
$Ds_TransactionType = trim(stripslashes($_POST['Ds_TransactionType']));
$Ds_AuthorisationCode = trim(stripslashes($_POST['Ds_AuthorisationCode']));
// Get the Order Details from the database
// Get the Order Details from the database
$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();
$order_id = $db->f("order_id");
$d['order_id'] = $order_id;
$d['notify_customer'] = "Y";
$clave='qwertyasdf0123456789'; // Clave de comercio proporcionada por Sermepa.
$name='nombre_negocio'; // Nombre del comercio que sale en la transaccion.
$code='092452770'; // Codigo de comercio proporcionado por Sermepa.
$terminal='1'; // Terminal usado.
$currency='978'; // 978=Euros.
$tipoOperacion='0'; // Tipo de operacion. 0=Autorizacion.
// Calculo del hash para firmar los datos.
$order = '000'.$order_id;
$amount=$db->f("order_total")*100;
$message = $amount.$order.$code.$currency.$Ds_Response.$clave;
$signature = strtoupper(sha1($message));
if($Ds_Signature==$signature){
//-------------------------------------------
// ...read the results of the verification...
// If $Ds_Response esta entre 0000 y 0099 la transacción ha ido bien
//-------------------------------------------
if (intval ( $Ds_Response)>=0 && intval ( $Ds_Response)order_status_update($d);
/*$mail->From = $mosConfig_mailfrom;
$mail->FromName = $mosConfig_fromname;
$mail->AddAddress($debug_email_address);
$mail->Subject = "SERVIRED IPN txn on your site";
$mail->Body = "Hello,nn";
$mail->Body .= "a SERVIRED transaction for you has been made on your website!n";
$mail->Body .= "-----------------------------------------------------------n";
$mail->Body .= "Order ID: $order_idn";
$mail->Body .= "Payment Status returned by SERVIRED: $Ds_Responsen";
$mail->Body .= "Order Status Code: ".$d['order_status'];
$mail->Send();*/
$mailsubject= "SERVIRED IPN txn on your site";
$mailbody= "Hello,nn";
$mailbody .= "a SERVIRED transaction for you has been made on your website!n";
$mailbody .= "-----------------------------------------------------------n";
$mailbody .= "Order ID: $order_idn";
$mailbody .= "Payment Status returned by SERVIRED: $Ds_Responsen";
$mailbody .= "Order Status Code: ".$d['order_status'];
vmMail($mosConfig_mailfrom, $mosConfig_fromname, $debug_email_address, $mailsubject, $mailbody );
}
else {
$d['order_status'] = "X";
require_once ( CLASSPATH . 'ps_order.php' );
$ps_order= new ps_order;
$ps_order->order_status_update($d);
/*$mail->From = $mosConfig_mailfrom;
$mail->FromName = $mosConfig_fromname;
$mail->AddAddress($debug_email_address);
$mail->Subject = "SERVIRED Transaction on your Site";
$mail->Body = "Hello,
An error occured while processing a SERVIRED transaction.
----------------------------------
Order ID: $order_idn
Order Status Code:$Ds_Response";
$mail->Send();*/
$mailsubject= "SERVIRED Transaction on your Site";
$mailbody= "Hello,
An error occured while processing a SERVIRED transaction.
----------------------------------
Order ID: $order_idn
Order Status Code:$Ds_Response";
vmMail($mosConfig_mailfrom, $mosConfig_fromname, $debug_email_address, $mailsubject, $mailbody );
}
}
else{
/*$mail->From = $mosConfig_mailfrom;
$mail->FromName = $mosConfig_fromname;
$mail->AddAddress($debug_email_address);
$mail->Subject = "SERVIRED Transaction on your Site";
$mail->Body = "Hello,
Se ha recibido una transacción de SERVIRED con una firma erronea.
----------------------------------
Order ID: $order_idn
Order Status Code:$Ds_Responsen
Cantidad recibida= $Ds_Amount.
Cantidad pedido: $amount.
order_servired=$Ds_Ordern
Firma recibida=$Ds_Signaturen
Firma generada=$signaturen
";
$mail->Send();*/
$mailsubject= "SERVIRED Transaction on your Site";
$mailbody= "Hello,
Se ha recibido una transacción de SERVIRED con una firma erronea.
----------------------------------
Order ID: $order_idn
Order Status Code:$Ds_Responsen
Cantidad recibida= $Ds_Amount.
Cantidad pedido: $amount.
order_servired=$Ds_Ordern
Firma recibida=$Ds_Signaturen
Firma generada=$signaturen
";
vmMail($mosConfig_mailfrom, $mosConfig_fromname, $debug_email_address, $mailsubject, $mailbody );
}
}
?>
Pablo en el fichero de test escribe-........
Hola,
No te acabo de entender si en la prueba que has hecho con lo que te puse se escribió en el archivo test.txt o no. Supongo que sí. De ser así, se está llamando correctamente el archivo.
Te vuelvo a incluir comprimido en un zip el archivo de notificación que he usado en multitud de ocasiones y que me ha funcionado sin problemas, para que lo puedas probar.
Recuerda que tienes que introducir los datos de tu negocio (código de comercio, clave, etc.) a partir de la línea 135.
Hola Pablo, despues del quebradero de cabeza compre el modulo TPPV de La caixa. Funciona con todos los Banco de Sermepa. Muy recomendable y muy buen servicio de atencion de incidencias
Lo recomiendo....49€ despues de todo el dia con esto....
Me salvo la vida. Actualiza los pedidos de forma impecable.