Obteniendo la información de producto para un contenido y en general.
soporte, ws.webtv, api, tienda, producto
Variables GET específicas para esta solicitud:
Var | Valor | Descripción |
go | store | La sección del API |
do | get_product | La acción del API |
iq | ID Usuario | El ID del Usuario |
URL Resultante:
La URL de solicitud resultante sería similar a la siguiente (no se olvide de añadir la información requerida key, timestamp, salt and signature):
https://....../api.php?go=store&do=get_product&iq={id_usuario}&{información requerida}
La siguientes variables POST son requiridas.
Var | Valor | Descripción |
type | (string) Tipo de Producto | Posibles valores: "clip", "channel", "other". Casos especiales pensados para obtener solamente productos relacionados: "site", "service", "donation". |
cpID | (int) ID de Contenido o Producto | ID del contenido o producto: - Si "type" es "clip" o "channel": Suministre el ID del Clip o Canal. - Si "type" es "other": Suministre el ID de producto. - Si "type" es de un tipo especial: Suministre -1. |
La siguiente variable POST es opcional.
Var | Valor | Descripción |
get_related | (int) 0|1 | Si desea obtener los productos relacionados. Valores posibles: 1 (Sí, por defecto), 0 (No) |
Si la solicitud es exitosa, recibirá una respuesta conteniendo:
• overview: Un arreglo con la información de resumen. La información de resumen es la que Ud. normalmente mostrará al Usuario cuando visite la página de un producto luego, en la parte inferior (o en cualquier otro lugar que considere), debe mostrar la lista de productos asociados (que serán los que se podrán añadir al carrito). Tenga presente que para los tipos especiales el resumen (overview) estará vacío y sólo se devolverán productos relacionados.
La información de resumen incluirá:
- title: (string) El título principal del contenido o producto.
- description: (string) La descripción principal del contenido o producto.
- description_seo: (string) Una versión sólo-texto de la descripción.
- tags: (string) Tags relacionados (en caso de haberlos).
- img_poster, img_social, img_thumbnail: (string) La imagen (en varios tamaños) del contenido o producto.
- max_price: (decimal) El precio máximo de los productos asociados (en caso de haber más de uno).
- max_price_formatted: (string) El valor anterior, con formato.
- min_price: (decimal) El precio mínimo de los productos asociados (en caso de haber más de uno).
- min_price_formatted: (string) El valor anterior, con formato
• associated_products: Un arreglo con la lista de productos asociados directamente con la solicitud (los Clips y Channels pueden tener más de un producto asociado).
• related_products: Un arreglo con la lista de productos relacionados.
La lista de productos asociados o relacionados incluirá la siguiente información:
- id: (int) El ID del producto. Este es el ID que utilizará para añadir el producto al carrito.
- id_clip: (int) En el caso de un producto asociado a un Clip, este será el ID del Clip (número > 0).
- id_channel: (int) En el caso de un producto asociado a un Canal, este será el ID del Canal (número > 0).
- id_type: (int) ID del tipo de producto.
- ctype: (int) Tipo de contenido del producto (-1:Otro, 0:Sitio, 1:Canal, 2:Clip, 3:Membresía).
- sku: (string) SKU del producto.
- price: (decimal) El precio unitario del producto.
- price_formatted: (string) El valor anterior, con formato.
- title: (string) El título del producto.
- description: (string) La descripción del producto.
- img_thumbnail, img_social, img_poster: (string) La imagen del producto, en varios tamaños.
- quantity_options: (string) Valores separados por coma. Algunos productos como los "créditos" o "donaciones" tienen varias opciones de cantidad y un precio unitario igual a 1.
Ejemplo:
{ "overview": { "description": "Add credit to your account and use it any time to purchase WebTV content access.<br> Purchasing with your credit balance is very fast and easy. If you have enough credit to purchase an item you will be able to use the Quick Purchase option that does not require going through the check out process. <br>NOTE: Credits can not be used to pay subscription renewals when recurring payments (automatic payments) are active for a subscription.", "description_seo": "Add credit to your account and use it any time to purchase WebTV content access. Purchasing with your credit balance is very fast and easy. If you have enough credit to purchase an item you will be able to use the Quick Purchase option that does not require going through the check out process. NOTE: Credits can not be used to pay subscription renewals when recurring payments (automatic payments) are active for a subscription.", "img_poster": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_poster.jpg", "img_social": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_social.jpg", "img_thumbnail": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_thumb.jpg", "max_price": 30, "max_price_formatted": "30.00\u20ac", "min_price": 5, "min_price_formatted": "5.00\u20ac", "tags": "", "title": "Credit Recharge" }, "associated_products": { "1": { "id": "1", "id_clip": null, "id_channel": null, "id_type": "1", "ctype": "0", "sku": "CREDIT", "price": "1.00", "title": "Credit Recharge", "description": "Add credit to your account and use it any time to purchase WebTV content access.<br> Purchasing with your credit balance is very fast and easy. If you have enough credit to purchase an item you will be able to use the Quick Purchase option that does not require going through the check out process. <br>NOTE: Credits can not be used to pay subscription renewals when recurring payments (automatic payments) are active for a subscription.", "img_thumbnail": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_thumb.jpg", "img_social": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_social.jpg", "img_poster": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_credit_poster.jpg", "quantity_options": "5,10,15,20,25,30", "price_formatted": "1.00\u20ac" } }, "related_products": { "2": { "id": "2", "id_clip": null, "id_channel": null, "id_type": "3", "ctype": "0", "sku": "SITEACCPER", "price": "9.99", "title": "WebTV Access Pass (during 1 day)", "description": "Full WebTV content access pass during 1 day", "img_thumbnail": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_site_pass_period_thumb.jpg", "img_social": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_site_pass_period_social.jpg", "img_poster": "http:\/\/www.mywebtvdomain.com\/public\/common\/images\/_default_store_product_site_pass_period_poster.jpg", "quantity_options": "1", "price_formatted": "9.99\u20ac" } } }
Posibles Mensajes de Error
Además de los errores generales, esta solicitud puede devolver los siguientes errores:
• REQUEST_ERROR | Invalid User ID:
El ID del Usuario no es numérico o es menor que 1.
• REQUEST_ERROR | Invalid product type:
No se especificó el tipo ("type") de producto o no es uno de los permitidos.
• REQUEST_ERROR | Invalid cotnent or product ID:
No se especificó el ID de contenido o producto ("cpID") o no es válido.
• ERROR_PRODUCT_NOT_FOUND | Product not found:
No se puedo encontrar el producto.
Preparando los datos GET y POST.
// Las variables GET $GET_VARS = array( "go" => "store", "do" => "get_product", "iq" => "2" ); // Las variables POST (varios casos...) // ...caso Clip con ID=68 $POST_VARS = array( "type" => "clip", "cpID" => 68, "get_related" => 1 ); // ...caso producto con ID=1 ("Crédito") $POST_VARS = array( "type" => "other", "cpID" => 1, "get_related" => 1 ); // ...caso especial para obtener los productos relacionados tipo "site" (Crédito, Pases de Acceso Global y Membresías) $POST_VARS = array( "type" => "site", "cpID" => -1, "get_related" => 1 ); // ...caso especial para obtener los productos relacionados tipo "service" (Servicios) $POST_VARS = array( "type" => "service", "cpID" => -1, "get_related" => 1 ); // ...caso especial para obtener los productos relacionados tipo "donation" (Donaciones) $POST_VARS = array( "type" => "service", "cpID" => -1, "get_related" => 1 );
Generando salt, timestamp, signature y enviando la solicitud
*** El siguiente bloque de código es común para todas las solicitudes firmadas ***
// Recopilando la información del API y URL Base $API_URL = "https://www.midominiowebtv.tv/api.php"; $API_KEY_ID = "1b323a1cb879fd4e66530fbad07a32ee"; $API_SHARED_SECRET = "MWIzMjNhMWNiODc5ZmQ0ZTY2NTMwZmJhZDA3YTMyZWViOTQ3MDJiOGM2ZTU2NjE3"; // Mantenga esto en un lugar seguro!!! // Generando salt y timestamp $salt = md5(mt_rand()); $timestamp = time(); // Generando la firma de validación // - Método por defecto: usando base64_encode(hash_hmac(...)) $signature = base64_encode(hash_hmac('sha256', $salt.$timestamp, $API_SHARED_SECRET, true)); // comentar esta línea si se utiliza el otro método // - Método simplificado - disponible desde v60: usando md5(). // Este método requiere que la variable $API_SIGNATURE_GENERATION_MODE = 1; en el archivo config/Config.inc.php.
// $signature = md5($salt."-".$timestamp."-".$API_SHARED_SECRET); // debe "des-comentar" esta línea si se utiliza el método simplificado // Añadiendo timestamp, salt, key y signature a las variables GET $GET_VARS["timestamp"] = $timestamp; // UTC timestamp $GET_VARS["salt"] = $salt; $GET_VARS["key"] = $API_KEY_ID ; // The API Key ID: This is public and is used by the API to identify the application; $GET_VARS["signature"] = $signature; // Creando la URL de la solicitud. Tenga presente que si no utiliza la función interna de PHP // para crear la solicitud HTTP entonces no se olvide de codificar los valores con URL Encode $REQUEST_URL = $API_URL."?".http_build_query($GET_VARS); // Lo anterior construirá una URL del como .../api.php?go=api_subject&do=api_action&etc... // Creando un recurso cURL con las opciones apropiadas $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $REQUEST_URL); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $POST_VARS); // If your PHP host does not have a valid SSL certificate, you will need to turn off SSL // Certificate Verification. This is dangerous (!), and should only be done temporarily // until a valid certificate has been installed curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // Turns off verification of the SSL certificate. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Turns off verification of the SSL certificate. // Enviando la solicitud al API $response = curl_exec($ch); // Procesando la respuesta if (!$response) { echo 'Llamada al API falló'; } else { print_r(json_decode($response,true)); }