API

Leaf Life te lo pone fácil, con nuestra API podrás actualizar tu catálogo, consultar el stock, los precios, hacer pedidos nuevos y ver los que ya has realizado de una forma muy sencilla apuntando a un solo endpoint. Para evitar enviarte datos que no necesitas, serás tú quien los pedirá con una consulta.

 

Autenticación

Para poder acceder a la API, necesitas el "client id" y "client secret" que encontraras en tu perfil de usuario, a continuación, añade las cabeceras "Content-Type: application/json", "Accept: application/json" y solicita el token enviando la consulta, el envío de esta petición y todas las demás será por método POST, un ejemplo con curl:

curl \
	-X POST https://api.leaflife.com \
	-H 'Content-Type: application/json' \
	-H 'Accept: application/json' \
	-d '{ "query": "mutation{login(clientId: \"8c4f09821d631b07fbdab7f7ff2f58cdba928a2a\", clientSecret: \"4d09b8992996fd6c8aae4d4f09d2343bf8beec43\") {token}}" }'

Obtendrás una respuesta en JSON con el token, añádelo a las cabeceras (Authorization: Bearer TOKEN) y tendrás acceso a la API, para renovar el token, utiliza la función "updateToken". Por ejemplo, para recuperar la referencia de producto y el PVP con IVA lo haremos de esta forma:

Utiliza "productsPagination" para navegar por las páginas.

 

Endpoints

  • Producción: https://api.leaflife.com
  • Desarrollo: https://api.leaflife.com/test

Solo se aceptarán conexiones por HTTPS. La petición de crear un nuevo pedido en el entorno de desarrollo devolverá una respuesta, pero los datos no se guardarán en la base de datos.

 

Ejemplos

Como hemos visto anteriormente, para obtener las referencias de los productos con PVP IVA incluido lo haremos de esta forma:

curl \
	-X POST https://api.leaflife.com \
	-H 'Content-Type: application/json' \
	-H 'Accept: application/json' \
	-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NDYyOTcyMDAsImV4cCI6MTU0NjMwMDgwMCwiZGF0YSI6eyJjbGllbnRfaWQiOiI4YzRmMDk4MjFkNjMxYjA3ZmJkYWI3ZjdmZjJmNThjZGJhOTI4YTJhIn19.tb-AIbDMp3479gD7kvJHU3ODbSPFMat69mTbsdk3Vio' \
	-d '{ "query": "{products{code msrpIncVat} productsPagination{cursorBefore cursorAfter hasPreviousPage hasNextPage}}" }'

Para enviar un pedido, lo haremos de esta forma

curl \
	-X POST https://api.leaflife.com \
	-H 'Content-Type: application/json' \
	-H 'Accept: application/json' \
	-H 'Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjE1NDYyOTcyMDAsImV4cCI6MTU0NjMwMDgwMCwiZGF0YSI6eyJjbGllbnRfaWQiOiI4YzRmMDk4MjFkNjMxYjA3ZmJkYWI3ZjdmZjJmNThjZGJhOTI4YTJhIn19.tb-AIbDMp3479gD7kvJHU3ODbSPFMat69mTbsdk3Vio' \
	-d @- <<EOF
	{ "query": "mutation{
		createOrder(
			order: {
				products: [
					{
					code: \"AACC.009\",
					amount: 2
					},
					{
					code: \"AACC.010\",
					amount: 3
					}
				],
				payment: \"Transferencia bancaria\",
				shipping: \"Enviar el pedido\",
				send: {
					firstname: \"Jose Luis\",
					lastname: \"Garcia\",
					address: \"Calle General, 1\",
					city: \"Madrid\",
					state: \"Madrid\",
					country: \"España\",
					zipcode: \"28001\",
					phone: \"910010101\"
				}
			}
		)
		{order message}
	}" }
	EOF

Un ejemplo en PHP para consultar el stock de productos con y sin variantes

// mi configuración
$url = 'https://api.leaflife.com/test';
$clientId = "8c4f09821d631b07fbdab7f7ff2f58cdba928a2a";
$clientSecret = "4d09b8992996fd6c8aae4d4f09d2343bf8beec43";

// se consulta login
$token = login($url, $clientId, $clientSecret);

// consulta de todos los productos
$arrProducts = array();
$cursor = "page1";
$page = 0;
$arrAllProducts = products($url, $token, $cursor, $arrProducts, $page);

// el array arrAllProducts se recorre para obtener los datos de todos los productos
// para obtener cualquier campo hacer la consulta print_r($arrAllProducts) 
// y construir los respectivos bucles para obtener los datos deseados

