<?php
      /*En esta página se reciben las variables enviadas desde ePayco hacia el servidor.
      Antes de realizar cualquier movimiento en base de datos se deben comprobar algunos valores
      Es muy importante comprobar la firma enviada desde ePayco
      Ingresar  el valor de p_cust_id_cliente lo encuentras en la configuración de tu cuenta ePayco
      Ingresar  el valor de p_key lo encuentras en la configuración de tu cuenta ePayco
      */


      $p_cust_id_cliente='83709';
      $p_key='75b30fc96218d7df7bbc08a2847f9f75ff98df89';

      $x_ref_payco=$_REQUEST['x_ref_payco'];
      $x_transaction_id=$_REQUEST['x_transaction_id'];
      $x_amount=$_REQUEST['x_amount'];
      $x_currency_code=$_REQUEST['x_currency_code'];
      $x_signature=$_REQUEST['x_signature'];

      $x_fecha=$_REQUEST['x_transaction_date'];
      $x_banco=$_REQUEST['x_bank_name'];
      $x_numeroDocumento=$_REQUEST['x_customer_document'];
      $x_extra1=$_REQUEST['x_extra1'];
      $x_Token=$_REQUEST['x_extra2'];
      $x_CodigoAprobacion=$_REQUEST['x_approval_code'];
      $x_CodigoRespuesta=$_REQUEST['x_cod_respuesta'];
      $x_Respuesta=$_REQUEST['x_response'];
      $x_CodigoEstadoTransaccion=$_REQUEST['x_cod_transaction_state'];
      $x_CodigoMoneda=$_REQUEST['x_currency_code'];
      $x_Email=$_REQUEST['x_customer_email'];
      $x_DescripcionRespuesta=$_REQUEST['x_response_reason_text'];

      $x_CodigoErrorTransaccion=$_REQUEST['x_errorcode'];
      $x_EstadoTransaccion=$_REQUEST['x_transaction_state'];
      $x_TipoDocumentoTarjeta=$_REQUEST['x_customer_doctype'];
      $x_NombreTarjeta=$_REQUEST['x_customer_name'];

      $x_Descripcion=$_REQUEST['x_description'];
      $x_NumeroTransaccion=$_REQUEST['x_transaction_id'];
      $x_NumeroReferencia=$_REQUEST['x_ref_payco'];



      $signature=hash('sha256',
             $p_cust_id_cliente.'^'
            .$p_key.'^'
            .$x_ref_payco.'^'
            .$x_transaction_id.'^'
            .$x_amount.'^'
            .$x_currency_code
          );


      $x_response=$_REQUEST['x_response'];
      $x_motivo=$_REQUEST['x_response_reason_text'];
      $x_id_invoice=$_REQUEST['x_id_invoice'];
      $x_autorizacion=$_REQUEST['x_approval_code'];

      $contenido = 'Cedula: '.$x_numeroDocumento.', Referencia: '.$x_ref_payco.', Fecha: '.$x_fecha.', Respuesta: '.$x_response.', Motivo: '.$x_motivo.', Banco: '.$x_banco.
      ', Monto: '.$x_amount.' '.$x_currency_code.', Factura: '.$x_id_invoice;

      //Validamos la firma
      if($x_signature==$signature){
      /*Si la firma esta bien podemos verificar los estado de la transacción*/
      $x_cod_response=$_REQUEST['x_cod_response'];
      switch ((int)$x_cod_response) {
          case 1:


            $persona = [
		"Nombre" => $x_NombreTarjeta,
                "Descripcion" => $x_Descripcion,
                "NumeroTransaccion" => $x_NumeroTransaccion,
                "NumeroReferencia" => $x_NumeroReferencia,
		"CodigoErrorTransaccion" => $x_CodigoErrorTransaccion,
		"EstadoTransaccion" => $x_EstadoTransaccion,
		"TipoDocumentoTarjeta" => $x_TipoDocumentoTarjeta,
		"NombreTarjeta" => $x_NombreTarjeta,
		"CodigoMoneda" => $x_CodigoMoneda,
		"Email" => $x_Email,
		"DescripcionRespuesta" =>  $x_DescripcionRespuesta,
		"CodigoRespuesta" => $x_CodigoRespuesta,
		"Respuesta" => $x_Respuesta,
		"CodigoEstadoTransaccion" => $x_CodigoEstadoTransaccion,
		"CodigoAprobacion" => $x_CodigoAprobacion,
		"FechaTransaccion" => $x_fecha,
		"Banco" => $x_banco,
		"TokenTransaccion" => $x_Token,
		"NumeroDocumento" => $x_numeroDocumento,
                "Monto" => $x_amount,
                "IdUsuario" => $x_extra1,
              ];

              //API URL
              $url = 'https://inselect.insepet.com:4455/api/PostUpdateCustomerBalance';
              $datosCodificados = json_encode($persona);

              //print $datosCodificados;
              $ch = curl_init($url);

              curl_setopt_array($ch, array(
                // Indicar que vamos a hacer una petición POST
                CURLOPT_CUSTOMREQUEST => "POST",
                // Justo aquí ponemos los datos dentro del cuerpo
                CURLOPT_POSTFIELDS => $datosCodificados,
                // Encabezados
                //CURLOPT_HEADER => true,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($datosCodificados), // Abajo podríamos agregar más encabezados
                    'Personalizado: ¡Saldo!', # Un encabezado personalizado
                ),
                # indicar que regrese los datos, no que los imprima directamente
                CURLOPT_RETURNTRANSFER => true,
              ));
              # Hora de hacer la petición
              $resultado = curl_exec($ch);
              # Vemos si el código es 200, es decir, HTTP_OK
              $codigoRespuesta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
              if($codigoRespuesta === 200){
                # Decodificar JSON porque esa es la respuesta
                $respuestaDecodificada = json_decode($resultado);

              }else{
                # Error
                echo "Error consultando. Código de respuesta: $codigoRespuesta";
              }
              curl_close($ch);


              # code transacción aceptada
              //echo "transacción aceptada";
              break;
          case 2:



            $persona = [
		"Nombre" => $x_NombreTarjeta,
                "Descripcion" => $x_Descripcion,
                "NumeroTransaccion" => $x_NumeroTransaccion,
                "NumeroReferencia" => $x_NumeroReferencia,
		"CodigoErrorTransaccion" => $x_CodigoErrorTransaccion,
		"EstadoTransaccion" => $x_EstadoTransaccion,
		"TipoDocumentoTarjeta" => $x_TipoDocumentoTarjeta,
		"NombreTarjeta" => $x_NombreTarjeta,
		"CodigoMoneda" => $x_CodigoMoneda,
		"Email" => $x_Email,
		"DescripcionRespuesta" =>  $x_DescripcionRespuesta,
		"CodigoRespuesta" => $x_CodigoRespuesta,
		"Respuesta" => $x_Respuesta,
		"CodigoEstadoTransaccion" => $x_CodigoEstadoTransaccion,
		"CodigoAprobacion" => $x_CodigoAprobacion,
		"FechaTransaccion" => $x_fecha,
		"Banco" => $x_banco,
		"TokenTransaccion" => $x_Token,
		"NumeroDocumento" => $x_numeroDocumento,
                "Monto" => $x_amount,
                "IdUsuario" => $x_extra1,
              ];

              //API URL
              $url = 'https://inselect.insepet.com:4455/api/PostUpdateCustomerBalance';
              $datosCodificados = json_encode($persona);

              //print $datosCodificados;
              $ch = curl_init($url);

              curl_setopt_array($ch, array(
                // Indicar que vamos a hacer una petición POST
                CURLOPT_CUSTOMREQUEST => "POST",
                // Justo aquí ponemos los datos dentro del cuerpo
                CURLOPT_POSTFIELDS => $datosCodificados,
                // Encabezados
                //CURLOPT_HEADER => true,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($datosCodificados), // Abajo podríamos agregar más encabezados
                    'Personalizado: ¡Saldo!', # Un encabezado personalizado
                ),
                # indicar que regrese los datos, no que los imprima directamente
                CURLOPT_RETURNTRANSFER => true,
              ));
              # Hora de hacer la petición
              $resultado = curl_exec($ch);
              # Vemos si el código es 200, es decir, HTTP_OK
              $codigoRespuesta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
              if($codigoRespuesta === 200){
                # Decodificar JSON porque esa es la respuesta
                $respuestaDecodificada = json_decode($resultado);

              }else{
                # Error
                echo "Error consultando. Código de respuesta: $codigoRespuesta";
              }
              curl_close($ch);


              break;
          case 3:


            $persona = [
		"Nombre" => $x_NombreTarjeta,
                "Descripcion" => $x_Descripcion,
                "NumeroTransaccion" => $x_NumeroTransaccion,
                "NumeroReferencia" => $x_NumeroReferencia,
		"CodigoErrorTransaccion" => $x_CodigoErrorTransaccion,
		"EstadoTransaccion" => $x_EstadoTransaccion,
		"TipoDocumentoTarjeta" => $x_TipoDocumentoTarjeta,
		"NombreTarjeta" => $x_NombreTarjeta,
		"CodigoMoneda" => $x_CodigoMoneda,
		"Email" => $x_Email,
		"DescripcionRespuesta" =>  $x_DescripcionRespuesta,
		"CodigoRespuesta" => $x_CodigoRespuesta,
		"Respuesta" => $x_Respuesta,
		"CodigoEstadoTransaccion" => $x_CodigoEstadoTransaccion,
		"CodigoAprobacion" => $x_CodigoAprobacion,
		"FechaTransaccion" => $x_fecha,
		"Banco" => $x_banco,
		"TokenTransaccion" => $x_Token,
		"NumeroDocumento" => $x_numeroDocumento,
                "Monto" => $x_amount,
                "IdUsuario" => $x_extra1,
              ];

              //API URL
              $url = 'https://inselect.insepet.com:4455/api/PostUpdateCustomerBalance';
              $datosCodificados = json_encode($persona);

              //print $datosCodificados;
              $ch = curl_init($url);

              curl_setopt_array($ch, array(
                // Indicar que vamos a hacer una petición POST
                CURLOPT_CUSTOMREQUEST => "POST",
                // Justo aquí ponemos los datos dentro del cuerpo
                CURLOPT_POSTFIELDS => $datosCodificados,
                // Encabezados
                //CURLOPT_HEADER => true,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($datosCodificados), // Abajo podríamos agregar más encabezados
                    'Personalizado: ¡Saldo!', # Un encabezado personalizado
                ),
                # indicar que regrese los datos, no que los imprima directamente
                CURLOPT_RETURNTRANSFER => true,
              ));
              # Hora de hacer la petición
              $resultado = curl_exec($ch);
              # Vemos si el código es 200, es decir, HTTP_OK
              $codigoRespuesta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
              if($codigoRespuesta === 200){
                # Decodificar JSON porque esa es la respuesta
                $respuestaDecodificada = json_decode($resultado);

              }else{
                # Error
                echo "Error consultando. Código de respuesta: $codigoRespuesta";
              }
              curl_close($ch);

              # code transacción pendiente

              break;
          case 4:



            $persona = [
		"Nombre" => $x_NombreTarjeta,
                "Descripcion" => $x_Descripcion,
                "NumeroTransaccion" => $x_NumeroTransaccion,
                "NumeroReferencia" => $x_NumeroReferencia,
		"CodigoErrorTransaccion" => $x_CodigoErrorTransaccion,
		"EstadoTransaccion" => $x_EstadoTransaccion,
		"TipoDocumentoTarjeta" => $x_TipoDocumentoTarjeta,
		"NombreTarjeta" => $x_NombreTarjeta,
		"CodigoMoneda" => $x_CodigoMoneda,
		"Email" => $x_Email,
		"DescripcionRespuesta" =>  $x_DescripcionRespuesta,
		"CodigoRespuesta" => $x_CodigoRespuesta,
		"Respuesta" => $x_Respuesta,
		"CodigoEstadoTransaccion" => $x_CodigoEstadoTransaccion,
		"CodigoAprobacion" => $x_CodigoAprobacion,
		"FechaTransaccion" => $x_fecha,
		"Banco" => $x_banco,
		"TokenTransaccion" => $x_Token,
		"NumeroDocumento" => $x_numeroDocumento,
                "Monto" => $x_amount,
                "IdUsuario" => $x_extra1,
              ];

              //API URL
              $url = 'https://inselect.insepet.com:4455/api/PostUpdateCustomerBalance';
              $datosCodificados = json_encode($persona);

              //print $datosCodificados;
              $ch = curl_init($url);

              curl_setopt_array($ch, array(
                // Indicar que vamos a hacer una petición POST
                CURLOPT_CUSTOMREQUEST => "POST",
                // Justo aquí ponemos los datos dentro del cuerpo
                CURLOPT_POSTFIELDS => $datosCodificados,
                // Encabezados
                //CURLOPT_HEADER => true,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($datosCodificados), // Abajo podríamos agregar más encabezados
                    'Personalizado: ¡Saldo!', # Un encabezado personalizado
                ),
                # indicar que regrese los datos, no que los imprima directamente
                CURLOPT_RETURNTRANSFER => true,
              ));
              # Hora de hacer la petición
              $resultado = curl_exec($ch);
              # Vemos si el código es 200, es decir, HTTP_OK
              $codigoRespuesta = curl_getinfo($ch, CURLINFO_HTTP_CODE);
              if($codigoRespuesta === 200){
                # Decodificar JSON porque esa es la respuesta
                $respuestaDecodificada = json_decode($resultado);

              }else{
                # Error
                echo "Error consultando. Código de respuesta: $codigoRespuesta";
              }
              curl_close($ch);

              break;

      }

      }else{
          die("Firma no valida");
      }
?>
