2

I would like to integrate way2sms api in php code. here my sample code , its error free but no message is sending . friends please help me where i have did mistake ? what do i need to change ?

sms.php

$uid='9876543210';//10 digit mobile number

$pwd='password';

$phone='9876543210';

$msg='from way 2 sms master ' ;

include ('way2sms-api.php');

$res= sendWay2SMS ( $uid , $pwd , $phone , $msg);

way2sms-api.php

<?php

function sendWay2SMS($uid, $pwd, $phone, $msg)

{

  $curl = curl_init();

  $timeout = 30;

  $result = array();

  $uid = urlencode($uid);

  $pwd = urlencode($pwd);

  $autobalancer = rand(1, 8);

  curl_setopt($curl, CURLOPT_URL, http://site".$autobalancer.".way2sms.com/Login1.action");

  curl_setopt($curl, CURLOPT_POST, 1);

  curl_setopt($curl, CURLOPT_POSTFIELDS, "username=".$uid."&password=".$pwd."&button=Login");

  //curl_setopt($curl , CURLOPT_PROXY , '144.16.192.218:8080' );

  curl_setopt($curl, CURLOPT_COOKIESESSION, 1);

  curl_setopt($curl, CURLOPT_COOKIEFILE, "cookie_way2sms");

  curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

  curl_setopt($curl, CURLOPT_MAXREDIRS, 20);

  curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

  curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");

  curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);

  curl_setopt($curl, CURLOPT_REFERER, "http://site".$autobalancer.".way2sms.com/");

  $text = curl_exec($curl);

  // Check if any error occured

  if (curl_errno($curl))

    return "access error : ". curl_error($curl);

  // Check for proper login

  $pos = stripos(curl_getinfo($curl, CURLINFO_EFFECTIVE_URL), "Main.action");

  if ($pos === "FALSE" || $pos == 0 || $pos == "")

    return "invalid login";

  if (trim($msg) == "" || strlen($msg) == 0)

    return "invalid message";

  $msg = urlencode(substr($msg, 0, 160));

  $pharr = explode(",", $phone);

  $refurl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);

  curl_setopt($curl, CURLOPT_REFERER, $refurl);

  curl_setopt($curl, CURLOPT_URL, 
"http://site".$autobalancer.".way2sms.com/jsp/InstantSMS.jsp");
  $text = curl_exec($curl);

  preg_match_all('/<input[\s]*type="hidden"[\s]*name="Action"[\s]*id="Action"[\s]*value="?([^>]*)?"/si', $text, $match);
  $action = $match[1][0]; // get custid from the form fro the Action field in the post form

  foreach ($pharr as $p)

  {

    if (strlen($p) != 10 || !is_numeric($p) || strpos($p, ".") != false)

    {

      $result[] = array('phone' => $p, 'msg' => urldecode($msg), 'result' => "invalid number");

      continue;

    }
    $p = urlencode($p);

    // Send SMS

    curl_setopt($curl, CURLOPT_URL, 'http://site'.$autobalancer.'.way2sms.com/quicksms.action');

    curl_setopt($curl, CURLOPT_REFERER, curl_getinfo($curl, CURLINFO_EFFECTIVE_URL));

    curl_setopt($curl, CURLOPT_POST, 1);

    curl_setopt($curl, CURLOPT_POSTFIELDS,
      "HiddenAction=instantsms&bulidgpwd=*******&bulidguid=username&catnamedis=Birthday&chkall=on&gpwd1=*******&guid1=username&ypwd1=*******&yuid1=username&Action=".
      $action."&MobNo=".$p."&textArea=".$msg);

    $contents = curl_exec($curl);

    //Check Message Status

    //preg_match_all('/<span class="style1">?([^>]*)?<\/span>/si', $contents, $match);

    //$out=str_replace("&nbsp;","",$match[1][0]);

    $pos = strpos($contents, 'Message has been submitted successfully');

    $res = ($pos !== false) ? true : false;

    $result[] = array('phone' => $p, 'msg' => urldecode($msg), 'result' => $res);

  }
  //echo $text;

  // Logout

  curl_setopt($curl, CURLOPT_URL, "http://site".$autobalancer.".way2sms.com/LogOut");

  curl_setopt($curl, CURLOPT_REFERER, $refurl);

  $text = curl_exec($curl);

  curl_close($curl);

  return $result;

}

?>
Piotr Olaszewski
  • 6,017
  • 5
  • 38
  • 65
user3566029
  • 73
  • 3
  • 10
  • Did you actually replace the configuration values with the credentials the API maintainers provided you? What's the response text of the API? Just because your code doesn't give any errors, doesn't mean the API doesn't either. – Elias Feb 15 '15 at 14:20
  • yes i replaced .... but i don't know what to do with this line . curl_setopt($curl, CURLOPT_POSTFIELDS, "HiddenAction=instantsms&bulidgpwd=*******&bulidguid=username&catnamedis=Birthday&chkall=on&gpwd1=*******&guid1=username&ypwd1=*******&yuid1=username&Action=". $action."&MobNo=".$p."&textArea=".$msg); – user3566029 Feb 15 '15 at 14:22

1 Answers1

0

TRY THIS CODE:

<?php
/**
 * https://github.com/kingster/Way2SMS-API/blob/master/way2sms-api.php
 *
 * Please use this code on your own risk. The author is no way responsible for the outcome arising out of this
 * Good Luck!
 **/
