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();
}
}
}
0 comentarios:
Publicar un comentario