2016-02-16 4 views
-1

У меня есть веб-камеры, которые я использую в магазине для Shopify, но только это использует информацию для загрузки на мой сервер.двойной запрос только один один

Когда владелец магазина нажимает на элемент fullfil, который отправляется на мой сайт, но в некоторых случаях заказ отображается два раза только одним щелчком мыши, я использую php и curl.

это мой PHP-файл

<?php 
//start a session 
session_start(); 

//Webhook enviado por shopify 
$webhookContent=  ""; 
$webhook=    fopen('php://input' , 'rb'); 
while (!feof($webhook)) { 
    $webhookContent .= fread($webhook, 4096); 
} 
fclose($webhook); 
$data=  json_decode($webhookContent,true); 

//guardar datos ordenes 
$file = 'shipping_innata.txt'; 
$print = print_r($webhookContent, true); 
file_put_contents($file, $print, FILE_APPEND | LOCK_EX); 


//obtener desde headers el dominio de shopify 
$domain_header= $_SERVER['HTTP_X_SHOPIFY_SHOP_DOMAIN']; 
//consulta en base 99min 
$db = mysqli_connect("localhost", "root", "plas711", "minut_api"); 

//comprobar carrier 
$shipping=  $data ['shipping_lines']['0']['code']; 
$express=  '99minutos.com en menos de 99 minutos (L-V de 9 a 16 hrs) SOLO DF'; 
$program=  '99minutos.com Programado mismo día (L-V de 9 a 16 hrs) SOLO DF'; 

//variables obtenidas desde json 
$first_name= $data['shipping_address']['first_name']; 
$last_name=  $data['shipping_address']['last_name']; 
$email=   $data['email']; 
$phone=   $data['shipping_address']['phone']; 
$address1=  $data['shipping_address']['address1']; 
$address2=  $data['shipping_address']['address2']; 
$province=  $data['shipping_address']['province']; 
$zip=   $data['shipping_address']['zip']; 
$city=   $data['shipping_address']['city']; 
$latitude=  $data['shipping_address']['latitude']; 
$longitude=  $data['shipping_address']['longitude']; 
$note=   $data['note']; 
$name=   'Orden: '.$data['name']; 
$pago=   $data['gateway']; 

if($pago =="Pago contra entrega (SOLO DF Y AREA METROPOLITANA)"){ 
    $total_price= $data['total_price']; 
} 
else{ 
    $total_price=0; 
} 
//busqueda del correo del propietario de la tienda en base de datos 
$mail_db=  "SELECT * FROM tbl_usersettings WHERE store_name = '$domain_header'"; 
$mail_result= mysqli_query($db, $mail_db); 
$mail_q=  mysqli_fetch_array($mail_result, MYSQLI_ASSOC); 
$mail_str=  $mail_q['email']; 

