/** * @param string $number * @param mixed $content * @param boolean $isContentConfidentially * @param Logic_Service_Multiinfo_Params $params * @throws Logic_WebService_Sms_Exception * @return Logic_Service_Multiinfo_Response_Container */ public function handle($number = null, $content = null, $isContentConfidentially = false, Logic_Service_Multiinfo_Params $params = null) { $recipient = new Logic_WebService_Sms_Recipient($number); // jezeli to NIE jest produkcja sprawdzam, czy numer jest na liscie // numerow tel. bezpiecznych do wykonania testow if (!$this->_environment->checkStatus()) { $recipient->checkNumberOnWhiteList(); } $content = new Logic_WebService_Sms_Content($content, $isContentConfidentially); // sprawdzam na liscie numerow zablokowanych do wysylki dla tej uslugi if ($recipient->checkNumberOnBlackList($this->_client->getParams()->id)) { $model = new SmsBlacklistStorage(); $model->addSms($recipient->getRecipient()->id, $this->_client->getParams()->id, $this->_service->getParams()->id, $content->getHash(), $content->getContentToLog()); throw new Logic_WebService_Sms_Exception('Proba wyslania sms na numer obecny na blacklist: ' . $this->_number, 417); } // test limitow ilosciowych miesiac/dzien $recipient->checkLimit($this->_client, $this->_service); // test numeru na limit ilosciowy sms z dana trescia $recipient->checkLimitByContent($this->_client, $this->_service, $content); // jesli wszystko jest ok, probuje wyslac sms if ($this->_service->getParams()->use_db) { $multiinfo = new Logic_Service_Multiinfo_ToDb($this->_service->getParams()->service_login, $this->_service->getParams()->service_password); } else { $multiinfo = new Logic_Service_Multiinfo($this->_service->getParams()->service_login, $this->_service->getParams()->service_password, $this->_service->getParams()->new_api); } $contentLenght = $content->countContentLenght(); if ($contentLenght > 1377) { // maksymalny rozmiar sms long throw new Logic_WebService_Sms_Exception('Przekroczono limit maksymalnego rozmiaru sms (max. 1377; wiadomosc: ' . $contentLenght . ')', 423); } elseif ($contentLenght > 160) { // sms long $handler = new Logic_Service_Multiinfo_Response(new Logic_Service_Multiinfo_Response_SendSmsLong()); $response = $handler->handle($multiinfo->sendsmslong($this->_service->getParams()->special_id, $recipient->getNumber(), $content->getContent(), $params->validTo, $params->delivNotifRequest, $params->advancedEncoding, $params->deleteContent)); } elseif ($contentLenght > 0 && $contentLenght <= 160) { // sms standard $handler = new Logic_Service_Multiinfo_Response(new Logic_Service_Multiinfo_Response_SendSms()); $response = $handler->handle($multiinfo->sendsms($this->_service->getParams()->special_id, $recipient->getNumber(), $content->getContent(), $params->validTo, $params->delivNotifRequest, $params->zeroclass, $params->advancedEncoding, $params->deleteContent)); } else { // z jakiegos powodu wiadomosc jest pusta (nie podano tresci, pusty szablon, ogolnie awaria) throw new Logic_WebService_Sms_Exception('Proba wyslania pustego sms (brak tresci przygotowanej do wysylki)', 510); } $model = new SmsStorage(); $model->addSms($recipient->getRecipient()->id, $this->_client->getParams()->id, $this->_service->getParams()->id, $content->getHash(), $content->getContentToLog(), $response); $smsLog = new Logic_WebService_Sms_Log(); if ($response->status == true) { // wysylanie sms zakonczylo sie sukcesem $smsLog->log('Wyslano SMS', 5, $response->toArray()); } else { // wysylanie sms zakonczylo sie bledem $smsLog->log('Blad bramki SMS', 3, $response->toArray()); $this->_errorHandler($response->errorCode, $response->errorMessage, $this->_service->getParams()->id); } return $response; }
private function sendSms($service_id, $number = null, $content = null, $isContentConfidentially = false, Logic_Service_Multiinfo_Params $params = null) { $recipient = new Logic_WebService_Sms_Recipient($number); $content = new Logic_WebService_Sms_Content($content, $isContentConfidentially); $this->_service = new Logic_WebService_Element_Service(); $this->_service->getService($service_id); if ($this->_service->getParams()->use_db) { $multiinfo = new Logic_Service_Multiinfo_ToDb($this->_service->getParams()->service_login, $this->_service->getParams()->service_password); } else { $multiinfo = new Logic_Service_Multiinfo($this->_service->getParams()->service_login, $this->_service->getParams()->service_password, $this->_service->getParams()->new_api); } $contentLenght = $content->countContentLenght(); if ($contentLenght > 1377) { // maksymalny rozmiar sms long throw new Logic_WebService_Sms_Exception('Przekroczono limit maksymalnego rozmiaru sms (max. 1377; wiadomosc: ' . $contentLenght . ')', 423); } elseif ($contentLenght > 160) { // sms long $handler = new Logic_Service_Multiinfo_Response(new Logic_Service_Multiinfo_Response_SendSmsLong()); $response = $handler->handle($multiinfo->sendsmslong($this->_service->getParams()->special_id, $recipient->getNumber(), $content->getContent(), $params->validTo, $params->delivNotifRequest, $params->advancedEncoding, $params->deleteContent)); } elseif ($contentLenght > 0 && $contentLenght <= 160) { // sms standard $handler = new Logic_Service_Multiinfo_Response(new Logic_Service_Multiinfo_Response_SendSms()); $response = $handler->handle($multiinfo->sendsms($this->_service->getParams()->special_id, $recipient->getNumber(), $content->getContent(), $params->validTo, $params->delivNotifRequest, $params->zeroclass, $params->advancedEncoding, $params->deleteContent)); } else { // z jakiegos powodu wiadomosc jest pusta (nie podano tresci, pusty szablon, ogolnie awaria) throw new Logic_WebService_Sms_Exception('Proba wyslania pustego sms (brak tresci przygotowanej do wysylki)', 510); } $smsLog = new Logic_WebService_Sms_Log(); if ($response->status == true) { // wysylanie sms zakonczylo sie sukcesem $smsLog->log('Wyslano SMS', 5, $response->toArray()); } else { // wysylanie sms zakonczylo sie bledem $smsLog->log('Blad bramki SMS', 3, $response->toArray()); throw new Logic_WebService_Sms_Exception('Blad bramki SMS: ' . $response->errorCode . ' ' . $response->errorMessage, 512); } return $response; }
/** * @param array $numbers * @param mixed $content * @param string $startDate * @throws Logic_WebService_Sms_Exception * @return Logic_Service_Multiinfo_Response_Container */ public function handle(array $numbers = array(), $content = null, $startDate = null) { $timeLimit = 30; // zabezpieczenie przed przekroczeniem limitu czasu wykonywania skryptu if ($startDate) { $validator = new Logic_Validate_DdMMyyHHmmss(); if (!$validator->isValid($startDate)) { throw new Logic_WebService_Sms_Exception('Nieprawidlowy format daty/czasu: ' . $startDate . '/ddMMyyHHmmss', 453); } } $content = new Logic_WebService_Sms_Content($content); $toSend = array(); $toReport = array(); if (empty($numbers)) { throw new Logic_WebService_Sms_Exception('Nie podano numerow do rozsylki', 450); } foreach ($numbers as $number => $individualContent) { set_time_limit($timeLimit + 30); try { $recipient = new Logic_WebService_Sms_Recipient($number); if (!$this->_environment->checkStatus()) { $recipient->checkNumberOnWhiteList(); } if ($recipient->checkNumberOnBlackList($this->_client->getParams()->id)) { $model = new SmsBlacklistStorage(); $model->addSms($recipient->getRecipient()->id, $this->_client->getParams()->id, $this->_service->getParams()->id, $content->getHash(), $content->getContentToLog()); continue; } $recipient->checkLimit($this->_client, $this->_service); $numberContent = $individualContent ? new Logic_WebService_Sms_Content($individualContent) : $content; $recipient->checkLimitByContent($this->_client, $this->_service, $numberContent); if (key_exists(strval($recipient->getNumber()), $toSend)) { throw new Logic_WebService_Exception('Zdublowny numer na liscie wysylki: ' . $recipient->getNumber(), 451); } $toSend[strval($recipient->getNumber())] = $individualContent ? $numberContent->getContent() : null; unset($recipient); unset($numberContent); } catch (Logic_WebService_Exception $e) { $toReport[] = array('number' => $number, 'content' => $individualContent, 'reason' => $e->getMessage()); } } if (empty($toSend)) { throw new Logic_WebService_Sms_Exception('Brak numerow do rozeslania - zaden nie przeszedl weryfikacji', 452); } else { $multiinfo = new Logic_Service_Multiinfo($this->_service->getParams()->service_login, $this->_service->getParams()->service_password, $this->_service->getParams()->new_api); $handler = new Logic_Service_Multiinfo_Response(new Logic_Service_Multiinfo_Response_Package()); $response = $handler->handle($multiinfo->package($this->_service->getParams()->special_id, $toSend, $content->getContent(), false, $startDate)); $response->report = $toReport; $smsLog = new Logic_WebService_Sms_Log(); if ($response->status == true) { $modelPackage = new SmsPackage(); $packageID = $modelPackage->addPackage(array('packageid' => $response->packageId, 'start_date' => $startDate)); } else { $this->_errorHandler($response->errorCode, $response->errorMessage, $this->_service->getParams()->id); } $modelStorage = new SmsStorage(); foreach ($toSend as $number => $individualContent) { set_time_limit($timeLimit + 30); $recipient = new Logic_WebService_Sms_Recipient($number); $modelStorage->addSms($recipient->getRecipient()->id, $this->_client->getParams()->id, $this->_service->getParams()->id, $individualContent ? md5($individualContent) : $content->getHash(), $individualContent ? $individualContent : $content->getContentToLog(), $response, $packageID); } return $response; } }
/** * @param Logic_WebService_Element_Client $client * @param Logic_WebService_Element_Service $service * @param Logic_WebService_Sms_Content $content * @throws Logic_WebService_Sms_Exception * @return void */ public function checkLimitByContent(Logic_WebService_Element_Client $client, Logic_WebService_Element_Service $service, Logic_WebService_Sms_Content $content) { $model = new SmsCounter(); $clientParams = $client->getParams(); $serviceParams = $service->getParams(); $counterContent = $model->getCounterWithContent('day', $this->_recipient->id, $clientParams->id, $serviceParams->id, $content->getHash()); if ($counterContent && $serviceParams->limit_day_duplicate) { $validatorDay = new Logic_Validate_ExpiryDay(); if ($serviceParams->limit_day_duplicate <= $counterContent->subcounter && !$validatorDay->isValid($counterContent->count_at_first)) { throw new Logic_WebService_Sms_Exception('Osiagnieto limit dzienny dubli (' . $serviceParams->limit_day_duplicate . ') na usluge ' . $serviceParams->service_name . ' dla klienta ' . $clientParams->client_name, 432); } } }