Bienvenidos a un nuevo curso. Ahora estoy en el ciclo de grado superior: Desarrollo de aplicaciones multiplataforma. Y voy a ser parte del experimento de la formación dual. Estaré haciendo practicas durante un año, y a la vez finalizando la formación.

Deseadme suerte.

miércoles, 7 de septiembre de 2016

Aclaraciónes Curl - xml

0

Hay cosas que parecen tontas, pero si no lo sabes, no lo son. 
Así que quiero hacer un par de aclaraciones y enseñaron un par de trucos. 

¿Recordáis la historia? Quiero que los pedidos de licencias se hagan automáticamente, para ello debo identificar que productos son licencias y luego enviar un xml a la empresa con un post. 

//dentro del modulo, tengo un hook de escucha que se activa si se ha realizado un pedido
public function hookNewOrder($params)
{
//El numero de pedido
$id_order = (int)Tools::getValue('id_order');
//Con el numero de pedido puedo ver las referencias de los productos de dicho pedido (esta comprobación esta dentro de una clase)
$referencia = "SELECT p.reference
                   FROM product p, order_detail od
                   WHERE od.id_order=$id_order
                   AND p.id_product=od.product_id;";
//query realiza una consulta a la base de datos
        $ref Db::getInstance()->query($referencia);
//comprobamos las referencias una por una
while ($re = $ref->fetch())
{
//Compruebo que sea un producto de licencia. (esta comprobación esta dentro de una clase)
$licencia = "SELECT P.reference
                FROM product_lang PL, product P
                WHERE P.reference = '$reference'
                AND PL.name like '% manzana %'
                AND PL.id_product=P.id_product";
//getRow ejecuta una consulta y devuelve la primera fila
        $li Db::getInstance()->getRow($licencia);
//=== si son idénticos
if($re["reference"]===$li["reference"]
{
//necesitamos enviar un valor único a la transferencia, sin modificar la base de datos
//getdate obtiene información de la fecha/hora. Si sumas la fecha y hora, tendrás siempre un valor único.
$tiempo = getdate();
                    $t = $tiempo[year]  + $tiempo[mon]  + $tiempo[mday] + $tiempo[hours]  + $tiempo[minutes] + $tiempo[seconds];
//el post debería estar en un php aparte, para aclarar el texto. 
$service_url = 'http://example.com/api/conversations';
/* inicia sesión curl*/
// el distribuidor nos solicita un archivo xml, pero recuerda que no puedes enviar una variable en xml, y no es necesario un archivo.xml. Lo que necesitas hacer es generar el xml con php. Así que aunque lo lógico sea pensar en usar $input_xml, este genera un xml, así que no te leerá la variable. Por lo que se usa el $curl_post_data.
$curl_post_data = "      <Order>
                        <Version>2.5</Version>
                        <Transaction>
                            <TransactionID>$T</TransactionID>
                        </Transaction>
                        <OrderInformation>
                            ...
                        </OrderInformation>
                    </Order>";
// ya os comente la mayoría de las funciones usadas con curl(+)
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_URL, $service_url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, $curl_post_data);
$curl_response = curl_exec($curl);
if ($curl_response === false) {
    $info = curl_error($curl);
    curl_close($curl);
    $resultado= 'error occured during curl exec. Additioanl info: ' . var_export($info);
//print_r te sacara por pantalla el resultado 
    print_r($resultado);
//exit terminara el programa, es importante salir o continuara el programa convirtiendo el resultado en ok y llevando a error. 
    exit();
}
curl_close($curl);
//json_decode — Decodifica un string de JSON(+)
$decoded = json_decode($curl_response);
//var_dump muestra información estructurada sobre una o más expresiones incluyendo su tipo y valor. (+)
var_dump($curl_response);
/* fin sesión curl*/
if (isset($decoded->response->status) && $decoded->response->status == 'ERROR') {
    $resultado= 'error occured: ' . $decoded->response->errormessage;
    print_r($resultado);
    exit();
}
$resultado= 'response ok!';
var_export($decoded->response);
print_r($resultado);
exit();                    
}
}
}

Related Posts:

  • practica 4Puedes  acceder  a la base de datos y  a los ejercicios aquí y aquí. Estos ejercicios ya se hicieron en la primera eval… Read More
  • practica 5Puedes acceder a la teoría necesaria para hacer los ejercicios  y  a los ejercicios aquí y aquí. Utiliza la base de datos de… Read More
  • practica 2 (2)26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. … Read More
  • practica 10Puedes acceder a la teoría necesaria para hacer los ejercicios  y  a los ejercicios aquí y aquí. 1. 2. 3. … Read More
  • practica 3Puedes acceder  a la teoría necesaria para hacer los ejercicios, a la  base de datos necesaria y por último a los ejercicios aquí, … Read More

0 comentarios:

Publicar un comentario

Etiquetas actuales

BD (67) DEF (64) PROG (64) SQL (44) Java (29) PRACTICAS (20) php (18) DI (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) HTML (13) SGE (12) ERP (9) CONSULTAS (8) css (8) Linux (5) XML (5) Android (4) PDM (4) C (3) NetBeans (3) PSP (3) SMARTY (3) comandos (3) HOOK (2) POST (2) XSD (2) cURL (2) JS (1) MEDIA-QUERYS (1) PDO (1) RESPONSIVE (1) TPL (1) TRADUCCIÓN (1) app_inventor (1)

Todas las etiquetas

EJER (78) BD (67) DEF (64) PROG (64) SQL (44) c# (40) Programación (39) Ficheros (36) Java (29) bases de datos (21) PRACTICAS (20) lenguajes de marcas (19) AD (18) Entorno de desarrollo (18) php (18) PROCEDIMIENTOS (17) DI (16) FORM (16) PRESTASHOP (16) PROGRAMACIÓN WEB (16) lenguaje C (16) E/R (14) HTML (13) SGE (12) Sistemas informáticos (10) ERP (9) CONSULTAS (8) TRANSACCIONES (8) TRIGGER (8) VISUAL BASIC (8) css (8) FUNCIONES (7) html5 (6) Ada (5) EXAMEN (5) Linux (5) XML (5) estructuras (5) Android (4) DISEÑO (4) INTERFAZ (4) LOG (4) OpenBravo (4) PDM (4) ACTUALIZAR (3) C (3) DIAGRAMA (3) Directorios (3) NEW (3) NOR (3) NetBeans (3) OLD (3) PSP (3) SMARTY (3) comandos (3) css3 (3) AISLAMIENTOS (2) C++ (2) CONTROLERRORES (2) ELIMINAR (2) HOOK (2) INSERTAR (2) INST (2) MULTITABLA (2) POST (2) RECURSIVIDAD (2) SUBCONSULTAS (2) VISTAS (2) XSD (2) cURL (2) punteros (2) AJENA (1) BLOQUEOS (1) Byte (1) CREACION (1) CRM (1) Configuración (1) Controles (1) Datos (1) GOTFOCUS (1) IMAGENES (1) INDICES (1) JS (1) Lenght (1) MEDIA-QUERYS (1) Mingw (1) MonoDeveloped (1) OPTIMISTA (1) PDO (1) PESIMISTA (1) RESPONSIVE (1) SPEAK (1) Scanner (1) Serializacion (1) Streams (1) System (1) TPL (1) TRADUCCIÓN (1) USUARIOS (1) UseSystemPasswordChar (1) app_inventor (1) char (1) examenes (1) libreoffice (1) make (1) redes (1)