Hello,
Many guys have been asking for this sort of sms scripts!
Any way i have created one for personal use but i am sharing here :)
Things you need
- An Account in tm4b.com and PHP 5.
- cURL or allow_url_fopen enabled in php.ini
Hello,
Many guys have been asking for this sort of sms scripts!
Any way i have created one for personal use but i am sharing here :)
Things you need
<?php
// Include the class
require 'class.swd_SMS.php';
// Create the object. (Parameters are optional if they're set in the class already)
$SMS = new swd_SMS('username', 'password');
// Send SMS. First parameter is the cell phone number with country code. (Without leading 00)
$SMS->send('34123456789', 'The message goes here');
// Let's send another just for fun
$SMS->send('34987654321', 'The message goes here');
// All sent messages are stored in an array.
echo '<pre>' . print_r($SMS->sent_messages, true) . '</pre>';
// Each sent message has a unique message ID, which is in the array above as well. With this we can see the message status any time. Like this:
$status = $SMS->fetch_msg_status('MT0052355965-1');
echo '<pre>' . print_r($status, true) . '</pre>';
?>
/////////////// here goes 'class.swd_SMS.php'
class swd_SMS
{
/**
* =========================================================================
* SMS Class
* =========================================================================
*
* @author: Balaji J H
* @requirements: PHP 5
*
* =========================================================================
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version
* =========================================================================
*/
/**
* Your TM4B username. If you don't have one yet, register here for free:
* https://www.tm4b.com/register/
*
* @type string
*/
private $username = 'username';
/**
* Your TM4B login password.
*
* @type string
*/
private $password = 'password';
/**
* The SMS sender. Use your company name or whatever you want display
* to the recipient
*
* @type string
*/
private $from = 'You';
/**
* Message route. Both Global I and Global II messaging routes are
* identical with regards to reliability, delivery speed and support
* for delivery states. More info here: http://www.tm4bhelp.com/kb/a-8.php#8
*
* @type string
*/
public $msg_route = 'GD02';
/**
* Minimum message length. Will set an error if the messages is shorter than
* this value.
*
* @type integer
*/
public $msg_min_length = 2;
/**
* Maximum message length. Will set an error if the messages is larger than
* this value. If the message is larger than 160 chars, it will be split into
* 2 or more messages.
*
* @type integer
*/
public $msg_max_length = 160;
/**
* Minimum number length. Will set an error if the number is shorter than
* this value.
*
* @type integer
*/
public $min_num_length = 8;
/**
* An array of errors that occurred while any request.
*
* @type array
*/
public $errors = array();
/**
* An array with the details of the sent messages.
*
* @type array
*/
public $sent_messages = array();
/**
* An array with all details of failed messages.
*
* @type array
*/
public $failed_messages = array();
/**
* Class constructor. Takes 0 or 2 parameters. Parameter 1 being the username,
* and parameter 2 being the password, for quick login.
*
* @param string Login username
* @param string Login password
*
* @return none
*/
public function __construct()
{
if (func_num_args() == 2)
{
list($this->username, $this->password) = func_get_args();
}
}
/**
* Sends the message out. The country code without the leading 00 must be
* specified in the number.
*
* @param string Recipient phone number.
* @param string Message for recipient
* @param string "From" header.
* @param string Message route. Either GD01 or GD02
*
* @return boolean
*/
public function send($number, $message, $from = false, $route = false)
{
$number = preg_replace('/\D/', null, $number);
if (strlen($number) < $this->min_num_length)
{
self::set_error("Invalid number: {$number}");
return false;
}
// Convert message into a single line string.
$message = preg_replace('/[\r\n\t]+/', ' ', trim(strval($message)));
$message = preg_replace('/\s{2,}/', ' ', $message);
$messagelength = strlen($message);
if ($messagelength < $this->msg_min_length)
{
self::set_error('Message too short.');
return false;
}
else if ($messagelength > $this->msg_max_length)
{
self::set_error('Message too long.');
return false;
}
if ($from)
{
$this->from = $from;
}
if ($route AND in_array($route, array('GD01', 'GD02')))
{
$this->msg_route = $route;
}
$request = array(
'version' => '2.0',
'type' => 'broadcast',
'msg' => $message,
'to' => $number,
'from' => $this->from,
'route' => $this->msg_route
);
$response = self::http_request($request);
$request['delivertime'] = time();
if (self::is_error($response))
{
array_push($this->failed_messages, $request);
return false;
}
$request['messageid'] = $response;
array_push($this->sent_messages, $request);
return true;
}
/**
* Receives the message status and returns an array with the status and deliver time.
*
* @param string Message ID
*
* @return array Deliver status/Deliver time
*/
public function fetch_msg_status($messageid)
{
$request = array('type' => 'check_status');
if (preg_match('/^MT[\d]{10}-\d$/', $messageid))
{
$request['id'] = $messageid;
}
else if (preg_match('/^[a-f0-9]{21}$/', $messageid))
{
$request['custom'] = $messageid;
}
else
{
self::set_error('Invalid Message ID.');
return false;
}
$response = self::http_request($request);
if (self::is_error($response))
{
return false;
}
list($status, $delivertime) = explode('|', $response);
list($year, $month, $day, $hour, $minute) = str_split($delivertime, 2);
return array(
'delivered' => ($status == 'DELIVRD'),
'delivertime' => mktime($hour, $minute, 0, $month, $day, $year) // Don't we all prefer working with UNIX timestamps?
);
}
/**
* Gets the current balance of your account.
*
* @return mixed Balance on success, false on failure.
*/
public function fetch_balance()
{
$request = array(
'version' => '2.0',
'type' => 'check_balance'
);
$response = self::http_request($request);
return self::is_error($response) ? false : $response;
}
/**
* Checks if a specific destination is available on a message route
*
* @param string Country code
* @param string Message route
*
* @return array Availability, country, and credits needed to send SMS to this country
*/
public function check_destination($dest, $route = 'GD01')
{
$request = array(
'type' => 'check_destination',
'dest' => $dest,
'route' => $route
);
$response = self::http_request($request);
if (self::is_error($response))
{
return false;
}
@list($status, $country, $credits) = explode('|', $response);
return array(
'status' => ($status == 'Yes'),
'country' => $country,
'credits' => $credits
);
}
/**
* Sends the HTTP request to the server and receives the response.
* Either the cURL library needs to be installed, or allow_url_fopen
* needs to be enabled in php.ini
*
* @param array request values
*
* @return string Server response
*/
private function http_request($request = array())
{
// Should never exceed the time limit, but just in case.
@set_time_limit(0);
$request['username'] = $this->username;
$request['password'] = $this->password;
// Takes also care of the URL encoding.
$request = http_build_query($request, '', '&');
if (function_exists('curl_init') AND $ch = @curl_init('https://www.tm4b.com/client/api/http.php'))
{
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);
}
else if (ini_get('allow_url_fopen'))
{
if (!$fp = @fsockopen('ssl://tm4b.com', 443))
{
self::set_error('Unable to connect to host. Try again later.');
return false;
}
$header = "POST /client/api/http.php HTTP/1.1\r\n";
$header .= "Host: tm4b.com\r\n";
$header .= "User-Agent: HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($request) . "\r\n";
$header .= "Connection: close\r\n\r\n";
$header .= "{$request}\r\n";
fputs($fp, $header);
$result = array();
while(!feof($fp))
{
$result[] = fgets($fp);
}
fclose($fp);
$response = $result[9];
}
else
{
trigger_error('Server does not support HTTP(S) requests.', E_USER_ERROR);
}
return trim($response);
}
/**
* Checks for errors in the API response and adds it to the array if there's one.
*
* @param string API response
*
* @return boolean True if error, false if not.
*/
private function is_error($string)
{
if (preg_match('/^error\(\d+\|([^\)]+)/', $string, $error))
{
self::set_error($error[1]);
return true;
}
return false;
}
/**
* Sets the minumum and maximum message length
*
* @param integer Minimum message length. Use false to keep default
* @param integer Maximum message length.
*
* @return none
*/
public function set_message_length($min, $max = false)
{
if ($min !== false)
{
$this->msg_min_length = intval($min);
}
if ($max !== false)
{
$this->msg_max_length = intval($max);
}
}
/**
* Returns the number of sent messages.
*
* @return integer Number of sent messages.
*/
public function nr_sentmessages()
{
return sizeof($this->sent_messages);
}
/**
* Adds an error string to the error array
*
* @param string Error string
*
* @return none
*/
private function set_error($error)
{
$this->errors[] = $error;
}
/**
* =========================================================================
* SMS Class end
* =========================================================================
*
*/
}
?>
Thanks for this excellent piece of code. I was struggling with some out of date code with no success, then I found this. It enabled me to write an IRC bot that sends me an SMS when someone joins my IRC room.
thnks for sharing..i appreciate it...
I gave it a go, but:
Array
(
[0] => Array
(
[version] => 2.0
[type] => broadcast
[msg] => The message goes here
[to] => ...(number here)...
[from] => You
[route] => GD02
[delivertime] => 1299935140
[messageid] =>
)
)
Notice: Undefined offset: 1 in ...(class file)... on line 228
Notice: Undefined offset: 4 in ...(class file)... on line 229
Notice: Undefined offset: 3 in ...(class file)... on line 229
Notice: Undefined offset: 2 in ...(class file)... on line 229
Notice: Undefined offset: 1 in ...(class file)... on line 229
Warning: mktime() expects parameter 6 to be long, string given in ...(class file)... on line 233
Array
(
[delivered] =>
[delivertime] =>
)
hey guys if anyone want to send free sms then here is somthing for you..
if you want to send message using way2sms account then here is open source code..
include in your website and send free sms..http://ritesh-chandora.blogspot.in/2012/02/php-code-for-sending-free-sms.html"
PHP code for sending sms using way2sms
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.