Как управлять кассой на PHP

К сожалению просто сделать тестовую страницу на своем сайте и посылать 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);