Introduction

SMS (also known as text-messaging) has grown into a very popular method of communication. It has been around in Europe and Asia since the early nineties and its use is steadily increasing in the US as well.

SMS stands for "Short Message Service" and uses mobile phones to transmit (surprise, surprise) short messages to and from mobile phones and whilst many of us might not know this, it is also possible to send SMS messages from a website or a piece of software.

There are an infinite number of reasons why you might want to use your website to send SMS. You might want to add a "send by SMS" option to your headlines, for example, or you might want to provide 24/7 support in which your technician is alerted by SMS or you might simply want to provide your viewers with Free SMS to drive traffic to your site.

Although it is also possible to send SMS via e-mail, this tutorial will teach you how to send SMS using GET and POST HTTP methods in PHP (since it's the language I know).

For those of us that many not know this, using HTTP basically means the use of forms, just like a contact form, except that these will be submitted automatically as opposed to manually.

Although this tutorial can be used for any gateway that provides access via HTTP, it is based on TM4B's SMS Gateway because A) they are the only gateway I know that have a simulation mode for tweaking your scripts, B) they don't have any set-up fees, C) their prices are low, D) they are reliable and E) I use them.

Understand the Requirements of the Gateway

Full details about connecting to TM4B are provided on their SMS API page. They basically require us to provide six mandatory pieces of data:

username: our username

password: our password

msg: our SMS message(s)

to: the recipient(s) of our message

from: our sender id

route: the route of the message (i.e. first class or business class)

And we will add a seventh, which is "sim". This identifies that our message is only a simulation and so credits won't be removed from our account and messages won't actually be delivered.

Prepare the Request

Now the actual message-delivery process is handled by the gateway. All they want us to do is pass them the details of the message(s) in the form of an HTTP request, similar to this one:

You can test the above example (which uses GET) by pasting it into your browser's address bar. You should get a response saying that the username is invalid, which is normal because this is just to demonstrate.

The first step is to save our data as variables and then convert them into a URL request. There are different ways of doing this, but this is a very innovative and useful way:

<?php
$request = ""; //initialize the request variable
$param["username"] = "abcdef"; //this is the username of our TM4B account
$param["password"] = "12345"; //this is the password of our TM4B account
$param["msg"] = "This is sample message."; //this is the message that we want to send
$param["to"] = "447768254545|447956219273|447771514662"; //these are the recipients of the message
$param["from"] = "MyCompany";//this is our sender
$param["route"] = "frst";//we want to send the message via first class
$param["sim"] = "yes";//we are only simulating a broadcast

foreach($param as $key=>$val) //traverse through each member of the param array
{
$request.= $key."=".urlencode($val); //we have to urlencode the values
$request.= "&"; //append the ampersand (&) sign after each paramter/value pair
}
$request = substr($request, 0, strlen($request)-1); //remove the final ampersand sign from the request
?>

We assign our credentials and routing information in the $param array. You'll notice that multiple recipients can be defined by separating them with the pipe-character. Each parameter value needs to be urlencoded and multiple key/value pairs are separated by ampersands. A final ampersand probably would not cause any problems but substr is still used to produce a tidy request.

The script will produce the following request that can be sent to the SMS gateway:
username=abcdef&password=12345&msg=This+is+sample+message.&
to=447768254545%7C447956219273%7C447771514662&
from=MyCompany&route=frst&sim=yes