/** * Распарсить email и получить массив данных * * @param mixed $forced_operation_id если установлен - id операции устанавливаемый в ручную * @return array|int в случае ошибки */ public function getData($forced_operation_id = false) { // Последние 4 цифры карты preg_match('/' . $this->_parser->getAccountRegexp() . '/im', $this->_mail, $matches); $lastFourDigits = isset($matches[1]) ? $matches[1] : false; // Сумма платежа preg_match('/' . $this->_parser->getTotalRegexp() . '/im', $this->_mail, $matches); $amount = isset($matches[1]) ? $matches[1] : false; // Вычищаем левые символы в сумме $amount = preg_replace("/[^\\d\\.]+/", "", $amount); // Детали операции preg_match('/' . $this->_parser->getDescriptionRegexp() . '/im', $this->_mail, $matches); if (isset($matches[0])) { unset($matches[0]); } $description = count($matches) ? implode(" ", $matches) : ""; // Направление движения средств (тип) $type = $this->_parser->getType() ? Operation::TYPE_PROFIT : Operation::TYPE_EXPENSE; $operationData = array('email' => $this->_to, 'amount' => (string) $amount, 'description' => trim($description), 'type' => (string) $type, 'account' => (string) $lastFourDigits, 'source' => substr($this->_parser->getEmailSource()->getName(), 0, 4) . $lastFourDigits, 'id' => $forced_operation_id ? $forced_operation_id : uniqid()); return $operationData; }