Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/04/2018, 23:41
ceysmar
 
Fecha de Ingreso: febrero-2015
Ubicación: venezuela
Mensajes: 50
Antigüedad: 9 años, 2 meses
Puntos: 0
algún consejo ? o mejora para mi función de transacción

Buen amigo del foro quiero compartir con una función para ver qué me dicen que puedo mejorar o como la aria más eficiente o detalles,
El asunto es que estoy haciendo unas aplicaciones pagos con mis clientes los cuales son los principales interesados por nuestra forma de negocios claro está el método de pago es por transferencia bancarias ellos usaría mi aplicación para pagar ciertos servicios que ofrezco pero también yo les transferiría a ellos dinero como ellos a mi
Entonces estoy haciendo las consultas necesarias para crear una solicitud de retiro que se guardara en mi tabla solicitudes como a su vez se le descuenta del saldo disponible el monto a retirar y se actualiza la el campo que guarda el saldo claro está en caso de que se cánsele la solicitud el dinero de monto de retiro se les volverá a sumar en su saldo disponible
No sabía nada de consultas para tablas con motores transaccionales ni de commit ni rollBack asi que quiero dejar mi código para que Ud. me den consejos o mejoras ya que esta face debe se súper segura a prueba de fallas para evitar la redundancia de datos o que me llegue un cliente molesto porque x algún problema de conexión no le devolvió su dinero cosa que según entiendo con autocommit(false); aria de varias consulta una sola y se efectuaría los cambios siempre y cuando todas las consultas se llevaron acabo



Código PHP:
Ver original
  1. // transacion de retiro
  2.     public function retiro_fondos($cajero, $cliente, $monto)
  3.     {
  4.         //escapamos variables de entrada
  5.         $cajero  = $this->con->real_escape_string($cajero);
  6.         $cliente = $this->con->real_escape_string($cliente);
  7.         $monto   = $this->con->real_escape_string($monto);
  8.  
  9.         //sacamos el monto disponible del usuario y id
  10.         $saldos     = $this->sal_user_id();
  11.         $saldo      = $this->saldo_user['saldo'];
  12.         $id_cliente = $this->saldo_user['id'];
  13.  
  14.         //Armamos $movi movimiento que se guarda en la tabla de movimientos de usuarios
  15.         $movi = "S/RETIRO - " . number_format($monto) . ' ' . MONEDA;
  16.  
  17.         //restamos de saldo el monto de retiro
  18.         $disponible = $saldo - $monto;
  19.  
  20.         //verificamos que el monto a retirar no sea mayor a monto disponible
  21.         if ($disponible >= "0") {
  22.  
  23.             //extraemos los datos del banco del cliente
  24.             $bancos = $this->banco_user();
  25.  
  26.             //datos del banco del cliente gradado con arreglo en tabla solicitudes
  27.             $datos = $this->saldo_user['non'] . '|' . $this->banco['nombre'] . '|' . $this->banco['cuenta'] . '|' . $this->banco['cedula'] . '|' . $this->banco['tipo'];
  28.  
  29.             //definimos la hora y fecha
  30.             $fecha = date('Y-m-d H:m:s');
  31.  
  32.             //Guardamos valores en tabla transicional
  33.             try {
  34.                 $this->con->autocommit(false);
  35.  
  36.                 //guarda la solicitud al cajero
  37.                 $solicitud = $this->con->prepare("INSERT INTO cajeros_solicitud(id_cajero,id_user,transaccion,monto,datos,proceso,fecha) VALUES (AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( '1' ,'$this->code'), AES_ENCRYPT( ? ,'$this->code'),AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( '0' ,'$this->code'),? )");
  38.                 $solicitud->bind_param("iisss", $cajero, $id_cliente, $monto, $datos, $fecha);
  39.                 $solicitud->execute();
  40.  
  41.                 //actualiza el saldo disponible del cajero
  42.                 $saldo_update = $this->con->prepare("UPDATE user_segure SET token=AES_ENCRYPT( ? ,'$this->code') WHERE AES_DECRYPT(id_user,'$this->code') = ?");
  43.                 $saldo_update->bind_param("is", $disponible, $id_cliente);
  44.                 $saldo_update->execute();
  45.  
  46.                 //guarda registro del movimiento solicirud de retiro
  47.                 $movimientos = $this->Movimientos_insert('0', $movi, $id_cliente);
  48.                 echo "correcto";
  49.                 $this->con->commit();
  50.             } catch (Exception $e) {
  51.                 echo ERROR_DIE;
  52.                 $this->con->rollBack();
  53.             }
  54.  
  55.             //else muestra mensaje si el monto a retirar es mayor al saldo disponible
  56.         } else {
  57.             echo DIV_OPEN_WAR . '' . STRONG_ATENCION . ' Monto A Retirar: ' . number_format($monto) . ' ' . MONEDA . ' Supera Su Saldo Disponible: ' . number_format($saldo) . ' ' . MONEDA . '' . DIV_CLOSE2;
  58.         }
  59.  
  60.     }