Bitmex API (PHP), отмена одного заказа не работает
Я использую 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/
Аналогичная проблема: bitmex api php, отмена 1 заказа не работает
0 ответов
Поздно к вечеринке, но подумал, что отвечу, когда наконец понял это, и представил, что это будет полезно для всех, кто пытается использовать Bitmex API с PHP (особенно, если вы используете оболочку bitmex-api-php на github kstka).
Сначала поместите номер идентификатора заказа в массив, даже если он всего один:
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';
}
Вы должны уйти, смеясь. Мне потребовалась целая вечность, чтобы понять это!