У меня Raspberry Pi подключен к платежному терминалу NFC. Я успешно отправил транзакции через командную строку. Когда я пытаюсь использовать ту же самую вещь в PHP, используя exec () или system (), она зависает.
Предполагается, что произойдет следующее: я отправляю команду с URL, ценой в центах и тайм-аутом для ожидания подтверждения после оплата сделана.
Я нажимаю ввод, команда отправляется и через ~ 4 секунды на платежном терминале появляется запрос на оплату. Я нажимаю на нее своей картой NFC, и на консоли Raspberry Pi появляется надпись «УТВЕРЖДЕНО». Теперь мне нужно подтвердить это нажатием «c», иначе оно будет аннулировано. На данный момент меня не волнует последняя часть, но об этом тоже позаботятся. Команда, которую я посылаю, является файлом .exe, но она работает с использованием режима моно.
Команда, которую я использую:
printf 'c' | mono /home/pi/Desktop/PayterPay/PayterPay.exe -u $url -a $price -t $timeout
Это работает, как описано выше. printf ‘c’ должен позаботиться о подтверждении, которое также работает.
Теперь я хочу использовать его в сценарии PHP, поэтому я стараюсь
$command="printf 'c' | mono /home/pi/Desktop/PayterPay/PayterPay.exe -u $url -a $price -t $timeout";
exec("$command", $out, $return_code);
Однако при запуске этого скрипта он будет зависать / ждать около минуты. Затем все продолжается как обычно, я получаю платеж, я плачу, он подтверждается и подтверждает, что он действительно подтвержден.
Я предполагаю, что это как-то связано с тем, как system () и exec () (я пробовал оба) обрабатывать команды, но я не понимаю, почему такая большая задержка. Чем отличается прямой запуск из командной строки от использования моего сценария PHP?
Я запускаю команду ‘mono’ через exec () и system (), она имеет задержку около минуты. Это не происходит в командной строке и не происходит задержки при выдаче другой команды. Кроме того, он делает все, что должен. Как избавиться от этой задержки?
Если я запускаю скрипт из командной строки, он работает просто отлично. Запуск его в браузере вызывает длительную задержку. Я подумал, что это может быть связано с тем, что через браузер он запускается через пользовательские www-данные. Но переключение на www-данные в командной строке и запуск скрипта по-прежнему работает без задержки. Так что я думаю, что это также не причина, почему это отстает.
Задача ещё не решена.
Других решений пока нет …