К сожалению просто сделать тестовую страницу на своем сайте и посылать JSON данные через js ajax на IP кассы НЕ получится, т.к. в браузерах срабатывает защита CORS (доменные имена разные):
Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://192.168.1.125:4444/fr/api/v2/PrintLog. (Причина: не удалось выполнить запрос CORS
Ajax запросы можно слать ТОЛЬКО на тот же домен
Например : с http://kkmspb.ru на http://192.168.1.125 на скрипте js не получится передать данные.
Сами HTML формы в формате JSON данные посылать тоже не могут.
Интерактивно (ручками) через кнопку sumbit формы получится переход с http://kkmspb.ru на http://192.168.1.125, но данные никак не будут в формате JSON.
Что делать?Что делать?
Для проверки работы протокола для управления кассой по TCP-IP пробовали следующий метод:
на сервере kkmspb.ru в .htaccess у нас примерно настроено так :
RewriteCond %{SERVER_PORT} ^4444$
RewriteRule .* http://xxx.xxx.xxx.xxx:3333 [L]
где xxx.xxx.xxx.xxx внешний ip сервера нашей организации, за которым находится реально наша Кассатка 7.
На xxx.xxx.xxx.xxx естественно надо пробросить порт 4444 извне на внутренний 192.168.1.125 (ip кассы)
И это не сработает , т.к. RewriteRule вернет сразу нашему браузеру переход на другой ip (xxx.xxx.xxx.xxx) прям в командной строке (увидите). И браузер скажет CORS.
Остается только вариант делать второй запрос через CURL
По начальным символам url /fr/ переходим на спец.страницу , где через curl делаем запрос на нашу кассу
RewriteCond %{REQUEST_URI} ^/fr/(.*)$
RewriteRule .* /test_redirect.php [L]
И тут браузер НЕ заподозрит ничего. Ибо вы же на своем сервере программируете, значит знаете , что делаете. Зона ответственности браузера заканчивается и наступает ваша ответственность . В итоге запрос сможет быть выполнен и ответ будет передан обратно браузеру.
Например JSON данные такого формата выполнятся нормально:
"RequestId":"m05m3oxdyts8s80g4osgssgk800g8sw","Password":30,"Request":{"LogSize":"100"}}
Обратите внимание"Password":30 , значение 30 нельзя помещать почему-то в кавычки.
спец. страница с Curl у нас примерно такая:
$json=file_get_contents("php://input");
//echo "\n file_get_contents=\n".$json."\n";
// $json="{\"RequestId\":\"sdfds84767846534534\",\"Password\":30,\"Request\":{\"LogSize\":\"100\"}}"; этот сработает
$url = 'http://xxx.xxx.xxx.xxx:4444'.$_SERVER["REQUEST_URI"];
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
$text = curl_exec($curl);
$i= curl_getinfo($curl);
if($i['http_code']!=200)
{
echo "ERROR http_code!=200[".$i['http_code']."]";
}
curl_close($curl);