class WAY2SMSClient
{
    var $curl;
    var $timeout = 30;
    var $jsToken;
    var $way2smsHost;
    var $refurl;
    /**
     * @param $username
     * @param $password
     * @return bool|string
     */
    function login($username, $password)
    {
        $this->curl = curl_init();
        $uid = urlencode($username);
        $pwd = urlencode($password);
        // Go where the server takes you :P
        curl_setopt($this->curl, CURLOPT_URL, "http://way2sms.com");
        curl_setopt($this->curl, CURLOPT_HEADER, true);
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, false);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, TRUE);
        $a = curl_exec($this->curl);
        if (preg_match('#Location: (.*)#', $a, $r))
            $this->way2smsHost = trim($r[1]);
        // Setup for login
        curl_setopt($this->curl, CURLOPT_URL, $this->way2smsHost . "Login1.action");
        curl_setopt($this->curl, CURLOPT_POST, 1);
        curl_setopt($this->curl, CURLOPT_POSTFIELDS, "username=" . $uid . "&password=" . $pwd . "&button=Login");
        curl_setopt($this->curl, CURLOPT_COOKIESESSION, 1);
        curl_setopt($this->curl, CURLOPT_COOKIEFILE, "cookie_way2sms");
        curl_setopt($this->curl, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($this->curl, CURLOPT_MAXREDIRS, 20);
        curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($this->curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
        curl_setopt($this->curl, CURLOPT_CONNECTTIMEOUT, $this->timeout);
        curl_setopt($this->curl, CURLOPT_REFERER, $this->way2smsHost);
        $text = curl_exec($this->curl);
        // Check if any error occured
        if (curl_errno($this->curl))
            return "access error : " . curl_error($this->curl);
        // Check for proper login
        $pos = stripos(curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL), "ebrdg.action");
        if ($pos === "FALSE" || $pos == 0 || $pos == "")
            return "invalid login";
        // Set the home page from where we can send message
        $this->refurl = curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL);
        $newurl = str_replace("ebrdg.action?id=", "main.action?section=s&Token=", $this->refurl);
        curl_setopt($this->curl, CURLOPT_URL, $newurl);
        // Extract the token from the URL
        $this->jstoken = substr($newurl, 50, -41);
        //Go to the homepage
        $text = curl_exec($this->curl);
        return true;
    }
    /**
     * @param $phone
     * @param $msg
     * @return array
     */
    function send($phone, $msg)
    {
        $result = array();
        // Check the message
        if (trim($msg) == "" || strlen($msg) == 0)
            return "invalid message";
        // Take only the first 140 characters of the message
        $msg = substr($msg, 0, 140);
        // Store the numbers from the string to an array
        $pharr = explode(",", $phone);
        // Send SMS to each number
        foreach ($pharr as $p) {
            // Check the mobile number
            if (strlen($p) != 10 || !is_numeric($p) || strpos($p, ".") != false) {
                $result[] = array('phone' => $p, 'msg' => $msg, 'result' => "invalid number");
                continue;
            }
            // Setup to send SMS
            curl_setopt($this->curl, CURLOPT_URL, $this->way2smsHost . 'smstoss.action');
            curl_setopt($this->curl, CURLOPT_REFERER, curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL));
            curl_setopt($this->curl, CURLOPT_POST, 1);
            curl_setopt($this->curl, CURLOPT_POSTFIELDS, "ssaction=ss&Token=" . $this->jstoken . "&mobile=" . $p . "&message=" . $msg . "&button=Login");
            $contents = curl_exec($this->curl);
            //Check Message Status
            $pos = strpos($contents, 'Message has been submitted successfully');
            $res = ($pos !== false) ? true : false;
            $result[] = array('phone' => $p, 'msg' => $msg, 'result' => $res);
        }
        return $result;
    }
    /**
     * logout of current session.
     */
    function logout()
    {
        curl_setopt($this->curl, CURLOPT_URL, $this->way2smsHost . "LogOut");
        curl_setopt($this->curl, CURLOPT_REFERER, $this->refurl);
        $text = curl_exec($this->curl);
        curl_close($this->curl);
    }
}
/**
 * Helper Function to send to sms to single/multiple people via way2sms
 * @example sendWay2SMS ( '9000012345' , 'password' , '987654321,9876501234' , 'Hello World')
 */
function sendWay2SMS($uid, $pwd, $phone, $msg)
{
    $client = new WAY2SMSClient();
    $client->login($uid, $pwd);
    $result = $client->send($phone, $msg);
    $client->logout();
    return $result;
}
jerinisready
  • 936
  • 10
  • 24
  • 1
    its **Working** code and **worth trying**... tanks to **'kingster'** – jerinisready Jun 16 '16 at 14:47
  • Save this code to a file in the woorking directory (say: way2sms_api.php). add : require('way2sms_api.php'); in the working file, call function sendWay2SMS ( `'way2sms_registered_mob_no'` , `'password'` , `'any_no_of_receivers_seperated_by_comma'` , `'Hello World'` ); – jerinisready Jun 16 '16 at 14:55
  • 1
    K John, I have tried this code but it didn't work for me. – bansal Apr 26 '18 at 11:39
  • https://github.com/kingster/Way2SMS-API/blob/master/way2sms-api.php Try from their repo itself! I' m little busy! c can check the code and reply you later! Actually, they are scraping the site using curl, and there is a chance for change in dataflow! – jerinisready Apr 27 '18 at 12:28