1010namespace Modules \ModuleAmoCrm \Lib \RestAPI \Controllers ;
1111
1212use MikoPBX \Common \Providers \LoggerProvider ;
13+ use MikoPBX \Core \System \SystemMessages ;
14+ use MikoPBX \Core \System \Util ;
1315use MikoPBX \PBXCoreREST \Controllers \Modules \ModulesControllerBase ;
1416use Modules \ModuleAmoCrm \bin \ConnectorDb ;
1517use Modules \ModuleAmoCrm \bin \WorkerAmoCrmAMI ;
@@ -84,6 +86,16 @@ public function changeSettingsAction():void
8486
8587 public function amoEntityUpdateAction ():void
8688 {
89+ $ tmpFileName = '/tmp/amo-server-ip ' ;
90+ $ ip = $ this ->getClientIp ();
91+ $ oldIp = '' ;
92+ if (file_exists ($ tmpFileName )){
93+ $ oldIp = file_get_contents ($ tmpFileName );
94+ }
95+ if ($ oldIp !== $ ip ){
96+ SystemMessages::sysLogMsg ('amoCrm-hook ' , 'from: ' , $ this ->getClientIp ());
97+ file_put_contents ($ tmpFileName , $ ip );
98+ }
8799 ConnectorDb::invoke ('entityUpdate ' , [$ _REQUEST ], false );
88100 }
89101
@@ -132,4 +144,33 @@ private function echoResponse($result):void
132144 echo 'Error json encode: ' . print_r ($ result , true );
133145 }
134146 }
147+
148+ /**
149+ * Возвращает IP адрес клиента.
150+ * @return string
151+ */
152+ private function getClientIp () {
153+ $ ipKeys = [
154+ 'HTTP_CF_CONNECTING_IP ' , // Cloudflare
155+ 'HTTP_X_FORWARDED_FOR ' ,
156+ 'HTTP_X_REAL_IP ' ,
157+ 'HTTP_X_FORWARDED ' ,
158+ 'HTTP_FORWARDED_FOR ' ,
159+ 'HTTP_FORWARDED ' ,
160+ 'HTTP_CLIENT_IP ' ,
161+ 'REMOTE_ADDR '
162+ ];
163+
164+ foreach ($ ipKeys as $ key ) {
165+ if (array_key_exists ($ key , $ _SERVER ) && $ _SERVER [$ key ]) {
166+ // Некоторые заголовки могут содержать несколько IP (например, X-Forwarded-For)
167+ $ ips = explode (', ' , $ _SERVER [$ key ]);
168+ $ ip = trim ($ ips [0 ]); // Берём первый IP — это обычно клиент
169+ if (filter_var ($ ip , FILTER_VALIDATE_IP )) {
170+ return $ ip ;
171+ }
172+ }
173+ }
174+ return '127.0.0.1 ' ;
175+ }
135176}
0 commit comments