/** * @param string $operation * @param DataPacket $data * @param array $files * * @return string */ public function send($operation, DataPacket $data, $files = [], $decode = true) { if (!$this->ready()) { throw new \RuntimeException('Invalid parameters'); } $data->addRequiredPair('Type', $operation); $data->addRequiredPair('terminalID', $this->terminal); $data->addRequiredPair('TerminalID', $this->terminal); if (!@$data->getRequiredItem('Password')) { $data->addRequiredPair('Password', $this->password); } $data->addRequiredPair('TimePacket', time()); $data = $data->serializeToString(); $data = base64_encode($data); $data = str_replace(['+', '/'], ['-', '_'], $data); $send = [['name' => 'destination', 'contents' => $data], ['name' => 'Hash', 'contents' => md5($data)]]; if (!empty($files)) { foreach ($files as $name => &$file) { $send[] = ['name' => $name, 'contents' => $handle = fopen($file, 'r')]; $file = [$handle, $file]; } } $send = new MultipartStream($send); $request = new Request('POST', $this->host, ['Content-Type' => 'multipart/form-data; boundary=' . $send->getBoundary()], $send); $return = $this->getResponse($request, $decode); foreach ($files as $name => $file) { fclose($file[0]); unlink($file[1]); } return $return; }