Ejemplo de uso de API

From SinergiaCRM - Wikisuite
Jump to navigation Jump to search
$appName = 'API Entradas disponibles en evento';

$url = "https://<entidad>.sinergiacrm.org/service/v4_1/rest.php";

// Credenciales de un usuario del CRM con acceso a los módulos Eventos e Inscripciones
// @@username@@: usuario
// @@password@@: password
$userAuth = array(
    'user_name' => '@@username@@',
    'password' => md5('@@password@@'),
);

// ID del registro de Eventos del cual se quieren obtener datos
$eventoID = 'a28f8e07-b862-3988-0d5e-5ca773f07e61'; // valor de ejemplo

// Campos necesarios del módulo Eventos
$eventoCampos = array(
    'name',
    'max_attendees',
);

// Campos necesarios del módulo Inscripciones
$inscripcionesCampos = array(
    'name',
    'participation_type',
    'attendees',
    'status',
);

$totalEntradas = 0;

// Proceso de autenticación
$args = array(
    'user_auth' => $userAuth,
    'application_name' => $appName,
    'name_value_list' => array()
);
$result = restRequest('login', $args);
$sesionCRMId = $result['id'];
// Fin del proceso de autenticación

// Proceso de obtención de datos
$entryArgs = array(
    'session' => $sesionCRMId,
    'module_name' => 'stic_Events',
    'id' => $eventoID,
    'select_fields' => $eventoCampos,
    'link_name_to_fields_array' => array(
        array(
            'name' => 'stic_registrations_stic_events',
            'value' => $inscripcionesCampos,
        ),
    ),
);
$result = restRequest('get_entry',$entryArgs);
// Fin del proceso de obtención de datos

// Formateo de los datos
$eventoDetalles = array();
$eventoDatos = $result['entry_list'][0]['name_value_list'];
foreach($eventoDatos as $datos) { 
    $eventoDetalles[$datos['name']] = $datos['value'];
}

$inscripcionesDetalles = array();
$inscripcionesListaDatos = $result['relationship_list'][0][0]['records'];
foreach($inscripcionesListaDatos as $key => $listaDatos) {
    foreach ($listaDatos as $datos) {
        $inscripcionesDetalles[$key][$datos['name']] = $datos['value'];
    }
}
// Fin del formateo de los datos

// Cálculo de entradas disponibles
foreach($inscripcionesDetalles as $inscripcionDatos) {
    if ($inscripcionDatos['status'] == 'confirmed' && $inscripcionDatos['participation_type'] == 'attendant')
    $entradasVendidas += $inscripcionDatos['attendees'];
}
$aforoEvento = $eventoDetalles['max_attendees'];
$entradasDisponibles = $aforoEvento - $entradasVendidas;

echo '<pre>';
print_r('Aforo: '. $aforoEvento);
echo '<br>';
print_r('Entradas vendidas: '. $entradasVendidas);
echo '<br>';
print_r('Entradas disponibles: '. $entradasDisponibles);
echo '</pre>';
// Fin del cálculo de entradas disponibles

// Para mostrar en pantalla los datos obtenidos
echo '<pre>';
print_r($eventoDetalles);
echo '</pre>';

echo '<pre>';
print_r($inscripcionesDetalles);
echo '</pre>';
// Fin mostrar datos en pantalla

function restRequest($method, $arguments){
    global $url;
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $post = array(
        "method" => $method,
        "input_type" => "JSON",
        "response_type" => "JSON",
        "rest_data" => json_encode($arguments),
    );
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
    $result = curl_exec($curl);
    curl_close($curl);
    return json_decode($result,1);
}