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:----l5+e8Q9+rxs4rNCZrvmcD0t3akYpyaHHPsuDOTqCqVMUDb1BBiQjjzRrvIpVkY1mHq9u9S46M4u1PC7xtNRUI8UVUPDXQEMdxpUJZ/+NWDQ1zKvF0bZAKVKg99Iqwksjs5NIQtkW4bGgsACi5y5kk1OCnOg144rtoU5IS1FO68P0SSqVvFqk631z0WqoTZXY4XgP8Ueplx2cuwkz+5JnYTeN4J2v8GjUR0Vtdev9ESz508eGlihRH+6OobR4tm2dht8LwGdPpKNCsH6jMem/gGV3Qh6tLJ5eA3yqVquJO42PoLMGJY12lDI0VxMtjY9/JZTLvhgXWReUfymo/ll+2bFNWcOHhk3+fcbcJ/p1pbbKdkeGI1/IfQRgMAWcc1BCQ2et+6BK2M/3cnQSxEs6IswNVZihOZKLn4hzw0nI3wiezrDOKbQxwl3CW5+YHYNDYG8wSLtERR6TSE8pVGQq1ZxalBcOZ/XPh3BYVjTITe6vNZdmrPBAreJPhmz7ANKRbDJLpdxioRq3R4hmb5PmQlcRoGpG5q7XgoQO+AkrlsAM40iyM02+1VVlvlPVJih2pimy7fpzbHbbAoADSbsbEPYkECuJtyCOk/WAWmgr4DfBzwQlmUUxDq5+/3yehpeLB3FtxPPbIKA3jy6R1FdV4klY9qFySiwpfWiktwNHfJw=----ATTACHMENT:----MjQyOTYzNzMzNzk4MjM3NSAyNDk2NjIzMjA4NjYyNjg5IDYyMzExODQzMTg0MDYzMzc=