Jump to content

Help On SMS API Clickatell.com


lainard

Recommended Posts

Please create SMS user for their Order uisng this Clickatell sms API

<?php
/**
* CLICKATELL SMS API
*
* This class is meant to send SMS messages (with unicode support) via 
* the Clickatell gateway and provides support to authenticate to this service, 
* spending an vouchers and also query for the current account balance. This class
* use the fopen or CURL module to communicate with the gateway via HTTP/S.
*
* For more information about CLICKATELL service visit [url]http://www.clickatell.com[/url]
*
* @version 1.6
* @package sms_api
* @author Aleksandar Markovic <mikikg@gmail.com>
* @copyright Copyright (c) 2004 - 2007 Aleksandar Markovic
* @link [url]http://sourceforge.net/projects/sms-api/[/url] SMS-API Sourceforge project page
* @license [url]http://opensource.org/licenses/gpl-license.php[/url] GNU Public License
*
*/

/**
* Main SMS-API class
*
* Example:
* <code>
* <?php
* require_once ("sms_api.php");
* $mysms = new sms();
* echo $mysms->session;
* echo $mysms->getbalance();
* // $mysms->token_pay("1234567890123456"); //spend voucher with SMS credits
* $mysms->send ("38160123", "netsector", "TEST MESSAGE");
* ?>
* </code>
* @package sms_api
*/

class sms {

   /**
   * Clickatell API-ID
   * @link [url]http://sourceforge.net/forum/forum.php?thread_id=1005106&forum_id=344522[/url] How to get CLICKATELL API ID?
   * @var integer
   */
   var $api_id = "YOUR_CLICKATELL_API_NUMBER";

   /**
   * Clickatell username
   * @var mixed
   */
   var $user = "YOUR_CLICKATELL_USERNAME";

   /**
   * Clickatell password
   * @var mixed
   */
   var $password = "YOUR_CLICKATELL_PASSWORD";

   /**
   * Use SSL (HTTPS) protocol
   * @var bool
   */
   var $use_ssl = false;

   /**
   * Define SMS balance limit below class will not work
   * @var integer
   */
   var $balace_limit = 0;

   /**
   * Gateway command sending method (curl,fopen)
   * @var mixed
   */
   var $sending_method = "fopen";

   /**
   * Does to use facility for delivering Unicode messages
   * @var bool
   */
   var $unicode = false;

   /**
   * Optional CURL Proxy
   * @var bool
   */
   var $curl_use_proxy = false;

   /**
   * Proxy URL and PORT
   * @var mixed
   */
   var $curl_proxy = "http://127.0.0.1:8080";

   /**
   * Proxy username and password
   * @var mixed
   */
   var $curl_proxyuserpwd = "login:secretpass";

   /**
   * Callback
   * 0 - Off
   * 1 - Returns only intermediate statuses
   * 2 - Returns only final statuses
   * 3 - Returns both intermediate and final statuses
   * @var integer
   */
   var $callback = 0;

   /**
   * Session variable
   * @var mixed
   */
   var $session;

   /**
   * Class constructor
   * Create SMS object and authenticate SMS gateway
   * @return object New SMS object.
   * @access public
   */
   function sms () {
       if ($this->use_ssl) {
           $this->base   = "http://api.clickatell.com/http";
           $this->base_s = "https://api.clickatell.com/http";
       } else {
           $this->base   = "http://api.clickatell.com/http";
           $this->base_s = $this->base;
       }

       $this->_auth();
   }

   /**
   * Authenticate SMS gateway
   * @return mixed  "OK" or script die
   * @access private
   */
   function _auth() {
   	$comm = sprintf ("%s/auth?api_id=%s&user=%s&password=%s", $this->base_s, $this->api_id, $this->user, $this->password);
       $this->session = $this->_parse_auth ($this->_execgw($comm));
   }

   /**
   * Query SMS credis balance
   * @return integer  number of SMS credits
   * @access public
   */
   function getbalance() {
   	$comm = sprintf ("%s/getbalance?session_id=%s", $this->base, $this->session);
       return $this->_parse_getbalance ($this->_execgw($comm));
   }

   /**
   * Send SMS message
   * @param to mixed  The destination address.
   * @param from mixed  The source/sender address
   * @param text mixed  The text content of the message
   * @return mixed  "OK" or script die
   * @access public
   */
   function send($to=null, $from=null, $text=null) {

   	/* Check SMS credits balance */
   	if ($this->getbalance() < $this->balace_limit) {
   	    die ("You have reach the SMS credit limit!");
   	};

   	/* Check SMS $text length */
       if ($this->unicode == true) {
           $this->_chk_mbstring();
           if (mb_strlen ($text) > 210) {
       	    die ("Your unicode message is too long! (Current lenght=".mb_strlen ($text).")");
       	}
       	/* Does message need to be concatenate */
           if (mb_strlen ($text) > 70) {
               $concat = "&concat=3";
       	} else {
               $concat = "";
           }
       } else {
           if (strlen ($text) > 459) {
   	        die ("Your message is too long! (Current lenght=".strlen ($text).")");
   	    }
       	/* Does message need to be concatenate */
           if (strlen ($text) > 160) {
               $concat = "&concat=3";
       	} else {
               $concat = "";
           }
       }

   	/* Check $to and $from is not empty */
       if (empty ($to)) {
   	    die ("You not specify destination address (TO)!");
   	}
       if (empty ($from)) {
   	    die ("You not specify source address (FROM)!");
   	}

   	/* Reformat $to number */
       $cleanup_chr = array ("+", " ", "(", ")", "\r", "\n", "\r\n");
       $to = str_replace($cleanup_chr, "", $to);

   	/* Send SMS now */
   	$comm = sprintf ("%s/sendmsg?session_id=%s&to=%s&from=%s&text=%s&callback=%s&unicode=%s%s",
           $this->base,
           $this->session,
           rawurlencode($to),
           rawurlencode($from),
           $this->encode_message($text),
           $this->callback,
           $this->unicode,
           $concat
       );
       return $this->_parse_send ($this->_execgw($comm));
   }

