Мы переходим в BC, и я получаю заказы через API, используя функцию usexml, так как мне нужно вывести файл для каждого заказа. Я успешно получал заказы, продукты в заказах и адрес доставки от BC. Мне пришлось добавить ряд функций в библиотеку bigcommerce.php, чтобы сделать это, поскольку на них можно ссылаться в онлайн-документах, на самом деле их нет в библиотеке. Мой последний шаг — получение купонов, связанных с заказом. Функции, которые я реализовал в библиотеке:
// Функция отсутствует в добавленной библиотеке 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.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);
}
Я использую API Bigcommerce и могу получать заказы, купоны, купоны по идентификатору, адреса доставки, но я использую только класс 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;
}
Других решений пока нет …