// bucle por página
foreach($arrAllProducts as $page => $vpage){
	
	// bucle para recorrer los 100 productos de cada página 	
	foreach($arrAllProducts[$page] as $product => $vproduct){
		
		// code
		echo "code: " . $arrAllProducts[$page][$product]['code'] . "\n";

		// stock de productos sin variantes
		if(empty($arrAllProducts[$page][$product]['productVariants'])){
			
			// stockMadrid
			echo "stockMadrid: " . $arrAllProducts[$page][$product]['stockMadrid'] . "\n";
			
			// stockBarcelona
			echo "stockBarcelona: " . $arrAllProducts[$page][$product]['stockBarcelona'] . "\n";
		}
		
		// los datos de productos con variantes
		if(!empty($arrAllProducts[$page][$product]['productVariants'])){
			
			foreach($arrAllProducts[$page][$product]['productVariants'] as $cvariant => $vvariant){
				
				// variantName
				echo "variantName: " . $vvariant['name'] . "\n";
				
				// stockMadrid
				echo "stockMadrid: " . $vvariant['stockMadrid'] . "\n";
				
				// stockBarcelona
				echo "stockBarcelona: " . $vvariant['stockBarcelona'] . "\n";
			}		
		}		
	}
}


// establece sesión
function login($url, $clientId, $clientSecret){
	$curl = curl_init($url);
	$curlPostData = '{ "query": "mutation{login(clientId: \"'.$clientId.'\", clientSecret: \"'.$clientSecret.'\") {token}}" }';
	curl_setopt($curl, CURLOPT_ENCODING, '');
	curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPostData);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($curl, CURLOPT_VERBOSE, true);
	curl_setopt($curl, CURLOPT_HTTPHEADER, 
		array(
			'content-type: application/json',
			'accept: application/json'
		)
	);
	$curlResponse = curl_exec($curl);
	if ($curlResponse === false) {
		$info = curl_getinfo($curl);
		curl_close($curl);
		die('Error durante la ejecución de curl. Más info: ' . var_export($info));
	}
	curl_close($curl);
	$jsonResponse = json_decode($curlResponse, true); 
	$token = "";
	if(isset($jsonResponse['data']['login'][0]['token'])){
		$token = $jsonResponse['data']['login'][0]['token'];	
	}
	return $token;
}

// devuelve un array con todos los productos de la web
function products($url, $token, $cursor, &$arrProducts, &$page){
	if(($cursor == "page1") || (!empty($cursor))){
		if($cursor == "page1"){
			$cursor = "";
		}
		
		$curl = curl_init($url);
		$curlPostData = '{"query": "{products(cursor : \"'.$cursor.'\"){code,stockMadrid,stockBarcelona,productVariants{name,stockMadrid,stockBarcelona}}productsPagination {cursorAfter}}" }';
		curl_setopt($curl, CURLOPT_ENCODING, '');
		curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPostData);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);		
		curl_setopt($curl, CURLOPT_VERBOSE, true);
		curl_setopt($curl, CURLOPT_HTTPHEADER, 
			array(
				'content-type: application/json',
				'accept: application/json',
				'Authorization: Bearer '.$token
			)
		);
		$curlResponse = curl_exec($curl);
		if ($curlResponse === false) {
			$info = curl_getinfo($curl);
			curl_close($curl);
			die('Error durante la ejecución de curl. Más info: ' . var_export($info));
		}
		$jsonResponse = "";
		$jsonResponse = json_decode($curlResponse, true); 
		$arrProducts[$page] = $jsonResponse['data']['products'];
		$page++;
		curl_close($curl);
	
		if(isset($jsonResponse['data']['productsPagination'][0]['cursorAfter'])){
			$cursor = $jsonResponse['data']['productsPagination'][0]['cursorAfter'];
			products($url, $token, $cursor, $arrProducts, $page);
		}	
	}
	return $arrProducts;
}

 

Funciones

Para ver la documentación completa y todas las opciones que te ofrece la API, recomendamos el uso de un cliente GraphQL, como por ejemplo GraphiQL

 

Límites de llamadas

1000 peticiones máximo por cliente en los últimos 60 minutos. Si se supera este límite, no se aceptarán nuevas peticiones hasta pasado los 60 minutos

 

Mas información

Para obtener mas información, visita la página de GraphQL

¡Usamos Cookies!
Este sitio web utiliza Cookies propias para recopilar información con la finalidad de mejorar nuestros servicios y así como el análisis de sus hábitos de navegación. Política de cookies
Aceptar todo
Configurar cookies