Commits

Denis Khabarov committed 2e08db3

modified: Smsru.php

Comments (0)

Files changed (1)

 class Piwik_MobileMessaging_SMSProvider_Smsru extends Piwik_MobileMessaging_SMSProvider
 {
 	const SOCKET_TIMEOUT = 15;
-    const BASE_API_URL = 'http://sms.ru/';
-    const CHECK_CREDIT_RESOURCE = 'my/balance';
-    const SEND_SMS_RESOURCE = 'sms/send';
+	const BASE_API_URL = 'http://sms.ru/';
+	const CHECK_CREDIT_RESOURCE = 'my/balance';
+	const SEND_SMS_RESOURCE = 'sms/send';
 	const MAXIMUM_CONCATENATED_SMS = 3;
-    const MAXIMUM_FROM_LENGTH = 11;
-    const ERROR_STRING = 'Error';
+	const MAXIMUM_FROM_LENGTH = 11;
+	const ERROR_STRING = 'Error';
     
     
-    public function verifyCredential($apiKey)
-    {
-      return true;
-    }
+	public function verifyCredential($apiKey){
+		return true;
+	}
 
-    public function sendSMS($apiKey, $smsText, $phoneNumber, $from)
-    {
-        $from = substr($from, 0, self::MAXIMUM_FROM_LENGTH);
-        $smsText = self::truncate($smsText, self::MAXIMUM_CONCATENATED_SMS);
-        $additionalParameters = array(
-            'to'      => str_replace('+', '', $phoneNumber),
-            'text' => $smsText,
-            'partner_id' => 3805,
+	public function sendSMS($apiKey, $smsText, $phoneNumber, $from){
+		$from = substr($from, 0, self::MAXIMUM_FROM_LENGTH);
+		$smsText = self::truncate($smsText, self::MAXIMUM_CONCATENATED_SMS);
+		$additionalParameters = array('to' => str_replace('+', '', $phoneNumber), 'text' => $smsText, 'partner_id' => 3805,
             //'from'    => $from, // Если надо использовать какое-то отдельное имя отправителя, раскоментируйте сами эту строку...
-        );
-
-        $this->issueApiCall($apiKey, self::SEND_SMS_RESOURCE, $additionalParameters);
-    }
+		);
+		$this->ApiCall($apiKey, self::SEND_SMS_RESOURCE, $additionalParameters);
+	}
     
-    private function get_error_info($code) {
+	private function get_error_info($code) {
 			$_SEND_ERRS = array(
 				100 => 'Сообщение принято к отправке. На следующих строчках вы найдете идентификаторы отправленных сообщений в том же порядке, в котором вы указали номера, на которых совершалась отправка.',
 				200	=> 'Неправильный api_id',
 				201	=> 'Не хватает средств на лицевом счету',
 				202 => 'Неправильно указан получатель',
 				203	=> 'Нет текста сообщения',
-				204 =>	'Имя отправителя не согласовано с администрацией',
+				204 => 'Имя отправителя не согласовано с администрацией',
 				205	=> 'Сообщение слишком длинное (превышает 8 СМС)',
 				206	=> 'Будет превышен или уже превышен дневной лимит на отправку сообщений',
 				207	=> 'На этот номер (или один из номеров) нельзя отправлять сообщения, либо указано более 100 номеров в списке получателей',
 				302	=> 'Пользователь авторизован, но аккаунт не подтвержден (пользователь не ввел код, присланный в регистрационной смс)',
 			);
 		if (isset($code) and $_SEND_ERRS[$code]) {
-				return $_SEND_ERRS[$code];
-		
+			return $_SEND_ERRS[$code];
 		} else {
 			return '@get_error_info: ' . $code . ' is not found in _SEND_ERRS. For get more info about this error see API Documentation at http://sms.ru/?panel=api&subpanel=method&show=sms/send';
-		
 		}
 	}
     
-    private function issueApiCall($apiKey, $resource, $additionalParameters = array())
-    {
-        $accountParameters = array('api_id' => $apiKey,);
-        $parameters = array_merge($accountParameters, $additionalParameters);
-        $url = self::BASE_API_URL. $resource . '?' . http_build_query($parameters, '', '&');
-        $timeout = self::SOCKET_TIMEOUT;
-        $result = Piwik_Http::sendHttpRequestBy(
-            Piwik_Http::getTransportMethod(),
-            $url,
-            $timeout,
-            $userAgent = null,
-            $destinationPath = null,
-            $file = null,
-            $followDepth = 0,
-            $acceptLanguage = false,
-            $acceptInvalidSslCertificate = true
-        );
-
+	private function ApiCall($apiKey, $resource, $additionalParameters = array()) {
+		$accountParameters = array('api_id' => $apiKey,);
+		$parameters = array_merge($accountParameters, $additionalParameters);
+		$url = self::BASE_API_URL. $resource . '?' . http_build_query($parameters, '', '&');
+		$timeout = self::SOCKET_TIMEOUT;
+		$result = Piwik_Http::sendHttpRequestBy(Piwik_Http::getTransportMethod(), $url,$timeout,$userAgent = null,$destinationPath = null,$file = null,$followDepth = 0,$acceptLanguage = false,$acceptInvalidSslCertificate = true);
+        $info=preg_split('/\n/',$result);
         if (strpos($result, self::ERROR_STRING) !== false) {
-            throw new Piwik_MobileMessaging_APIException(
-                'SMS.ru API returned the following error message : ' . $result
-            );
-        } elseif ((int)$result !== 100){
-				throw new Piwik_MobileMessaging_APIException(
-					'SMS.ru API returned the following error code: ' . $this->get_error_info($result) . '.' 
-				);
+            throw new Piwik_MobileMessaging_APIException('SMS.ru API returned the following error message : ' . $info[0]);
+		} elseif ($info[0] !== '100'){
+			throw new Piwik_MobileMessaging_APIException('SMS.ru API returned the following error code: ' . $this->get_error_info($info[0]) . '.');
 		}
-        
-
-        return $result;
+		return $result;
     }
-    public function getCreditLeft($apiKey)
-    {
-		return $this->issueApiCall($apiKey, self::CHECK_CREDIT_RESOURCE);
+	public function getCreditLeft($apiKey){
+		$credit = $this->ApiCall($apiKey, self::CHECK_CREDIT_RESOURCE);
+		$c2=preg_split('/\n/',$credit);
+		if (is_array($c2) and $c2[0] == '100'){
+			return 'Balance: '.$c2[1] .' RUB';
+		}
        // return 1;
-    }
+	}
 }