· 6 years ago · May 19, 2019, 05:58 AM
1<?php
2
3/*
4
5Ðеобходимо напиÑать php class, который будет принимать get-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¸ отправлÑть другой get Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð² ÑоответÑтвии Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ уÑловиÑми, а также делать необходимые проверки. Ð”Ð»Ñ Ð¿Ñ€Ð¸ÐµÐ¼Ð° и отправки GET-запроÑов иÑпользовать библиотеку https://github.com/guzzle/guzzle
6Ðеобходимо реализовать запиÑÑŒ и обновление информации о запроÑах (Ñтавках) в БД, а также вывод информации из базы данных.
7
8Ðеобходимо реализовать проÑтой роутинг:
9 1. https://api.sitename.ru/class.php?action=dashboard вывод информации о вÑех запроÑах (Ñтавках)
10 2. https://api.sitename.ru/class.php?action=request на данный маршрут будут отправлÑтьÑÑ Ð²Ñ…Ð¾Ð´Ð½Ñ‹Ðµ GET-запроÑÑ‹
11
12Формат входного GET-запроÑа Ñледующий: https://sitename.ru/class.php?action=request&request=signal&signal_from=названиеиÑточника&order_type=типордера&symbol=валютнаÑпара(например frxEURUSD)
13
14ИÑходÑщие запроÑÑ‹ отправлÑÑŽÑ‚ÑÑ Ð½Ð° API binaryteam.ru.
15Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð·Ð´ÐµÑÑŒ: https://docs.google.com/document/d/1BNQIC42N31q_DZx1fSLMCDYeGOB1cFAL3OAd1V8oDZ4/edit
16
17
18КлаÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ работать Ñ Ð¼Ð°ÑÑивом пользователей $users, который Ñодержит Ñледующую информацию:
19
20$users = array(
21 'aleksv' => array(
22 'username' => 'aleksv', // Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
23 'user_status' => 'active', // Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (active || stopped)
24 'trading' => true, // Разрешена Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ Ð¸Ð»Ð¸ нет
25 'type_account' => 'demo', // Тип аккаунта Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ñтавки (demo || real)
26 'duration' => '3m', // ПродолжительноÑть (Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации Ñтавки)
27 'bet_amount' => (int)1, // ÐŸÐµÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñумма Ñтавки в USD
28 'martingale' => true, // Разрешено иÑпользовать мартингейл или нет, раÑпроÑтранÑетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ на Ñледующий Ñигнал (true || false)
29 //'check_signal_currency' => true, // ПроверÑть Ñовпадение валюты Ñигнала (true || false)
30 //'check_signal_from' => true, // ПроверÑть Ñовпадение иÑточника Ñигнала (true || false)
31 //'check_signal_type' => true, // ПроверÑть Ñовпадение типа Ñигнала CALL или PUT (true || false)
32 'trade_in_expiration' => false, // Разрешено отправлÑть новый Ñигнал на API binaryteam, еÑли Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации(завершениÑ) поÑледнего контракта Ñ Ñ‚Ð°ÐºÐ¸Ð¼-же иÑточником и такой-же валютой(как уже еÑть контракт в БД) еще не вышло и результат контракта еще не извеÑтен (true || false)
33 'martingale_steps' => (int)5, // КоличеÑтво колен мартингейл (чиÑловое значение от 0 до 10)
34 'apikey' => '2101823462323f9e97107f9c9481162d', // Ключ binaryteam Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ñтавок
35 ),
36 'roman' => array(
37 'username' => 'roman',
38 'user_status' => 'stopped',
39 'trading' => true,
40 'type_account' => 'demo',
41 'duration' => '3m',
42 'bet_amount' => (int)1,
43 'martingale' => true,
44 //'check_signal_currency' => true,
45 //'check_signal_from' => true,
46 //'check_signal_type' => true,
47 'trade_in_expiration' => false,
48 'martingale_steps' => (int)2,
49 'apikey' => '',
50 )
51);
52
53
54ПоÑле Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ñщего GET-запроÑа необходимо Ñоздать объект клаÑÑа Request Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ параметрами:
55
56$user = new Request ($params);
57
58и вызвать метод: $user->start();
59
60### Примечание 1:
61Перед выполнением дальнейших дейÑтвий необходимо проверить, активен пользователь или нет, разрешена Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ или нет, еÑть ключ API у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ нет.
62ЕÑли пользователь active, Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ true и еÑть APIKEY выполнÑем программу дальше, еÑли данное уÑловие не выполнÑетÑÑ, то Ð´Ð»Ñ ÐТОГО Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð°Ð»ÑŒÑˆÐµ ничего не делаем.
63
64### Примечание 2:
65Как работает параметр trade_in_expiration?
66Ð’Ñе контракты, которые приходÑÑ‚ в иÑходном GET-запроÑе имеют иÑточник Ñигнала, например source_1 и валютную пару, например frxEURUSD. ПоÑле необходимых проверок, Ñигнал либо пропуÑкаетÑÑ, либо отправлÑетÑÑ Ð½Ð° Ñервер API binaryteam и Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ контракте ÑохранÑетÑÑ Ð² БД, также обÑзательно ÑохранÑетÑÑ Ð¸Ñточник Ñигнала, например source_1 и Ð²Ð°Ð»ÑŽÑ‚Ð½Ð°Ñ Ð¿Ð°Ñ€Ð°, например frxEURUSD. Ð’Ñ€ÐµÐ¼Ñ ÑкÑпирации(завершениÑ) Ð´Ð»Ñ Ñтого контракта было уÑтановлено, например 8 чаÑов.
67
68Параметр trade_in_expiration проверÑет разрешено отправлÑть новый Ñигнал на API binaryteam, еÑли Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ð¾Ñледнего контракта Ñ Ñ‚Ð°ÐºÐ¸Ð¼-же иÑточником и такой-же валютой(как уже еÑть контракт в БД) еще не вышло и результат контракта еще не извеÑтен (Ð²Ñ€ÐµÐ¼Ñ Ð½Ðµ завершено).
69
70Через 5 чаÑов приходит Ñнова Ñигнал Ñ Ñ‚Ð°ÐºÐ¸Ð¼-же иÑточником(source_1) и такой-же валютной парой(frxEURUSD). Что нам необходимо Ñделать? ПроверÑем параметр у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ trade_in_expiration, еÑли trade_in_expiration === true (разрешено отправлÑть Ñигнал, пока Ð²Ñ€ÐµÐ¼Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð°ÐºÑ‚Ð° не вышло), тогда отправлÑем новый Ñигнал на API binaryteam и ÑохранÑем информацию в БД, еÑли trade_in_expiration === false (ÐЕ Ð ÐЗРЕШЕÐО отправлÑть новый Ñигнал, пока Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰ÐµÐ³Ð¾ контракта Ñ Ð¢ÐКИМ-ЖЕ ИСТОЧÐИКОМ и ТÐКОЙ-ЖЕ Ð’ÐЛЮТÐОЙ ПÐРОЙ еще не вышло), тогда мы проÑто игнорируем второй Ñигнал.
71
72Может быть так, что Ð²Ñ€ÐµÐ¼Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÐºÐ¾Ð½Ñ‚Ñ€Ð°ÐºÑ‚Ð° Ñ Ð¸Ñточником(source_1) и валютной парой(frxEURUSD) было уÑтановлено, например 8 чаÑов. Через 5 чаÑов приходит новый Ñигнал Ñ Ð¸Ñточником(source_1 или source_2 или source_3 и Ñ‚.д) и валютной парой(frxEURJPY). ИÑточник может либо отличатьÑÑ, либо повторÑтьÑÑ, ÐО Ð²Ð°Ð»ÑŽÑ‚Ð½Ð°Ñ Ð¿Ð°Ñ€Ð° ÑовÑем другаÑ, тогда мы отправлÑем данный Ñигнал на API binaryteam и ÑохранÑем информацию в БД.
73
74### Внимание! Параметр trade_in_expiration необходимо проверÑть поÑле каждого Ñигнала, пришедшего во входÑщем GET-запроÑе.
75
76### Далее проверÑем:
77
78 0. Сценарий первый: в базе данных нет еще никаких Ñтавок
79 -----------------------
80 Тогда, ÑохранÑем полученную информацию из входÑщего GET-запроÑа в БД, ÑеÑÑию, затем отправлÑем иÑходÑщий GET-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ https://api.binaryteam.ru/?request=signal&key=".$this->apikey."&type_account=".$this->type_account."&bet=".$this->signal_type."&symbol=".$this->symbol."&duration=".$this->duration."&amount=".$this->bet_amount , получаем $binaryteam_betid, ждем 5 Ñекунд, вызываем метод $user->bet_info($binaryteam_betid, $apikey) отправлÑем повторный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ binaryteam, получаем полную информацию по контракту $binaryteam_betid($contract_id) и ÑохранÑем(обновлÑем) информацию в БД по данному контракту.
81
82 1. Сценарий второй:
83 -----------------------
84 ПоÑтупил новый Ñигнал.
85 ПроверÑем параметр trade_in_expiration.
86 Ð’ базе данных еÑть Ñтавки Ñ Ñ‚Ð°ÐºÐ¾Ð¹-же валютной парой и таким-же полем signal_from как мы получили из входÑщего GET-запроÑа.
87 Ð”Ð»Ñ Ð²Ñех Ñтавок Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации закончилоÑÑŒ(нет активных контрактов) и поÑледнÑÑ Ñтавка "ВЫИГРÐЛР- result =1"
88
89 Тогда необходимо выполнить дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð¿Ð¸Ñанные в - 0. Сценарий первый
90
91
92 2. Сценарий третий:
93 -----------------------
94 ПоÑтупил новый Ñигнал.
95 ПроверÑем параметр trade_in_expiration.
96 Ð’ базе данных еÑть Ñтавки Ñ Ñ‚Ð°ÐºÐ¾Ð¹-же валютной парой и таким-же полем signal_from как мы получили из входÑщего GET-запроÑа.
97 Ð”Ð»Ñ Ð²Ñех Ñтавок Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации закончилоÑÑŒ(нет активных контрактов) и поÑледнÑÑ Ñтавка "ПРОИГРÐЛР- result =2"
98
99 Тогда проверÑем параметры $this->martingale и $this->martingale_steps.
100 ЕÑли $this->martingale = false, тогда необходимо выполнить дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð¿Ð¸Ñанные в - 0. Сценарий первый
101
102 ЕÑли ( $this->martingale = true && $this->martingale_steps >= 1 )? Тогда необходимо выполнить дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð¿Ð¸Ñанные в - 0. Сценарий первый (Ñохранить информацию в БД, ÐО! открыть контракт удвоенной Ñтавкой: $this->bet_amount *2. ЕÑли контракт выигрывает (result=1), то Ñледующие Ñигналы открываем обычной Ñтавкой (мартингейл - обнулÑем).
103
104ЕÑли контракт Ñнова проиграет, то на Ñледующий Ñигнал мы открываем новый контракт, но уже утроенной Ñтавкой ($this->bet_amount *2)*2. ЕÑли контракт выигрывает (result=1), то Ñледующие Ñигналы открываем обычной Ñтавкой (мартингейл - обнулÑем). ЕÑли проигрывает, то новый контракт открываем Ñо Ñтавкой (Ñтавка предыдущего контракта *2).ЕÑли контракт выигрывает (result=1), то завершаем иÑпользование мартингейл, еÑли проигрывает, то каждый Ñледующий шаг, удваиваем предыдущий $this->bet_amount до тех пор, пока не закончатÑÑ ÐºÐ¾Ð»Ð¸Ñ‡ÐµÑтво колен мартингейл).
105ЕÑли количеÑтво колен мартингейл закончилоÑÑŒ, Ñ‚. е мы прошли веÑÑŒ цикл колен, тогда необходимо выполнить дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð¿Ð¸Ñанные в - 0. Сценарий первый (открыть обычную Ñтавку) и так до Ñледующего проигрыша.
106
107
108
109 3. Сценарий четвертый:
110 -----------------------
111 ПоÑтупил новый Ñигнал.
112 ПроверÑем параметр trade_in_expiration.
113 Ð’ базе данных ЕСТЬ! Ñтавка(поÑледнÑÑ Ñтавка) Ñ Ñ‚Ð°ÐºÐ¾Ð¹-же валютной парой и таким-же полем signal_from как мы получили из входÑщего GET-запроÑа. Ð”Ð»Ñ Ñтавки Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации еще закончилоÑÑŒ (результат не извеÑтен), тогда проверÑем:
114
115 1. $this->trade_in_expiration
116
117 ЕÑли значение $this->trade_in_expiration === true(разрешено отправлÑть новыю Ñтавку, пока Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации не вышло), то ÑохранÑем полученную информацию из входÑщего GET-запроÑа в БД, ÑеÑÑию, затем отправлÑем иÑходÑщий GET-Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ https://api.binaryteam.ru/?request=signal&key=".$this->apikey."&type_account=".$this->type_account."&bet=".$signal."&symbol=".$this->symbol."&duration=".$this->duration."&amount=".$this->bet_amount , получаем $binaryteam_betid, ждем 5 Ñекунд, вызываем метод $user->bet_info($binaryteam_betid, $apikey) отправлÑем повторный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ binaryteam, получаем полную информацию по контракту $binaryteam_betid($contract_id) и ÑохранÑем информацию в БД.
118
119 2. ЕÑли ($this->trade_in_expiration === false) - запрещено отправлÑть новыю Ñтавку, пока Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации не вышло, тогда ничего не делаем (проÑто игнорируем входÑщий GET-запроÑ)
120
121
122
123 Важный момент: Ð’Ñегда необходимо проверÑть параметр $this->trade_in_expiration на ÑоответÑтвие иÑточника Ñигнала (signal_from) и валюты Ñигнала($this->symbol) из входÑщего GET-запроÑа Ñ Ð¿Ð¾Ñледней Ñтавкой в базе данных, Ñ Ñ‚Ð°ÐºÐ¸Ð¼ же иÑточником Ñигнала и такой-же валютной парой.
124 -----------------------
125 Ðа Ñтранице: https://api.sitename.ru/class.php?action=dashboard необходимо выводить информацию о вÑех запроÑах (Ñтавках), которые были отправлены на Ñервер binaryteam.
126
127Информацию на Ñтранице https://api.sitename.ru/class.php?action=dashboard, обновлÑть через AJAX, никаких фреймой и рефрешей HTML Ñтраниц Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñами(вообщем без коÑтылей).
128
129ПроверÑть результат Ñтавки по контракту, каждые 5-10 Ñекунд, не долбить каждую Ñекунду Ñервер binaryteam запроÑами
130ОбновлÑть результаты Ñтавок в таблице /class.php?action=dashboard каждые 5-10 Ñекунд (через ajax - без перезагрузки Ñтраницы)
131
132Структура таблицы базы данных предÑтавлена ниже, еÑли необходимо добавить какие-то полÑ, то добавлÑйте.
133Задержку на получение информации по контракту(результату поÑле отправки контракта) делать только в отдельных методах, например $this->bet_info(); не надо вешать веÑÑŒ Ñкрипт на N-времени. ИÑпользовать вÑтроенные методы Guzzle
134
135
136*/
137
138
139
140
141
142
143
144
145
146
147
148
149 ini_set('display_errors', 1);
150 ini_set('display_startup_errors', 1);
151 ini_set('error_reporting', E_ALL);
152
153 require_once("vendor/autoload.php");
154
155 $db_host = 'localhost';
156 $db_name = 'binarysignals';
157 $db_user = 'binarysignals';
158 $db_password = '9P1a5V2j';
159
160 // ПодключаемÑÑ Ðº Ñерверу БД
161 $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
162 $mysqli->set_charset("utf8");
163 if (!$mysqli) { die ('Connection error: ' . mysql_error()); }
164
165 $users = array(
166 'aleksv' => array(
167 'username' => 'aleksv',
168 'user_status' => 'active',
169 'trading' => true,
170 'type_account' => 'demo',
171 'duration' => '3m',
172 'bet_amount' => (int)1,
173 'martingale' => true,
174 'check_signal_currency' => true,
175 'check_signal_from' => true,
176 'check_signal_type' => true,
177 'trade_in_expiration' => false,
178 'martingale_steps' => (int)2,
179 'apikey' => '2101823462323f9e97107f9c9481162d',
180 ),
181 'roman' => array(
182 'username' => 'roman',
183 'user_status' => 'stopped',
184 'trading' => true,
185 'type_account' => 'demo',
186 'duration' => '3m',
187 'bet_amount' => (int)1,
188 'martingale' => true,
189 'check_signal_currency' => true,
190 'check_signal_from' => true,
191 'check_signal_type' => true,
192 'trade_in_expiration' => false,
193 'martingale_steps' => (int)2,
194 'apikey' => '',
195 )
196 );
197
198
199class Request {
200
201 public $username; // Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ
202 public $user_status; // ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ (active или stopped)
203 public $trading; // разрешена Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŽ или нет
204 public $type_account; // тип аккаунта Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ñтавки (demo или real)
205 public $duration; // продолжительноÑть (Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации Ñтавки)
206 public $bet_amount; // Ð¿ÐµÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»ÑŒÐ½Ð°Ñ Ñумма Ñтавки в USD
207 public $martingale; // разрешено иÑпользовать мартингейл или нет на Ñледующий Ñигнал
208 public $check_signal_currency; // ПроверÑть Ñовпадение валюты Ñигнала (true || false)
209 public $check_signal_from; // ПроверÑть Ñовпадение иÑточника Ñигнала (true || false)
210 public $check_signal_type; // ПроверÑть Ñовпадение типа Ñигнала CALL или PUTT (true || false)
211 public $martingale_steps; // количеÑтво колен мартингейл
212 public $trade_in_expiration; // разрешено отправлÑть новый Ñигнал по одной и той-же валютной паре, еÑли Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации предыдущего контракта не вышло и результат не извеÑтен
213 public $apikey; // ключ binaryteam Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ñтавок
214 public $response;
215 public $binaryteam_betid; // идентификатор Ñтавки в Json-ответе на Ð·Ð°Ð¿Ñ€Ð¾Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñтавки (signal)
216 public $contract_id; // идентификатор Ñтавки в ÑервиÑе binaryteam
217 public $symbol; // Ð’Ð°Ð»ÑŽÑ‚Ð½Ð°Ñ Ð¿Ð°Ñ€Ð°, например frxEURUSD или frxAUDCAD
218 public $order_type; // тип ордера ORDER_TYPE_SELL, ORDER_TYPE_SELL_LIMIT, ORDER_TYPE_BUY, ORDER_TYPE_BUY_LIMIT
219 public $signal_type; // Ñигнал Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ может быть только двух типов: PUT или CALL
220
221
222 public function index() {
223
224 echo "Ðто index";
225 /*
226
227 Получаем вÑе Ñтавки отправленные по API из БД и выводим в таблице на Ñтранице.
228 ПоÑле Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½Ð¸ ÑкÑпирации, получаем результат Ñтавки и обновлÑем информацию в БД. При выводе Ñтавок в таблице, у тех Ñтавок, Ð´Ð»Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ñ… Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации не вышло должен работать таймер и отÑчитывать Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾ конца ÑкÑпирации (запроÑом через ajax к методу get_expiration_time каждую Ñекунду - метод опиÑать). Пример таблицы: http://skrinshoter.ru/s/090519/aNY8KwAC
229
230
231 */
232 }
233
234
235public function start() {
236
237 echo "start";
238 /*
239 ПроверÑем, активен пользователь или нет, разрешена Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ Ð¸Ð»Ð¸ нет, еÑть ключ API или нет. ЕÑли пользователь active, Ñ‚Ð¾Ñ€Ð³Ð¾Ð²Ð»Ñ true и еÑть APIKEY выполнÑем программу дальше
240
241 */
242 if ($this->user_status ==='active' && $this->trading === true && !empty($this->apikey)) {
243 $this->sendbet_api(); // отправлÑем Ñигнал на Ñервер API
244 $this->savebet_db(); // СохранÑем информацию о контракте в БД
245 $this->bet_info(); // Получаем информацию(ответ от Ñервера API binaryteam) через 5-10 Ñекунд и обновлÑем информацию о контракте в БД
246
247 }
248
249 }
250
251 public function __construct($params = null) {
252
253 if (!empty($params)) {
254 foreach($params as $key => $value)
255 {
256 $this->$key = $value;
257 }
258 }
259
260 }
261
262 public function sendbet_api() {
263
264
265
266
267
268 // echo "<pre>";
269 // print_r($user);
270 // echo "</pre>";
271
272 isset($_GET['symbol']) ? $this->symbol = $_GET['symbol'] : $this->symbol = '';
273 isset($_GET['order_type'])? $this->order_type = $_GET['order_type'] : $this->order_type = '';
274
275 if ($this->order_type === 'ORDER_TYPE_SELL') {
276 $this->signal_type = 'PUT';
277 } else if ($this->order_type === 'ORDER_TYPE_SELL_LIMIT') {
278 $this->signal_type = 'PUT';
279 } else if ($this->order_type === 'ORDER_TYPE_BUY') {
280 $this->signal_type = 'CALL';
281 } else if ($this->order_type === 'ORDER_TYPE_BUY_LIMIT') {
282 $this->signal_type = 'CALL';
283 } else {
284 $this->signal_type = '';
285 }
286
287 // https://api.sitename.ru/class.php?action=request&request=signal&order_type=ORDER_TYPE_SELL&symbol=frxAUDCAD
288
289
290
291
292 /*
293
294 Что необходимо Ñделать перед отправкой Ñигнала:
295
296 1. Проверить 'trade_in_expiration' => false, // разрешено отправлÑть новый Ñигнал по одной и той-же валютной паре, еÑли Ð²Ñ€ÐµÐ¼Ñ ÑкÑпирации предыдущего контракта не вышло и результат не извеÑтен
297
298 */
299
300
301
302
303
304 $client = new \GuzzleHttp\Client();
305 $response = $client->request('GET', "https://api.binaryteam.ru/?request=signal&key=".$this->apikey."&type_account=".$this->type_account."&bet=".$this->signal_type."&symbol=".$this->symbol."&duration=".$this->duration."&amount=".$this->bet_amount);
306
307 //echo $response->getStatusCode(); # 200
308 //echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8'
309 $response_body = json_decode($response->getBody()->getContents(), true);
310
311 echo "<pre>";
312 print_r($response_body);
313 echo "</pre>";
314
315
316
317
318 }
319
320
321
322
323
324 public function bet_info($binaryteam_betid, $apikey) {
325
326
327 $client = new \GuzzleHttp\Client();
328 $response = $client->request('GET', "https://api.binaryteam.ru/?request=report&key=".$apikey."&id=".$binaryteam_betid);
329 echo $response->getStatusCode(); # 200
330 echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8'
331 echo $response->getBody(); # '{"id": 1420053, "name": "guzzle", ...}'
332 $response_body = json_decode($response->getBody()->getContents());
333
334
335 echo "<pre>";
336 print_r($response_body);
337 echo "</pre>";
338
339
340
341
342
343 $this->__gwt = $gwt[1];
344 $this->__tkn = $tkn[1];
345 $this->__group_id = $group_id[1];
346
347 if(!$form_id[1] or empty($form_id[1]) or !$id[1] or empty($id[1]))
348 {
349 return false;
350 }
351
352 return array('group_id' => $group_id[1], 'form_id' => $form_id[1], 'tkn' => $tkn[1], 'gwt' => $gwt[1], 'id' => $id[1]);
353 }
354
355 private function login() {
356
357 }
358
359 static function auth($username, $password) {
360
361 }
362
363
364
365
366}
367
368
369
370
371
372
373
374
375
376
377
378if ($_GET['action']) {
379 $info = new Request ();
380}
381
382
383
384
385
386
387
388
389
390switch($_GET['action']) {
391 case "install" :
392
393
394 $sql = "CREATE TABLE IF NOT EXISTS `signals_list` (
395 `id` int not null AUTO_INCREMENT,
396 `contract_id` int(30) not null,
397 `symbol` varchar(255) not null,
398 `bet` varchar(255) not null,
399 `is_signal` varchar(255) not null,
400 `time_start` varchar(255) not null,
401 `time_end` varchar(255) not null,
402 `quote_start` varchar(255) not null,
403 `quote_end` varchar(255) not null,
404 `amount` varchar(255) not null,
405 `duration` varchar(255) not null,
406 `payout` varchar(255) not null,
407 `payout_perc` varchar(255) not null,
408 `payment` varchar(255) not null,
409 `result` varchar(255) not null,
410 `result_code` varchar(255) not null,
411 `start` varchar(255) not null,
412 `timeout` varchar(255) not null,
413 `end` varchar(255) not null,
414 `user_id` int(30) not null,
415 `user_name` varchar(255) not null,
416 `signal_provider` varchar(255) not null,
417 `signal_id` varchar(255) not null,
418 `signal_name` varchar(255) not null,
419 `signal_from` varchar(255) not null,
420 `send_telegram` text not null,
421 `send_sms` text not null,
422 `bet_comment` text not null,
423 `timezone` varchar(255) not null,
424 PRIMARY KEY (id)
425 )
426 ";
427
428 $result = $mysqli->query($sql);
429 //print_r($result) ;
430 if ($result) {
431 // echo "Создание таблицы завершено";
432 //header('HTTP/1.1 200 OK');
433 //header('Location: http://'.$_SERVER['HTTP_HOST'].'class.php?action=install');
434 } else {
435 echo "Таблицу Ñоздать не удалоÑÑŒ";
436 }
437
438 // if ($mysqli->query("SHOW TABLES LIKE signals_list")) {
439 // echo "Таблица ÑущеÑтвует в БД";
440 // }
441
442 break;
443
444 case "request" :
445
446 isset($_GET['request']) ? $request = $_GET['request'] : $request = '';
447 if ($request === 'signal') {
448
449 foreach ( $users as $user ) {
450
451 $user = new Request ([
452 'username' => $user['username'],
453 'user_status' => $user['user_status'],
454 'trading' => $user['trading'],
455 'type_account' => $user['type_account'],
456 'duration' => $user['duration'],
457 'bet_amount' => $user['bet_amount'],
458 'martingale' => $user['martingale'],
459 'trade_in_expiration' => $user['trade_in_expiration'],
460 'martingale_steps' => $user['martingale_steps'],
461 'apikey' => $user['apikey'],
462 ]);
463
464 // echo "<pre>";
465 // print_r($user);
466 // echo "</pre>";
467
468 $user->sendbet_api();
469 }
470
471
472
473 }
474
475 break;
476
477 case "dashboard" :
478
479 $info->index();
480 break;
481
482 default :
483
484 $info->index();
485 break;
486}
487
488
489
490
491
492
493/*
494
495{"request":"report","params":{"key":"2101823462323f9e97107f9c9481162d","id":"15095069"},"answer":{"profile":"pro","contract_id":"46557536688","symbol":"frxEURUSD","bet":"PUT","is_signal":"0","time_start":"1557235424","time_end":"1557264224","quote_start":"1.11803","quote_end":"0","amount":"30","payout":"58.23","payout_perc":"94","payment":"58.23","result":"0","result_code":"702","real":{"amount":"0.50","currency":"USD","percent":"0","depo_start":"0.5","depo_min":"0.5","depo_max":"0.5"},"demo":{"amount":"15642.44","currency":"USD","percent":"0","depo_start":"15730.7","depo_min":"15642.4","depo_max":"15732.4"}},"time":{"start":"2019-05-07 18:10:15","timeout":0.02103,"end":"2019-05-07 15:10:15"}}
496
497
498
499
500
501stdClass Object
502(
503 [request] => report
504 [params] => stdClass Object
505 (
506 [key] => 2101823462323f9e97107f9c9481162d
507 [id] => 15095069
508 )
509
510 [answer] => stdClass Object
511 (
512 [profile] => pro
513 [contract_id] => 46557536688
514 [symbol] => frxEURUSD
515 [bet] => PUT
516 [is_signal] => 0
517 [time_start] => 1557235424
518 [time_end] => 1557264224
519 [quote_start] => 1.11803
520 [quote_end] => 0
521 [amount] => 30
522 [payout] => 58.23
523 [payout_perc] => 94
524 [payment] => 58.23
525 [result] => 0
526 [result_code] => 702
527 [real] => stdClass Object
528 (
529 [amount] => 0.50
530 [currency] => USD
531 [percent] => 0
532 [depo_start] => 0.5
533 [depo_min] => 0.5
534 [depo_max] => 0.5
535 )
536
537 [demo] => stdClass Object
538 (
539 [amount] => 15642.44
540 [currency] => USD
541 [percent] => 0
542 [depo_start] => 15730.7
543 [depo_min] => 15642.4
544 [depo_max] => 15732.4
545 )
546
547 )
548
549 [time] => stdClass Object
550 (
551 [start] => 2019-05-07 17:55:27
552 [timeout] => 0.0432
553 [end] => 2019-05-07 14:55:27
554 )
555
556)
557
558
559
560*/