Barion Pixel SMS Gateway PHP Class - SeeMe
We will tell your all the secrets!

SMS Gateway PHP Class

For quick integrations of SeeMe SMS gateway we provide a PHP class. This allows you to connect your system to seeme in a few minutes of coding.

Settings

$method
Type of HTTP calls. Either 'curl' or 'file_get_contents'
$apiUrl
SMS Gateway URL. 'https://seememobile.com/gateway'
$logFileDestination
Path to the log file. Set 'false' if no logging is required.
$format
Callback format. Either 'string', 'xml' or 'json'.

Methods

__construct( $apiKey, $logFileDestination = false )

Constructor

Parameters:

$apiKey
API Key is requred for authentication. Get one at the SMS Gateway Settings page. 
$logFileDestination
Path to the log file. Set 'false' if no logging is required.

sendSMS( $number = null, $message = null, $senderid = '', $reference = null, $callbackParams = null, $callbackURL = null )

Sending SMS.

Parameters:

$number
Recipient's phone number in international format without special characters. Example: 36301234567
$message
            SMS Content. 
$senderid
SMS Sender. If not provided (above or in $params array).
$reference
Freely assignable reference for your message. Will help to identify status updates..
$callbackParams
A list of requested status code updates (example: '1,4,5,6,7' or 'all').
$callbackUrl
Callback URL.

SMS Gateway Parameter List

getBalance()

You can query your current balance at SeeMe.

 

getResult()

You will get the response provided by the Gateway in the requested format. 

 

SeeMeGateway class

<?php

define('GATEWAY_URL', 'https://seememobile.com/gateway');

/**
 * 
 * SeeMe SMS Gateway class
 * 
 * @version 2.0.1 SeeMeGateway
 * @copyright 2013, Dream Interactive Kft.
 * @author 2013 Adam Pinter adam.pinter@dream.hu
 * 
 * @link https://seememobile.com
 * 
 */

/**
 * CHANGELOG
 *  1.0.2 sendSMS() method: removed 0 param @ line: 107
 *  1.0.1 http_build_query() added param arg_separator: '&' @ line: 225
 *  2.0.0 uses API key, new parameter validators
 *  2.0.1 reference validator hotfix
 */

class SeeMeGateway {
	
	/**
   	* Gateway calling method file_get_contents or curl
   	* 
   	* @access private
   	* @var string
   	*/
	private $method 			= 'curl', // curl, file_get_contents
	        $apiUrl 			= GATEWAY_URL,
	        $logFileDestination	= false,
	        $format   			= 'json'; // string, json, xml
            
    #xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	#xx DO NOT EDIT CODE UNDER THIS LINE
	#xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx        
    
    private
            $params   			= array(),
	        $result,
	        $reference,
            $version            = '2.0.1',
            $checksumLength     = 4;
            
	public function __construct( $apiKey, $logFileDestination = false ) {
	
		if(!is_string($apiKey)){
			throw new SeeMeGatewayException('Invalid API key type. Must be string', 1);
		}
	
		$this->params['key'] 	= trim($apiKey);
		
        if(!$this->validateApiKey($this->params['key'])){
			throw new SeeMeGatewayException('Invalid API key', 18);
		}
        
		if($logFileDestination) {
			$this->logFileDestination = $logFileDestination;
        }
	}
	
	/**
   	* Send SMS. Throws an exception on error
   	*
   	* @access public
   	* @param string $number   Mobile phone number in international format (pl. 36201234567)
   	* @param string $message  Message encoded in UTF-8 
   	* @param string $sender   Sender ID
   	* @return void
   	*/
	public function sendSMS( $number, $message, $sender = '', $reference = null, $callbackParams = null, $callbackURL = null ) {
		
		if(!is_string($message)){
			throw new SeeMeGatewayException('Invalid message parameter type. Must be string', 1);
		}
	
		$params = $this->params;
		$params['number']   = trim($number);
		$params['message']  = trim($message);
		
		if(strlen($params['message']) < 1){
		    throw new SeeMeGatewayException('Invalid message parameter.', 1);
		}
		
		if($sender) {
			$params['sender'] = trim($sender);
        }
        
		if($reference) {
			
			if(!is_string($reference) && !is_numeric($reference)){
			    throw new SeeMeGatewayException('Invalid number reference type. Must be string or number', 1);
			}
			
			$params['reference'] = trim($reference);
        }
            
		if($callbackParams){
		   if($callbackParams == "all"){
		   		$params['callback'] = "1,2,3,4,5,6,7,8,9,10";
		   } else if( $this->validateCallbackParams($callbackParams) ) {
		   		$params['callback'] = $callbackParams;
		   } else {
		   		throw new SeeMeGatewayException('Incorrect callback parameter format', 1);
		   }
		}
		   
		if($callbackURL) {
			$params['callbackurl'] = $callbackURL;
        }
		
		if( !is_numeric($params['number']) ){
		  throw new SeeMeGatewayException(
		      "Only numbers are allowed: number",
		      "2"
		    );
		}

		$result = $this->callAPI( $params );
		return $this->parseResult( $result );
	}
	
	public function getBalance() {
	
		$params = $this->params;
		$params['method'] = 'balance';
		
		$result = $this->callAPI( $params );
		return $this->parseResult( $result );
		
	}
  
	public function setIP( $ip ) {
	
	  $params = $this->params;
	  $params['method'] = 'setip';
	  $params['ip']     = trim($ip);
	  
	  if( !$this->validateIP( $ip ) ){
	  	throw new SeeMeGatewayException(
	        "Parameter is invalid: ip",
	        "15"
	      );
	  }
	  
	  $result = $this->callAPI( $params );
	  return $this->parseResult( $result );
	  
	}
	
