Начало работы по протоколу FIX с PHP-сокетами - PullRequest
3 голосов
/ 10 августа 2011

У меня достаточно базовых знаний о сокетах PHP и протоколе FIX. У меня есть учетная запись, которая позволяет мне подключаться к серверу и получать цены на валюту.

Я адаптировал этот код для подключения и выяснил, что я получаю обратно от удаленного сервера:

$host = "the-server.com";
    $port = "2xxxx";

    $fixv = "8=FIX.4.2";
    $clid = "client-name";
    $tid = "target-name";

    $fp = fsockopen($host, $port, $errno, $errstr, 30);
    if (!$fp) {
        echo "$errstr ($errno)<br />\n";
    } else {
        $out = "$fixv|9=70|35=A|49=$clid|56=$tid|34=1|52=20000426-12:05:06|98=0|108=30|10=185|";
        echo "\n".$out."\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            echo ".";
            echo fgets($fp, 1024);
        }
        fclose($fp);
    }

и я ничего не получаю обратно. Хост хорош, потому что я получаю ошибку, когда использую случайную ошибку. Сообщение, которое я отправляю, не генерирует ответ?

Возможно, я не очень хорош в поиске вещей в Google, но я не смог найти ни одного простого учебника о том, как сделать это с помощью php (по крайней мере, ничего, что объединяет fix и php).

Любая помощь очень ценится.

1 Ответ

4 голосов
/ 10 августа 2011

Символ разделителя FIX на самом деле '\001', а не '|', поэтому вы должны заменить его при отправке.

Некоторые ссылки для вас:

Редактировать 0:

Из той же википедии статья, которую вы упоминаете:

Поля сообщения разделяются с помощью символа ASCII 01.
...
Пример сообщения FIX: отчет о выполнении (символ трубы используется для представления символа SOH) ...

Редактировать 1:

Пара баллов:

  • Тег 9 содержит длину сообщения без тегов 8 (тип), 9 (длина) и 10 (контрольная сумма).
  • Тег 10, контрольная сумма, должен быть по модулю 256 сумм значений ASCII всех символов сообщения, включая все разделители SOH, но не включая сам тег 10 (я знаю, глупо иметь контрольные суммы поверх TCP, но ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...