Bitmex API (PHP), отменить один заказ не работает - PullRequest
0 голосов
/ 02 октября 2018

Я использую PHP.Когда я пытаюсь отменить один активный ордер через API, я получаю ошибку:

"error" => array:2 [▼
   "message" => "orderIDs or clOrdIDs must be sent."
   "name" => "ValidationError"
]

Я помещаю orderID в качестве массива (это мой метод lib):

public function cancelOrder($orderID) {
   $symbol = self::SYMBOL;
   $data['method'] = "DELETE";
   $data['function'] = "order";
   $data['params'] = array(
      "orderID" => $orderID, // ['r5ff364da-4243-8ee3-7853-6fb0f9f7e44d']
   );
   return $this->authQuery($data);
}

Что я делаюнеправильно?https://www.bitmex.com/api/explorer/#!/Order/Order_cancel

Аналогичная проблема: bitmex api php, отмена 1 заказа не работает

1 Ответ

0 голосов
/ 13 июня 2019

Поздно к вечеринке, но подумал, что я отвечу, когда я наконец понял это, и представлю, что это будет полезно для всех, кто пытается использовать Bitmex API с PHP (особенно, если вы используете упаковщик bitmex-api-php наkstka's github).

Сначала поместите порядковый номер Id в массив, даже если он всего один:

public function cancelOrder($orderId) {
    $orderArr = array($orderId);
    $symbol = self::SYMBOL;
    $data['method'] = "DELETE";
    $data['function'] = "order";
    $data['params'] = array(
      'orderID' => $orderArr,
    );
    return $this->authQuery($data);
}

Затем необходимо убедиться, что ваши параметры закодированы в формате json, но толькодля DELETE

if($method == "GET" || $method == "POST" || $method == "PUT") {
    $params = http_build_query($data['params']);
} elseif($method == "DELETE") {
    $params = json_encode($data['params']);
}

, а затем, что наиболее важно, вы должны убедиться, что заголовки CURL закодированы в формате json:

if($data['method'] == "DELETE") {
    curl_setopt($this->ch, CURLOPT_CUSTOMREQUEST, "DELETE");
    curl_setopt($this->ch, CURLOPT_POSTFIELDS, $post);
    $headers[] = 'X-HTTP-Method-Override: DELETE';
    $headers[] = 'Content-Type: application/json';
 }

Вы, должно быть, смеетесь.Это заняло у меня целую вечность, чтобы понять!

...