	/**
   	* Returns the call's result
   	*
   	* @access public
   	* @return string
   	*/
	public function getResult() {
	  return $this->result;
	}
	
	/**
	 * Parse the callback result
	 *
	 * @access private
	 * @param string $result
	 * @return array
	 */
	public function parseResult( $result ) {
	
	  switch ( $this->format ){
	  
	  	case 'string':
	  	
	  		if(!is_string($result)){
		  		throw new Exception("SeeMe Gateway: Wrong return format type. Must be a string");
	  		}
	  	
	  		parse_str( $result, $resultparts );
	  		break;
	  	case 'json':
	  		$resultparts = json_decode($result,true);
	  		break;
	  	case 'xml':
	  		$resultparts = json_decode(json_encode((array)simplexml_load_string($result)),1);
	  		break;
	  	default:
	  		throw new Exception("SeeMe Gateway: Unexpected return format");
	  		break;
	  
	  }
	  
	  
	  $this->result = $resultparts;
	  $this->logToFile($resultparts);
	
	  switch ( @$resultparts['result'] ) {
	
	    case 'OK':
	      // SMS submitted successfully
	      return $resultparts;
	      break;
	
	    case 'ERR':
	      // error during SMS submit
	      throw new SeeMeGatewayException(
	        $resultparts['message'],
	        $resultparts['code']
	      );
	      break;
	
	    default:
	      throw new Exception(
	        'SeeMe Gateway: unimplemented result '.
	        '"' . @$resultparts['code'] . '", ' .
	        '"' . @$resultparts['message'] . '", '.
	        'raw result: "' . $result . '"'
	      );
	      break;
	
	  }
	
	}
	
	private function callAPI( array $params ) {
	
		if(isset($this->format)){
			$params['format'] = $this->format;
		}
		
        $params['apiVersion'] = $this->version; // SeeMe GW api version
        $apiUrl               = $this->apiUrl.'?'.http_build_query( $params, '', '&' );

        $this->logToFile( "----------------------------" );

        $this->logToFile( $this->method . ': ' . $apiUrl );

        switch ( trim($this->method) ) {
            case 'file_get_contents':
                if ( !ini_get('allow_url_fopen') ) {
                    throw new Exception("SeeMe Gateway: can't use allow_url_fopen method.");
                }
                $result = file_get_contents( $apiUrl );
                break;
            case 'curl':
                if ( !extension_loaded('curl') ) {
                    throw new Exception('SeeMe Gateway: CURL not installed on your server');
                }
                $result = $this->callCURL( $apiUrl );
                break;
            default:
                throw new Exception('SeeMe Gateway: unimplemented callingMethod: "' . $this->method . '"');
        }

        if ( $result === false ) {
            throw new Exception( 'SeeMe Gateway: failed to open file_get_contents("' . $apiUrl . '")' );
        }

        return $result;
	}

	private function callCURL( $apiUrl ) {
	
        $cURL = curl_init();

            curl_setopt_array( $cURL, array(
                CURLOPT_URL               => $apiUrl,
                CURLOPT_RETURNTRANSFER    => true,
                CURLOPT_AUTOREFERER       => true,
                CURLOPT_FOLLOWLOCATION    => true,
                // CURLOPT_CONNECTTIMEOUT_MS => 2000,
                // CURLOPT_TIMEOUT           => 10,
                CURLOPT_FAILONERROR       => true,
            ));

        $result     = curl_exec( $cURL );
        $httpcode = curl_getinfo( $cURL, CURLINFO_HTTP_CODE );

        if ( $result === false ) {

            throw new Exception(
                'SeeMe Gateway: CURL ERROR: ' . $httpcode . ', ' . curl_error( $cURL )
            );
        } else {
            return $result;
        }
	}

	/**
   	* Validate callback parameters
   	*
   	* @access private
   	* @param string $params
   	* @return boolean
   	*/
	private function validateCallbackParams($params){
        return preg_match( '/^[0-9]{1,2}(\,[0-9]{1,2})*$/', $params );
	}
	
	/**
   	* Validate IP parameter
   	*
   	* @access private
   	* @param string $ip
   	* @return boolean
   	*/
	private function validateIP($ip){
		return preg_match( "/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/", $ip);
	}
    
    private function validateApiKey($hash) {
        $key = substr($hash, 0, -$this->checksumLength);
        $checksum = substr($hash, -$this->checksumLength);
        return substr(md5($key), 0, $this->checksumLength) == $checksum;
    }
	
	/**
   	* Log to file
   	*
   	* @access private
   	* @param string $string
   	* @return null
   	*/
	private function logToFile( $string ) {
	
	  if ( $this->logFileDestination ) {
	    $f = fopen( $this->logFileDestination, 'a' );
	    if ( !$f )
	      throw new Exception('SeeMe Gateway: failed to fopen( "' . $this->logFileDestination . '" )' );
	
	    if( is_array($string) ){
	    	foreach($string AS $key=>$value){
	    		fputs( $f, date("Y-m-d H:i:s") . ' - ' . $key . ' => ' . $value . "\n" );
	    	}
	    } else {
	    	fputs( $f, date("Y-m-d H:i:s") . ' - ' . $string . "\n" );
	    }
	
	    fclose( $f );
	  }
	}

}


class SeeMeGatewayException extends Exception {
	public function __construct($response,$errorCode) {
		$this->response		= $response;
		$this->errorCode    = $errorCode;
		parent::__construct( $response, $errorCode );
	}
	public function __toString() {
		return __CLASS__ . ": SEEME_GATEWAY_ERROR #{$this->errorCode}, {$this->response}\n";
	}
}



Download

I accept the Terms and Privacy