2015-03-12 3 views
2

Мы переезжаем в BC, и я получаю заказы через api, используя функцию usexml, поскольку я должен выводить файл для каждого заказа. Я успешно получаю заказы, продукты в заказах и адрес доставки от BC. Мне пришлось добавить в библиотеку bigcommerce.php ряд функций, чтобы сделать это, так как пока они могут быть указаны в онлайн-документах, они фактически не существуют в библиотеке. Мой последний шаг - получение купонов, связанных с заказом. Функции, которые я реализованы в библиотеке следующим образом:bigcommerce api php получить заказ купон

// Функция отсутствует из библиотеки addded 030215 PH - Получить продукты на заказ

public static function getOrderProducts($id) 
{ 
     return self::getCollection('/orders/' . $id . '/products','Order');  
} 

// Function missing form library added 030215 - Get Shipping adds on order 

    public static function getOrderShippingAddresses($id) 
    { 
return self::getCollection('/orders/' . $id .'/shipping_addresses','Order');    
    } 

// Функция отсутствует форма библиотеки добавлены 030215 - Получить купоны на заказ

public static function getOrderCoupons($id) 
    { 
     return self::getCollection('/orders/' . $id . '/coupons','Order');  
    } 

Хотя аналогичный синтаксис я не могу получить getOrderCoupons, возвращающие купонную информацию для замены ссылки в нормальном getOrders вернуться.

Я использую ту же логику для купона, что и для получения адресов доставки, как показано ниже. Любые решения приветствуются.

N.B Bigcommerce :: useXML(); используется поэтому строки XML используются

 $shipping_xml = Bigcommerce::getOrderShippingAddresses($order->id); 
     $shippings = simplexml_load_string($shipping_xml); 

// Если есть только один адрес доставки в заказ

 foreach($shippings as $shipping) { 
      $xmlship = $shipping->asXML(); 
      $domship = new DOMDocument(); 
      $domship = dom_import_simplexml($shipping); 
      $domordship = dom_import_simplexml($order->shipping_addresses); 
      $domship = $domordship->ownerDocument->importNode($domship, TRUE); 
      $domordship->appendChild($domship); 
     } 

    $coupon_xml = Bigcommerce::getOrderCoupons($order->id); 
    $coupons = simplexml_load_string($coupon_xml); 

// Если есть только один купон за заказ

foreach($coupons as $coupon) {      
      $xmlcoup = $coupon->asXML(); 
      $domcoup = new DOMDocument(); 
      $domcoup = dom_import_simplexml($coupon); 
      $domordcoup = dom_import_simplexml($order->coupons); 
      $domcoup = $domordcoup->ownerDocument->importNode($domcoup, TRUE); 
      $domordcoup->appendChild($domcoup); 
      } 

ответ

1

я использую bigcommerce api и я могу получить заказы, купоны, купон по идентификаторам, адреса доставки, но я использую класс Connection.php только своими методами для их получения.

Вы должны отслеживать и проверять правильность url curl, делая var_dum ($ url);

метод connection.php // Bigcommerce \ Api \ Connection

public function get($url, $query=false) 
{ 
     $this->initializeRequest(); 

     if (is_array($query)) { 
      $url .= '?' . http_build_query($query); 
     } 

     var_dum($url);//**CHECK IF THIS URL IS BUILT CORRECTLY**// 

     curl_setopt($this->curl, CURLOPT_CUSTOMREQUEST, 'GET'); 
     curl_setopt($this->curl, CURLOPT_URL, $url); 
     curl_setopt($this->curl, CURLOPT_HTTPGET, true); 
     curl_exec($this->curl); 

     return $this->handleResponse(); 
} 

Вы также можете проверить реакцию в connection.php

private function handleResponse() 
{ 
     if (curl_errno($this->curl)) { 

      throw new NetworkError(curl_error($this->curl), curl_errno($this->curl)); 
     } 
     var_dump(body);//CHECK THIS LINE 
     $body = ($this->useXml) ? $this->getBody() : json_decode($this->getBody()); 

     $status = $this->getStatus(); 
     var_dump(status);//CHECK THIS LINE 
     if ($status >= 400 && $status <= 499) { 
      if ($this->failOnError) { 
       throw new ClientError($body, $status); 
      } else { 
       $this->lastError = $body; 
       return false; 
      } 
     } elseif ($status >= 500 && $status <= 599) { 
      if ($this->failOnError) { 
       throw new ServerError($body, $status); 
      } else { 
       $this->lastError = $body; 
       return false; 
      } 
    } 

     if ($this->followLocation) { 
      $this->followRedirectPath(); 
     } 
     var_dump(body);//CHECK THIS LINE 
     return $body; 
} 
+0

Благодаря Мильо var_dump ответил на вопрос. Мне нужно было справиться с тем случаем, когда купон не был, поскольку БК возвращал ложь. В кейсе для доставки всегда должны быть данные, но купон не имеет. Код изменен на: –