   /**
   * Encode message text according to required standard
   * @param text mixed  Input text of message.
   * @return mixed  Return encoded text of message.
   * @access public
   */
   function encode_message ($text) {
       if ($this->unicode != true) {
           //standard encoding
           return rawurlencode($text);
       } else {
           //unicode encoding
           $uni_text_len = mb_strlen ($text, "UTF-8");
           $out_text = "";

           //encode each character in text
           for ($i=0; $i<$uni_text_len; $i++) {
               $out_text .= $this->uniord(mb_substr ($text, $i, 1, "UTF-8"));
           }

           return $out_text;
       }
   }

   /**
   * Unicode function replacement for ord()
   * @param c mixed  Unicode character.
   * @return mixed  Return HEX value (with leading zero) of unicode character.
   * @access public
   */
   function uniord($c) {
       $ud = 0;
       if (ord($c{0})>=0 && ord($c{0})<=127)
           $ud = ord($c{0});
       if (ord($c{0})>=192 && ord($c{0})<=223)
           $ud = (ord($c{0})-192)*64 + (ord($c{1})-128);
       if (ord($c{0})>=224 && ord($c{0})<=239)
           $ud = (ord($c{0})-224)*4096 + (ord($c{1})-128)*64 + (ord($c{2})-128);
       if (ord($c{0})>=240 && ord($c{0})<=247)
           $ud = (ord($c{0})-240)*262144 + (ord($c{1})-128)*4096 + (ord($c{2})-128)*64 + (ord($c{3})-128);
       if (ord($c{0})>=248 && ord($c{0})<=251)
           $ud = (ord($c{0})-248)*16777216 + (ord($c{1})-128)*262144 + (ord($c{2})-128)*4096 + (ord($c{3})-128)*64 + (ord($c{4})-128);
       if (ord($c{0})>=252 && ord($c{0})<=253)
           $ud = (ord($c{0})-252)*1073741824 + (ord($c{1})-128)*16777216 + (ord($c{2})-128)*262144 + (ord($c{3})-128)*4096 + (ord($c{4})-128)*64 + (ord($c{5})-128);
       if (ord($c{0})>=254 && ord($c{0})<=255) //error
           $ud = false;
       return sprintf("%04x", $ud);
   }

   /**
   * Spend voucher with sms credits
   * @param token mixed  The 16 character voucher number.
   * @return mixed  Status code
   * @access public
   */
   function token_pay ($token) {
       $comm = sprintf ("%s/http/token_pay?session_id=%s&token=%s",
       $this->base,
       $this->session,
       $token);

       return $this->_execgw($comm);
   }

   /**
   * Execute gateway commands
   * @access private
   */
   function _execgw($command) {
       if ($this->sending_method == "curl")
           return $this->_curl($command);
       if ($this->sending_method == "fopen")
           return $this->_fopen($command);
       die ("Unsupported sending method!");
   }

   /**
   * CURL sending method
   * @access private
   */
   function _curl($command) {
       $this->_chk_curl();
       $ch = curl_init ($command);
       curl_setopt ($ch, CURLOPT_HEADER, 0);
       curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1);
       curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,0);
       if ($this->curl_use_proxy) {
           curl_setopt ($ch, CURLOPT_PROXY, $this->curl_proxy);
           curl_setopt ($ch, CURLOPT_PROXYUSERPWD, $this->curl_proxyuserpwd);
       }
       $result=curl_exec ($ch);
       curl_close ($ch);
       return $result;
   }

   /**
   * fopen sending method
   * @access private
   */
   function _fopen($command) {
       $result = '';
       $handler = @fopen ($command, 'r');
       if ($handler) {
           while ($line = @fgets($handler,1024)) {
               $result .= $line;
           }
           fclose ($handler);
           return $result;
       } else {
           die ("Error while executing fopen sending method!
Please check does PHP have OpenSSL support and check does PHP version is greater than 4.3.0.");
       }
   }

   /**
   * Parse authentication command response text
   * @access private
   */
   function _parse_auth ($result) {
   	$session = substr($result, 4);
       $code = substr($result, 0, 2);
       if ($code!="OK") {
           die ("Error in SMS authorization! ($result)");
       }
       return $session;
   }

   /**
   * Parse send command response text
   * @access private
   */
   function _parse_send ($result) {
   	$code = substr($result, 0, 2);
   	if ($code!="ID") {
   	    die ("Error sending SMS! ($result)");
   	} else {
   	    $code = "OK";
   	}
       return $code;
   }

   /**
   * Parse getbalance command response text
   * @access private
   */
   function _parse_getbalance ($result) {
   	$result = substr($result, ;
       return (int)$result;
   }

   /**
   * Check for CURL PHP module
   * @access private
   */
   function _chk_curl() {
       if (!extension_loaded('curl')) {
           die ("This SMS API class can not work without CURL PHP module! Try using fopen sending method.");
       }
   }

   /**
   * Check for Multibyte String Functions PHP module - mbstring
   * @access private
   */
   function _chk_mbstring() {
       if (!extension_loaded('mbstring')) {
           die ("Error. This SMS API class is setup to use Multibyte String Functions module - mbstring, but module not found. Please try to set unicode=false in class or install mbstring module into PHP.");
       }
   }

}

?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use & Guidelines and understand your posts will initially be pre-moderated