2015-04-29 3 views
1

Im, используя плагин для CakePHP, чтобы позвонить, чтобы получить определенные заказы. Я могу вызывать все заказы с определенными полями, но мне было интересно, как мне сделать звонок, чтобы получить заказы с определенным именем или order_number? Вот источник звонка Shopify. Его уже заверены и все:Чтобы узнать, как получить заказ по имени или номеру заказа

public function call($method, $path, $params=array()) 
    { 
     if (!$this->isAuthorized()) 
      return; 
     $password = $this->is_private_app ? $this->secret : md5($this->secret.$this->ShopifyAuth->token); 
     $baseurl = "https://{$this->api_key}:[email protected]{$this->ShopifyAuth->shop_domain}/"; 

     $url = $baseurl.ltrim($path, '/'); 
     $query = in_array($method, array('GET','DELETE')) ? $params : array(); 
     $payload = in_array($method, array('POST','PUT')) ? stripslashes(json_encode($params)) : array(); 
    $request_headers = in_array($method, array('POST','PUT')) ? array("Content-Type: application/json; charset=utf-8", 'Expect:') : array(); 
    $request_headers[] = 'X-Shopify-Access-Token: ' . $this->ShopifyAuth->token; 
     list($response_body, $response_headers) = $this->Curl->HttpRequest($method, $url, $query, $payload, $request_headers); 
    $this->last_response_headers = $response_headers; 
    $response = json_decode($response_body, true); 

     if (isset($response['errors']) or ($this->last_response_headers['http_status_code'] >= 400)) 
      throw new ShopifyApiException($method, $path, $params, $this->last_response_headers, $response); 

     return (is_array($response) and (count($response) > 0)) ? array_shift($response) : $response; 
    } 

    private function shopApiCallLimitParam($index) 
    { 
     if ($this->last_response_headers == null) 
     { 
      return 0; 
     } 
     $params = explode('/', $this->last_response_headers['http_x_shopify_shop_api_call_limit']); 
     return (int) $params[$index]; 
    } 

... и код, который делает GET вызов:

// I only want the id and title of the collections 
      $fields = "fields=name,id,status,financial_status,fulfillment_status,billing_address,customer"; 
      // get list of collections 
      $custom_collections = $this->ShopifyAPI->call('GET', "/admin/orders.json", $fields); 
      $this->set('collections', $custom_collections); 

Я думаю, что я не хватает места, где я могу поставить условия для вызова получить определенные заказы. Я уже прочитал документацию API, но не могу получить ответ.

Я попытался положить ?name=%231001 на URL после .json, чтобы попытаться получить заказ # 1001, но она приносит обратно пустой массив.

Затем я попробовал ? Order_number = 1001, но он приносит мне каждый заказ вместе с 1001 D: Это действительно сбивает с толку, может ли кто-нибудь мне помочь?

Заранее спасибо.

ответ

2

Ну, я узнал, что вы действительно можете получить заказ, используя имя или order_number. Его другое свойство, которое по какой-либо причине не указано в документации. Но в URL-адресе, если вы используете другой язык, все, что вам нужно добавить в GET, это admin/order.json? Name =% 2310001 & status = any это, чтобы получить заказ 10001, поэтому просто добавьте order_number после% 23 , Я видел это на форуме в университете Shopify, я просто реализовал это неправильно в своем коде. Если вы используете CakePhp shopify plugin, как я, все, что я сделал, добавлял в поле $ имя? Name =% 23 ". Number." & статуса = любой ";

Ill оставить код здесь:

$this->layout = 'main'; 

$order_number = "18253"; 

$fields = "name=%23". $order_number ."&status=any"; 

$order = $this->ShopifyAPI->call('GET', "/admin/orders.json", $fields); 
    if (!empty($order)) { 
    $this->set('order', $order); 

    } else { 
     $this->Session->setFlash('<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button> No existe el numero de orden ingresado.','default',array('class' => 'alert alert-danger alert-dismissible', 'type' => 'alert')); 
    } 

Надеется, что это помогает кто-то: P

+0

Если вам придется вручную избежать # в строке запроса, это означает, что то api-вызов проходит через исходный вход. Реальное исправление должно быть в вашем классе HttpRequest, который должен быть передан в URL-адресах запроса URL-адреса. http://php.net/manual/en/function.http-build-query.php – txyoji

+0

Фактически Im, кодирующий #, вызывает префикс, который наш магазин использует для имени заказов. У других может быть другой префикс номера заказа. И кодировка # on http будет больше причиной работы не каждый раз, когда я буду отправлять имя в полях ShopfyAPI для вызова. –

+0

Я понимаю имя = # 000000 - это формат. Я говорю, что если вам нужно вручную избежать значения (используя% 23 вместо #), это означает, что любое значение в вашей строке запроса с зарезервированным символом (пробел, #? &) Не будет закодировано правильно. Исправление этой проблемы с кодировкой в ​​методе -> call() означает, что вам не нужно беспокоиться о специальных символах в ваших данных «$ fields». http_build_query() может позаботиться об этой детали для вас. – txyoji

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