Coinbase Pro разместить заказ по почте php

Я пытаюсь разместить заказ с помощью API Coinbase Pro, используя php. С самого начала хочу сказать, что аутентификация работает нормально, когда я использую метод get, поэтому с этой частью все в порядке. Например, я получаю на свой счет свои заказы и все, что с ними связано.

Проблемы возникают, когда я пытаюсь разместить заказ, используя почту (или другие методы публикации, которые я использую), поскольку это первый метод публикации, который я пробую.

Итак, вот что я пытаюсь сделать:

Обратите внимание, что значения приведены только для пояснения:

создание заказа:

$_eur = $_eur - ($_eur*$this->Eurfee); //Eur is i get the amount i have and subtract the fee of 0.15% for terms an purposes lets say i have 100
$_order = array(
            'product_id' => 'LTC-EUR',
            'side' => $side, //buy
            'price' => $this->lowPrice, //112.2
            'size' => $_eur / $this->lowPrice
          );

Теперь отправьте запрос;

$request = '/orders';
$this->__sendRequest($request, $_order, 'POST', true);

Вот функция отправки запроса:

private function __sendRequest($request, $body='', $method='GET', $auth=false)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $this->endpoint.$request);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if (strcasecmp($method, 'POST') === 0)
    {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
    }
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

    if ($auth) {
        $headers = array();
        $headers[] = "Content-Type: application/json";
        $headers[] = "CB-ACCESS-KEY: " . $this->key;
        $headers[] = "CB-ACCESS-SIGN: " . $this->__signature($request, $body, $method);
        $headers[] = "CB-ACCESS-TIMESTAMP: " . $this->timestamp;
        $headers[] = "CB-ACCESS-PASSPHRASE: " . $this->passphrase;
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    }

    $output = curl_exec($ch);
    $output = json_decode($output);

    if(curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
        return $output;
    }

    curl_close($ch);
    return $output;
}

А вот подпись, если может быть проблема с почтовыми запросами:

private function __signature($request_path='', $body='', $method='GET') {
    $body = is_array($body) ? json_encode($body) : $body;

    $what = $this->timestamp.$method.$request_path.$body;

    return base64_encode(hash_hmac("sha256", $what, base64_decode($this->secret), true));
}

Когда я отправляю запрос, вывод будет нулевым и, конечно, заказ не размещен. Кто-нибудь может мне помочь. Я думаю, что это завиток, что я делаю что-то не так, может быть, с методами публикации?

И еще один вопрос к тому, кто понимает сборы за монеты. Должен ли я рассчитывать размер с включенной комиссией, и coibase будет принимать комиссию после завершения, или я должен просто рассчитать размер и позволить Coibase рассчитать комиссию самостоятельно?

С уважением,


person Combinu    schedule 15.06.2019    source источник
comment
ваша __sendRequest функция должна иметь более строгую проверку $ method. if($method==='POST'){ok}elseif{$method==='GET'){this is also OK}else{throw new \InvalidArgumentException("unsupported method! (only GET and POST supported)");}   -  person hanshenrik    schedule 15.06.2019
comment
да, я знаю ... спасибо, что указали. но он все еще находится в разработке, я добавлю их позже!   -  person Combinu    schedule 15.06.2019
comment
var_dump($response); как до, так и после json_decode (), я не думаю, что curl_exec () на самом деле возвращает NULL, он, вероятно, возвращает либо bool (false), либо что-то НЕ json, и поскольку это не json, json_decode возвращает null. что такое $ response до json_decode ()?   -  person hanshenrik    schedule 15.06.2019
comment
Нашел проблему. Спасибо за вашу помощь. Это именно то, что я сделал. Я прочитал сообщение от coinbase, в котором учитывалась сумма, которую я заказывал, т.е. было неверно   -  person Combinu    schedule 15.06.2019


Ответы (1)


Функция работает исправно! Я обнаружил, что размер, который я отправлял, не удовлетворял минимуму после того, как я узнал сообщение, которое я получал от Coinbase!

person Combinu    schedule 15.06.2019