Получайте заказы по нескольким штатам

Я использую C # для получения списка заказов из установки WooCommerce 2.6 через новый REST API.

Что мне нужно сделать, так это получить заказы, которые имеют одно из трех возможных состояний, но API, похоже, позволяет мне фильтровать только один статус для каждого вызова. Это часть кода, который работал нормально для WooCommerce 2.5x REST API:

// Create a list of parameters for filtering the result set
Dictionary<string, string> parameters = new Dictionary<string, string>();
parameters["status"] = "pending,processing,on-hold";
parameters["expand"] = "coupons,products,taxes";

// Use RestSharp to call the API
var client = new RestClient(wooHelper.ApiUrl);
...
var request = new RestRequest(url, Method.GET);
var response = client.Execute(request);

Значения в словаре parameters добавляются к URL-адресу API, поэтому в итоге я получаю что-то вроде этого:

https://example.com/wp-json/wc/v1/orders?status=pending,processing,on-hold&expand=coupons,products,taxes&<other parameters for OAUTH>

API 2.5 использовался для возврата списка заказов, которые имели одно из состояний в status. Теперь я получаю сообщение об ошибке, что status не является одним из значений any, ...

Можно ли в одном вызове получить список ожидающих, обрабатываемых или отложенных заказов или мне нужно выполнить три отдельных вызова API?


РЕДАКТИРОВАТЬ: фактическая ошибка JSON

{
    "code" : "rest_invalid_param",
    "message" : "Ung\u00fcltige(r) Parameter: status",
    "data" : {
        "status" : 400,
        "params" : {
            "status" : "status ist kein any, pending, processing, on-hold, completed, cancelled, refunded, failed"
        }
    }
}

РЕДАКТИРОВАТЬ 2. Копаться в WooCommerce исходный код обнаружил следующий фрагмент кода:

/**
 * Query args.
 *
 * @param array $args
 * @param WP_REST_Request $request
 * @return array
 */
public function query_args( $args, $request ) {
    global $wpdb;

    // Set post_status.
    if ( 'any' !== $request['status'] ) {
        $args['post_status'] = 'wc-' . $request['status'];
    } else {
        $args['post_status'] = 'any';
    }

Значит, при передаче нескольких статусов это превратит $args['post_status'] в _10 _...?

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


person Thorsten Dittmar    schedule 10.08.2016    source источник
comment
Согласно документации WooCommerce, если вы передаете несколько статусов, разделенных запятыми. API должен возвращать заказы всех статусов. Не могли бы вы поделиться подробностями полученного вами исключения?   -  person Asad    schedule 10.08.2016
comment
@Asad: Не сейчас, я уже без работы, завтра поделюсь еще, но сообщение об ошибке вроде status is not one of any, pending, processing, on-hold, completed, cancelled, refunded, failed.   -  person Thorsten Dittmar    schedule 10.08.2016
comment
@Asad Очевидно, вы смотрите на старую документацию.   -  person Thorsten Dittmar    schedule 15.08.2016


Ответы (1)


Я отправил это на GitHub для расследования, и оказалось, что фильтрация по нескольким значениям статуса больше не поддерживается новым REST API. (https://github.com/woothemes/woocommerce/issues/11676).

person Thorsten Dittmar    schedule 15.08.2016