BigCommerce API PHP获取订单折扣码

3
我们正在迁移到BC,我使用“usexml”函数通过API获取订单,因为我必须为每个订单输出一个文件。我已经成功从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返回提供的链接。

我正在使用与获取运输地址相同的逻辑来处理优惠券,如下所示。欢迎提出任何解决方案。

注意: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个回答

1
我使用Bigcommerce API可以获取订单、优惠券、特定ID的优惠券和运输地址,但我只使用Connection.php类和自己的方法来获取这些信息。
您需要跟踪并检查curl URL是否正确,可以使用var_dump($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;
}

感谢miglio的var_dump解决了这个问题。我需要处理没有优惠券的情况,因为BC返回了false。运输情况始终需要有数据,但优惠券不需要。代码已更改为: - Pat H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接