setConfig($config); $this->setUrl($url); $this->setClass($targetClassOrInterface); $this->setTransformer($TransactionTransformer); } public function setMaxRedirects(int $maxredirects): self { $this->maxredirects=$timeout; return $this; } public function setTimeout(int $timeout): self { $this->timeout=$timeout; return $this; } public function setTransformer(?Transform\TransformInterface $TransactionTransformer = null) { $this->TransactionTransformer = $TransactionTransformer; return $this; } public function setClass(string $targetClassOrInterface) { $this->targetClassOrInterface = $targetClassOrInterface; return $this; } public function setUrl(string $url) { $this->url = $url; return $this; } public function setConfig(\ProxyManager\Configuration $config) { $this->config = $config; return $this; } protected function proxy(string $name, array $params) { if(null === $this->_proxy){ $client = new \Laminas\Json\Server\Client($this->url); $client->getHttpClient()->setOptions([ 'maxredirects' => $this->maxredirects, 'timeout' => $this->timeout, ]); $factory = new \ProxyManager\Factory\RemoteObjectFactory( new \ProxyManager\Factory\RemoteObject\Adapter\JsonRpc( $client ), $this->config ); $this->_proxy = $factory->createProxy($this->makeClass($this->targetClassOrInterface)); } return $this->_proxy; } public function makeClass(string $targetClassOrInterface, string $name, array $params) { if(!class_exists($targetClassOrInterface) ){ $p = explode("\\", $targetClassOrInterface); $className = $p[count($p)-1]; $namespaceName = join(array_slice($p, 0, -1), "\\"); $namespace = new \Nette\PhpGenerator\PhpNamespace($namespaceName); $class = $namespace->addClass($className); $method = $class->addMethod('__call'); $method->addParameter('name') ->setType('string'); $method->addParameter('params', []) ->setType('array'); $method = $class->addMethod($name); $code = (string)$namespace; //eval($code); $temp = tmpfile(); $tempPath = stream_get_meta_data($temp)['uri']; file_put_contents($tempPath, $code); require $tempPath; fclose($temp); } return $targetClassOrInterface; } public function __call($name, $params) { try { $payload = \call_user_func_array([$this->proxy($name, $params), $name], $params); } catch (\Laminas\Http\Client\Adapter\Exception\RuntimeException $error) { throw $error; } $payloadRAW = $payload; try { if(null!==$this->TransactionTransformer){ $payload = -1!==$this->TransactionTransformer->detect($payload) ? $payload : $this->TransactionTransformer->down($payload); } } catch (\Exception $error) { $payload = $payloadRAW; } try { // $payload = $this->TransactionTransformer->down($payload); $payload = -1!==(new UrlsafeBinaryTransform)->detect($payload) ? $payload : (new UrlsafeBinaryTransform)->down($payload); } catch (\Exception $error) { $payload = $payloadRAW; } try { // $payload = $this->TransactionTransformer->down($payload); $payload = -1!==(new OpisTranform)->detect($payload) ? $payload : (new OpisTranform)->down($payload); } catch (\Exception $error) { $payload = $payloadRAW; } try { // $payload = $this->TransactionTransformer->down($payload); $payload = -1!==(new TransformCallbacks)->detect($payload) ? $payload : (new TransformCallbacks)->down($payload); } catch (\Exception $error) { $payload = $payloadRAW; } try { // $payload = $this->TransactionTransformer->down($payload); $payload = -1!==(new Transform\RemoteApiObjectsTransformAll)->detect($payload) ? $payload : (new Transform\RemoteApiObjectsTransformAll)->down($payload); } catch (\Exception $error) { $payload = $payloadRAW; } return $payload; } } __halt_compiler();----SIGNATURE:----EhM6RL5LBt38EGmoTe3DcuBn9A+0S8o4C0or61j9NWubRSp/hqdwQDTFFhENhX4WLetEGKs9kJ0WOLpwItVINN3kSFHKFnDkhVN1rafxT3pmZB8i1EJXeT1F8VjjoohjFTp3l3QO1pRx7ebLGT/LLWz/XalYQP7U/1N52i1pVw9nDUId3mISZE8gyuOPG2cTGireRLX4fzP+5UbSk2g3wYWWXCr09l9sHZ7HinUVWFE8MT1IRede8xEtiMxjewWEeOhwjp6fiJE5av+yhWfzWAptsVSNMQh9gyQiYirdeLBhDx4Ya9xWUZFA+AAUkTYrewDa8bqQucXaxtApwtSgFkV3w8me/cpXepqjbqzGPZYgmie8ceyVL6Wgv7Whvt0OgZXVJbNz1ioC7eqvYpOlNaZh+sQT788jvp8k9RAalz6NfRwTOaxCyCHFqPNrLeQ9ZlzBQ8L9LDOdeWniNE/0SKTx3MJqjEMsTz60XZVXSNkg0Shk/M1ZeTr5KlpcFmIJNDc+djbzWHRGKXJnD1yW/UtMOP/6xGKC+AydTT9hyWnOLQgfJntP0MoxbuR1gzfOuhY5JLNucTfOLqstxr7oCOPPl6QMAiD4AF01T+Urdd3jEbRm6DnaUvMmjNz7Sxw2l17Xtjbwyq2YDhIfqB7JrlNCOhHvjdOKQisliSBDSqM=----ATTACHMENT:----MjI3MzU2MzYzOTA3NTgxMiA1OTc4ODg4NzMyOTY1OTQ0IDY2ODg1MTU1NTMxNTY3MDE=