//////////////////////////////////////////////////// 
//url encode para producto en bodegas 
function request() 
{ 
    global $total_price,$pago,$latitude, $longitude, $address1, $address2, $city, $province, $zip, $email, $phone, $first_name, $last_name, $productos, $name, $db, $shipping, $express, $program; 

    // variables 
    $api_key=         '23894thfpoiq10fapo93fmapo'; 
    $user_id=         '4290583552'; 
    if ($shipping == $express){ 
     $delivery_type = '99minutos'; 
    } 
    else if($shipping == $program){ 
    $delivery_type = 'Programado'; 
    } 
    $latlng=         '19.346857%2C-99.2985648'; 
    $destination_route=       urlencode(implode(' ', array($address1,$address2))); 
    $destination_locality=      urlencode($city); 
    $destination_administrative_area_level=  urlencode($province); 
    $destination_postal_code=     urlencode($zip); 
    $d_latlng=         urlencode(implode(',', array($latitude,$longitude))); 
    $customer_phone=       urlencode($phone); 
    $nombre =         'Cliente: '.implode(' ',array($first_name,$last_name)); 


    //Variable que pasa al sistema de 99minutos los datos en la seccion de notas 
    //$notes=urlencode(implode(', ', array($name,$nombre))); 

    //url que sirve para hacer la peticion de envion al sistema de 99minutos 
    $request = "https://das-dot-line-76299minutos.appspot.com/2/delivery/request?"; 
    $request.= "api_key=".$api_key."&"; 
    $request.= "user_id=".$user_id."&"; 
    $request.= "delivery_type=".$delivery_type."&"; 
    $request.= "route=ARTEAGA+Y+SALAZAR&"; 
    $request.= "street_number=108&"; 
    $request.= "neighborhood=Contadero&"; 
    $request.= "locality=Mexico&"; 
    $request.= "administrative_area_level_1=Distrito+Federal&"; 
    $request.= "postal_code=05500&"; 
    $request.= "country=Mexico&latlng=".$latlng."&"; 
    $request.= "destination-route=".$destination_route."&"; 
    $request.= "destination-street_number=&"; 
    $request.= "destination-neighborhood=&"; 
    $request.= "destination-locality=".$destination_locality."&"; 
    $request.= "destination-administrative_area_level=".$destination_administrative_area_level."&"; 
    $request.= "destination-postal_code=".$destination_postal_code."&"; 
    $request.= "destination-country=Mexico&"; 
    $request.= "destination-latlng=".$d_latlng."&"; 
    $request.= "customer_email=".$email."&"; 
    $request.= "customer_phone=".$customer_phone."&"; 
    $request.= "notification_email=&"; 
    if($pago =="Pago contra entrega (SOLO DF Y AREA METROPOLITANA)"){ 
      $monto = "Cobro:".$total_price; 
      $notes = urlencode((implode(',', array($name,$nombre,$monto)))); 
      $request.= "notes=".$notes."&"; 
      $request.= "receivable_order=true&"; 
      $request.= "amount=".$total_price."&"; 
     } 
     else 
     { 
      $notes = urlencode((implode(',', array($name,$nombre)))); 
      $request.= "notes=".$notes."&"; 
     } 
    $request.= "dispatch=true"; 
    //funcion curl para enviar la peticion de envio al sistema de 99minutos 
    $archivo = 'respaldo_innata.txt'; 
    $texto = print_r($request, true); 
    file_put_contents($archivo, $texto, FILE_APPEND | LOCK_EX); 

    error_log("Request"); 
    error_log(print_r($request, true)); 

    $ch_request=curl_init(); 
    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL, $request); 
    curl_setopt($curl, CURLOPT_SSLVERSION, 3); 
    //curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
    curl_setopt($curl, CURLOPT_HEADER, FALSE); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 

    $response = curl_exec($curl); 
    curl_close ($curl); 

    error_log("Response"); 
    error_log(print_r($response, TRUE)); 
    die(); 
} 
/////////////////////////////////////////////////// 
function mailprogramado() 
{ 
     global $domain_header, $name, $first_name, $last_name, $email, $phone, $address1, $address2, $province, $zip, $latitude, $longitude, $productos, $pago; 
     $to = "[email protected]"; 
     $subject = "Envio Tienda Malabares"; 
     $mail_body = '<html>'; 
     $mail_body .='<body topmargin="25">'; 
     $mail_body .='<h2> Dirección de Envio</h2>'; 
     $mail_body .='<table width="500" border="1" cellspacing="10" cellpadding="10">'; 
     $mail_body .='<tr> <td width="100" align="center"> Tienda: </td> <td align="left"> '. $domain_header .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Orden: </td> <td align="left"> '. $name .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Nombre: </td> <td align="left"> '. $first_name .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Apellidos: </td> <td align="left"> '. $last_name .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Correo: </td> <td align="left"> '. $email .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Teléfono: </td> <td align="left"> '. $phone .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Dirección: </td> <td align="left"> '. $address1 .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Dirección: </td> <td align="left"> '. $address2 .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Estado: </td> <td align="left"> '. $province .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Codigo Postal: </td> <td align="left"> '. $zip .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Latitud: </td> <td align="left"> '. $latitude .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Longitud: </td> <td align="left"> '. $longitude .' </td> </tr>'; 
     $mail_body .='<tr> <td width="100" align="center"> Metodo de pago: </td> <td align="left"> '. $pago .' </td> </tr>'; 
     $mail_body .='</table>'; 
     $mail_body .='</body>'; 
     $mail_body .='</html>'; 
     $headers = "From:[email protected]\r\n"; 
     $headers .= "Content-type: text/html\r\n"; 
     mail($to, $subject, $mail_body, $headers); 
    } 
// error_log(print_r($data, true)); 

if($shipping == $express){ 
//Notificacion envio depar 
mailprogramado(); 
//realizar pedido de envio 
request(); 
//destruir sesion 
session_destroy(); 
exit(); 
} 
else if($shipping == $program){ 
//Notificacion envio depar 
mailprogramado(); 
//realizar pedido de envio 
request(); 
//destruir sesion 
session_destroy(); 
exit(); 
} 
?> 

ответ

1

Если я вас правильно понимаю, вы задаетесь вопросом, почему вы получите несколько запросов от Shopify вместо одного.

В последнее время я столкнулся с такой же проблемой, и я думаю, что это особенность механизма Webhooks, с которым вам приходится иметь дело.

Рассмотрим этот пост: https://ecommerce.shopify.com/c/shopify-apis-and-technology/t/webhook-url-is-called-between-2-4-times-220007

BottomLine. Вы должны ожидать, что Shopify будет поражать вашу конечную точку более одного раза, и вам придется управлять этим самостоятельно, чтобы избежать дублирования сущностей и прочее.

+0

Ну, я посмотрел сообщение, и, если я понимаю, мне нужно поставить в очередь код для решения проблемы, но теперь я не понимаю, может это сделать, я не знаю, в какой части кода мне нужно попробовать , – victor

Смежные вопросы