예제 #1
0
 /**
  * @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;
 }