Hasta ahi todo bien,
sucede que debo actualizar los registros en la db para que tome la info que Pagos Online me envia luego de la compra. tengo dos tablas en mi base de datos una que se llama
pedidos_confir es esta la estructura
Código:
CREATE TABLE IF NOT EXISTS `pedidos_confir` ( `name` varchar(100) NOT NULL, `fecha` varchar(32) NOT NULL default '', `refventa` varchar(32) NOT NULL default '', `refpol` varchar(32) NOT NULL default '', `estado_pol` varchar(32) NOT NULL default '', `formapago` varchar(32) NOT NULL default '', `banco` varchar(32) NOT NULL default '', `codigo_respuesta_pol` varchar(32) NOT NULL default '', `mensaje` varchar(50) NOT NULL default '', `valor` varchar(20) NOT NULL default '', `email` varchar(100) NOT NULL, UNIQUE KEY `refventa` (`refventa`), FULLTEXT KEY `email` (`email`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
donde en el" estado_pol" debo agregar la info que recibo de pagos online, segun el caso ellos me dan 4 estados
si el caso es 4 el estado es A=aceptado
caso 5 el estado es C=Cancelado
caso 6 el estado es R=rechazado
caso 12 el estado es P=pendiente.
debo tomar esos datos y convertirlos par actualizar mi tabla dentro del script la cual su estructura es.
Código:
en este caso debo actualizar el "state" CREATE TABLE IF NOT EXISTS `order` ( `id` bigint(20) unsigned NOT NULL auto_increment, `pay_id` varchar(32) default NULL, `service` varchar(16) NOT NULL default 'paypal', `user_id` int(10) unsigned NOT NULL default '0', `admin_id` int(10) unsigned NOT NULL default '0', `team_id` int(10) unsigned NOT NULL default '0', `city_id` int(10) unsigned NOT NULL default '0', `card_id` varchar(16) default NULL, `state` enum('unpay','pay','rejected','pending') NOT NULL default 'unpay', `quantity` int(10) unsigned NOT NULL default '1', `realname` varchar(32) default NULL, `mobile` varchar(128) default NULL, `zipcode` char(6) default NULL, `address` varchar(128) default NULL, `express` enum('Y','N') NOT NULL default 'Y', `express_xx` varchar(128) default NULL, `express_id` int(10) unsigned NOT NULL default '0', `express_no` varchar(32) default NULL, `price` double NOT NULL, `money` double NOT NULL, `origin` double NOT NULL, `credit` double NOT NULL, `card` double NOT NULL, `fare` double NOT NULL, `condbuy` varchar(128) default NULL, `remark` text, `create_time` int(10) unsigned NOT NULL default '0', `pay_time` int(10) unsigned NOT NULL default '0', `sms_express` enum('Y','N') NOT NULL default 'N', `comment_content` text, `comment_display` enum('Y','N') NOT NULL default 'Y', `comment_grade` enum('good','none','bad') NOT NULL default 'good', `comment_time` int(11) default NULL, `partner_id` int(11) NOT NULL default '0', PRIMARY KEY (`id`), UNIQUE KEY `UNQ_p` (`pay_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=41 ;
tomando los valores de pedidos_confir debo actualizar mi estado de la orden con esto evito que al usuario le salga su pedido como no cancelado.
Este es el archivo que recibe la info sumistrada por la plataforma de pagos, y me permite tomar las variables con los resultados de la orden y actualizar mi db. me pueden ayudar a revisarla y ver que le falta,
si ven el archivo confirmacion.php testa creando un registro donde el ulimo log es este error
[2011-03-16 17:16:12] Error al ejecutar el query (REPLACE INTO pedidos_confir VALUES ('16.03.2011-17:16:12', '1300310134',
'67212035', '5', '', '', '2', '',
'29500.00')) la
base de datos - Column count doesn't match value count at row 1
Código PHP:
<?php
$llave="llave_pol";
$usuarioId = $_REQUEST['id_pol'];
$fecha = date("d.m.Y-H:i:s");
$refVenta = $_REQUEST['ref_venta'];
$refPol = $_REQUEST['ref_pol'];
$estadoPol = $_REQUEST['estado_pol'];
$formaPago = $_REQUEST['tipo_medio_pago'];
$banco = $_REQUEST['medio_pago'];
$codigo = $_REQUEST['codigo_respuesta_pol'];
$mensaje = $_REQUEST['mensaje'];
$valor = $_REQUEST['valor'];
//Escriba su Host, por lo general es 'localhost'
$host = 'localhost';
//Escriba el nombre de usuario de la base de datos
$login = 'usuario_db';
//Escriba la contraseña del usuario de la base de datos
$password = 'contraseña_db';
//Escriba el nombre de la base de datos a utilizar
$basedatos = 'db_name';
//conexion a mysql
$conexion = mysql_connect($host, $login, $password);
if(!$conexion){
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al conectar la base de datos -
".mysql_error()."\n";
}
if(!mysql_select_db($basedatos, $conexion)){
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al seleccionar la base de datos -
".mysql_error()."\n";
}
// consulta a la bd
$sql = "REPLACE INTO pedidos_confir VALUES ('".$fecha."', '".$refVenta."',
'".$refPol."', '".$estadoPol."', '".$formaPago."', '".$banco."', '".$codigo."', '".$mensaje."',
'".$valor."')";
// select para actualizar la bd "pedidos_confir" y "order 'unpay','pay'.'rejected','pending'"
switch($estadoPol)
{
case 4: $result_a = mysql_query("UPDATE order SET state ='pay' WHERE id=".$refVenta ,$conexion);
break;
case 5: $result_c = mysql_query("UPDATE order SET state ='unpay' WHERE id=".$refVenta ,$conexion);
break;
case 6: $result_r = mysql_query("UPDATE order SET state ='rejected' WHERE id=".$refVenta ,$conexion);
break;
case 12:$result_p = mysql_query("UPDATE order SET state ='pending' WHERE id=".$refVenta ,$conexion);
break;
}
$result = mysql_query($sql);
if (!$result) {
$mensajeLog .= "[".date("Y-m-d H:i:s")."] Error al ejecutar el query (".$sql.") la
base de datos - ".mysql_error()."\n";
}
if(strlen($mensajeLog)>0){
$filename = $_SERVER["DOCUMENT_ROOT"]."/confirmacion.txt";
$fp = fopen($filename, "a");
if($fp) { fwrite($fp, $mensajeLog, strlen($mensajeLog));
fclose($fp);
}
}
?>