/**
  * Process logic by payment Type
  *
  * @throws ProcessorException
  */
 private function doProcessType()
 {
     $type = new Type($this->payment->type, $this->payment->toArray());
     switch ($type->sid()) {
         case Type::CITY:
             break;
         case Type::FEE:
             break;
         case Type::CHECK:
             // todo check 'check' request
             // register check request
             $this->payment->status = Status::ENABLED;
             break;
         case Type::PAY:
             // pay after 'check' request
             $payment = self::findCheck($this->payment->term, $this->payment->city, $this->payment->amount, $this->payment->to, Status::ENABLED);
             if (!$payment) {
                 throw new ProcessorException(ProcessorException::RC_CHECK_NOT_FOUND);
             }
             // close 'check' request
             $payment->status = Status::PAY;
             $payment->saveByType();
             // processed 'payment' request
             $this->payment->status = Status::PROCESSED;
             $this->payment->code = uniqid();
             break;
         case Type::CANCEL:
             // find pay in status 'processed'
             $payment = self::findPayTo($this->payment->term, $this->payment->code, $this->payment->to, Status::PROCESSED);
             if ($payment) {
                 // cancel 'pay' request
                 $payment->status = Status::CANCELED;
                 $payment->saveByType();
                 // save cancel request in 'processed'
                 $this->payment->status = Status::PROCESSED;
                 $this->payment->amount = $payment->amount;
                 $this->payment->name = $payment->name;
                 $this->payment->to = $payment->to;
             } else {
                 throw new ProcessorException(ProcessorException::RC_PAY_NOT_FOUND);
             }
             break;
         case Type::STATUS:
             // status for pay
             $payment = self::findPayTo($this->payment->term, $this->payment->code, $this->payment->to);
             // init data from 'pay' request into current 'status' request
             if ($payment) {
                 $this->payment->id = $payment->id;
                 $this->payment->status = $payment->status;
                 $this->payment->amount = $payment->amount;
                 $this->payment->to = $payment->to;
                 $this->payment->name = $payment->name;
             } else {
                 throw new ProcessorException(ProcessorException::RC_PAY_NOT_FOUND);
             }
             break;
     }
     return '00';
 }
 private function getResponseData()
 {
     $data = array('term' => $this->payment->item()->term, 'type' => $this->payment->item()->type, 'code' => $this->payment->item()->code, 'amount' => $this->payment->item()->amount, 'cur' => $this->payment->item()->cur, 'status' => $this->payment->item()->status, 'time' => Time::ts());
     Secure::sign($data, $this->type->sid(), $this->term->secret);
     return $data;
 }