208 lines
6.1 KiB
PHP
208 lines
6.1 KiB
PHP
<?php
|
|
class Tm4bSms {
|
|
|
|
const __TM4B_SMS_HTTP_HOST__ = 'www.tm4b.com';
|
|
const __TM4B_SMS_HTTP_SERVICE__ = '/client/api/http.php';
|
|
const __TM4B_SMS_HTTP_METHOD__ = 'GET';
|
|
const __TM4B_SMS_MESSAGE_TYPE__ = 'broadcast';
|
|
|
|
const __TM4B_SMS_CHECKBALANCE_TYPE__ = 'check_balance';
|
|
const __TM4B_SMS_CHECKROUTE_TYPE__ = 'check_destination';
|
|
const __TM4B_SMS_CHECKSTATUS_TYPE__ = 'check_status';
|
|
|
|
|
|
// Keep the Query String for HTTP
|
|
private $_httpQS = '';
|
|
|
|
public $msg;
|
|
private $_to = array();
|
|
|
|
private $errors;
|
|
private $_user;
|
|
private $_pass;
|
|
private $_route;
|
|
private $_from;
|
|
|
|
private $_id;
|
|
|
|
function __construct($user, $pass, $route, $from = 'tm4b', $to = array(), $message = '')
|
|
{
|
|
$this->msg = $message;
|
|
$this->_user = $user;
|
|
$this->_pass = $pass;
|
|
$this->_route = $route;
|
|
$this->_from = $from;
|
|
|
|
foreach ($to as $num)
|
|
{
|
|
$this->addRecipient($num);
|
|
}
|
|
$this->_id = array(); // identifier of the sent sms
|
|
}
|
|
|
|
|
|
// Build the query string for HTTP
|
|
private function BuildQS($args)
|
|
{
|
|
$qs = '';
|
|
$countArgs = 1;
|
|
foreach ($args as $key => $value)
|
|
{
|
|
if (is_array($value))
|
|
{
|
|
$countTo = 1;
|
|
$qs .= $key . '=';
|
|
foreach ($value as $index => $recipient)
|
|
{
|
|
if ($key == 'id')
|
|
$qs .= $recipient;
|
|
else
|
|
$qs .= urlencode($recipient);
|
|
|
|
if ($countTo < sizeof($value))
|
|
$qs .= '|';
|
|
$countTo++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
$qs .= $key . '=' . urlencode($value);
|
|
}
|
|
|
|
if ($countArgs < sizeof($args))
|
|
$qs .= '&';
|
|
$countArgs++;
|
|
}
|
|
return $qs;
|
|
}
|
|
|
|
// Send a HTTP Queries through sockets
|
|
private function SendSocketHTTP()
|
|
{
|
|
// init infos
|
|
if( self::__TM4B_SMS_HTTP_METHOD__ == "GET")
|
|
{
|
|
$script = self::__TM4B_SMS_HTTP_SERVICE__ . '?' . $this->_httpQS;
|
|
}
|
|
else
|
|
{
|
|
$script = self::__TM4B_SMS_HTTP_SERVICE__ ;
|
|
}
|
|
|
|
|
|
// Build HTTP Header
|
|
$header = self::__TM4B_SMS_HTTP_METHOD__ . " " . $script . " HTTP/1.1\r\n";
|
|
$header .= "Host: " . self::__TM4B_SMS_HTTP_HOST__ . "\r\n";
|
|
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
|
$header .= "Content-Length: " . Tools::strlen($this->_httpQS) . "\r\n";
|
|
$header .= "Connection: close\r\n\r\n";
|
|
$header .= $this->_httpQS . "\r\n";
|
|
|
|
// Socket connection
|
|
$socket = fsockopen( self::__TM4B_SMS_HTTP_HOST__ , 80, $errno, $errstr);
|
|
|
|
if($socket) // if we're connected
|
|
{
|
|
fputs($socket, $header); // Send header
|
|
while(!feof($socket))
|
|
{
|
|
$response[] = fgets($socket); // Grab return codes
|
|
}
|
|
fclose($socket);
|
|
}
|
|
else
|
|
{
|
|
$response = false;
|
|
}
|
|
return ($response);
|
|
}
|
|
|
|
|
|
#############################################################
|
|
#
|
|
# PUBLIC METHODS
|
|
#
|
|
#############################################################
|
|
|
|
// Add a recipent
|
|
public function AddRecipient($to, $country_code = NULL)
|
|
{
|
|
if ($country_code)
|
|
$to = preg_replace('/^0/', $country_code, $to);
|
|
array_push($this->_to, $to);
|
|
}
|
|
|
|
// Returns the current balance of the account in credits
|
|
public function CheckCredits()
|
|
{
|
|
$this->_httpQS = $this->BuildQS( array( 'username' => $this->_user,
|
|
'password' => $this->_pass,
|
|
'type' => self::__TM4B_SMS_CHECKBALANCE_TYPE__) );
|
|
$response = $this->SendSocketHTTP();
|
|
if (isset($response[8]))
|
|
return $response[8];
|
|
return '';
|
|
}
|
|
|
|
// Return the cost to send sms to a given country or number
|
|
public function CheckRoute()
|
|
{
|
|
$this->_httpQS = $this->BuildQS( array ( 'username' => $this->_user,
|
|
'password' => $this->_pass,
|
|
'type' => self::__TM4B_SMS_CHECKROUTE_TYPE__,
|
|
'dest' => $this->to,
|
|
'route' => $this->_route ) );
|
|
return ($this->SendSocketHTTP());
|
|
}
|
|
|
|
// Send SMS trought various possible methods (SMTP / HTTP)
|
|
public function Send($sim = 'no')
|
|
{
|
|
// Return if we can't send the sms
|
|
if (empty($this->msg) OR empty($this->_to))
|
|
return false;
|
|
|
|
$sim = ($sim == '0' ? 'no' : 'yes');
|
|
|
|
$this->_httpQS = $this->BuildQS( array (
|
|
'username' => $this->_user,
|
|
'password' => $this->_pass,
|
|
'type' => self::__TM4B_SMS_MESSAGE_TYPE__,
|
|
'to' => $this->_to,
|
|
'route' => $this->_route,
|
|
'from' => $this->_from,
|
|
'msg' => $this->msg,
|
|
'sim' => $sim
|
|
)
|
|
);
|
|
$ret = $this->SendSocketHTTP();
|
|
if (is_array($ret))
|
|
{
|
|
$this->_id = $ret[8];
|
|
return $ret[8];
|
|
}
|
|
else
|
|
return $ret;
|
|
}
|
|
|
|
public function isSent()
|
|
{
|
|
if (isset($this->_id) AND preg_match('/^MT.*/', $this->_id))
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
public function CheckStatus()
|
|
{
|
|
$this->_httpQS = $this->BuildQS( array (
|
|
$this->_user,
|
|
'password' => $this->_pass,
|
|
'type' => self::__TM4B_SMS_CHECKSTATUS_TYPE__,
|
|
'id' => $this->_id )
|
|
);
|
|
echo 'QS = '.$this->_httpQS."\n";
|
|
return $this->SendSocketHTTP();
|
|
}
|
|
}
|
|
|
|
?>
|