/** * 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; }