php 通过免费网关发送短信

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7360010/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-26 02:33:32  来源:igfitidea点击:

SMS sending through free gateway

phpsms

提问by priya

Please guide me with sample code for sending sms through website. How to include sms gateway. Please tell me, can i use way2sms.com as gateway?

请指导我通过网站发送短信的示例代码。如何包括短信网关。请告诉我,我可以使用way2sms.com 作为网关吗?

is it the right way to use? please suggest me only this much of code works?

这是正确的使用方法吗?请建议我只有这么多代码有效?

<?php
error_reporting(E_ALL);
ob_implicit_flush(true);


include_once "class.curl.php";
include_once "class.sms.php";

$smsapp=new sms();
$smsapp->setGateway('way2sms'); 


echo "Logging in  ... ";
$smsapp->login('10 digit number','way2sms password');

echo "Sending SMS ... ";
$result=$smsapp->send('receipient number','text message');

if($result=='true')
{
    echo "Message sent";
}
else
{   
    echo "Error encountered : ".$smsapp->getLastError();
}

?>

here is my class.curl.php

这是我的 class.curl.php

<?php
class sms
{
    var $username;
    var $password;
    var $curl;
    var $server;
    var $loginDone;
    var $debugMode;
    var $data;
    var $error;
    public function __construct()
    {
        $this->curl=new cURL();
    //  $this->curl->setProxy("");
        $this->loginDone=false;
        $this->debugMode=false;
        $this->data=array();
    }
    public function setGateway($serverName)
    {
        switch($serverName)
        {
            case '160by2':
            $this->server='160by2';
            break;

            case 'way2sms':
            $this->server='way2sms';
            break;

            case 'airtel':
            $this->server='airtel';
            break;

            default :
            $this->server='way2sms';

        }
    }
    public function login($username,$password)
    {
        $server=$this->server;

        call_user_func(array($this,"login_$server"),$username,$password);
        $this->loginDone=true;

    }
    public function send($number,$msg)
    {
        $server=$this->server;
        if($this->loginDone)
        return call_user_func(array($this,"send_$server"),$number,$msg);
        else
        {
            echo "<h2>Please login first before sending SMS</h2>";
        }

    }
    private function login_way2sms($username,$password)
    {
        $out=($this->curl->post("http://www.way2sms.com","1=1"));
        $pattern="/Location:(.+?)\n/";
        preg_match($pattern,$out,$matches);
        $domain=trim($matches[1]);

        $this->data['domain']=$domain;

        $out= $this->curl->post("{$domain}auth.cl","username=$username&password=$password&Submit=Sign+in");

        $pattern="/Location:(.+?)\n/";
        preg_match($pattern,$out,$matches);
        $referer=trim($matches[1]);
        $this->data['referer']=$referer;


    }


    private function send_way2sms($number,$msg)
    {
        $domain=$this->data['domain'];
        $html=$this->curl->post("{$domain}jsp/InstantSMS.jsp?val=0","1=1",$this->data['referer']);
        if($this->debugMode)
        {
        echo "<h2>After logging in, the HTML returned by server is</h2>";
        echo $html;
        }

        $pattern = '/name="Action".+?value="(.*)"/';
        preg_match($pattern, $html, $matches);

        $custfrom=$matches[1];
        $msg=urlencode($msg);
        $html=$this->curl->post("{$domain}FirstServletsms?custid=","custid=undefined&HiddenAction=instantsms&Action={$custfrom}&login=&pass=&MobNo=$number&textArea=$msg");
        $pattern = '/class="style1">(.+?)<\/span>/';
        preg_match($pattern, $html, $matches);
        $out=($matches[1]);

        if(!preg_match("/successfully/",$out))
        {
        $this->setError($out);
        return false;
        }
        else
        {
        return true;
        $this->setError("No errors");
        }

    }
    public function getLastError()
    {
        return $this->error;

    }
    private function setError($error)
    {
        $this->error=$error;
    }
    private function login_160by2($username,$password)
    {
    //  $out2=$this->curl->get("http://m.160by2.com");
        $out=$this->curl->post("http://m.160by2.com/LoginCheck.asp?l=1&txt_msg=&mno=","txtUserName=$username&txtPasswd=$password&RememberMe=Yes&cmdSubmit=Login");
        $pattern="/MyMenu.asp\?Msg=(.+?)&/";

        preg_match($pattern,$out,$matches);
        $id=trim($matches[1]);
        $this->data['id']=$id;

    }

    private function send_160by2($number,$msg)
    {
        $msg=urlencode($msg);
        $id=$this->data['id'];
        $out1=$this->curl->post("http://m.160by2.com/SaveCompose.asp?l=1","txt_mobileno=$number&txt_msg=$msg&cmdSend=Send+SMS&TID=&T_MsgId=&Msg=$id");
        //echo $out1;
        $pattern = '/\<table.+?\>(.+)\<\/table/s';
        preg_match($pattern, $out1, $matches);

        $out=strip_tags(@$matches[1]);
        if(count($matches)<1)
        {
        $pattern="/\<div.+?background:.+?yellow.+?\>(.+?)\<\/div\>/s";

        preg_match($pattern,$out1,$matches);

        $out=strip_tags($matches[1]);
        }

//
    //  echo "out is $out";

        if(!preg_match("/successfully/i",$out))
        {

        $this->setError($out);

        return false;
        }
        else
        {
        return true;
        $this->setError("No errors");
        }

    }

    private function login_airtel($username,$password)
    {
        $this->data['username']=$username;
        $this->data['password']=$password;

    }


    private function send_airtel($number,$msg)
    {

    }
}

?>

in the place of username and password, which username and password i should use?

代替用户名和密码,我应该使用哪个用户名和密码?

回答by Mark Tomlin

Yeah, or you could use the gateways as provided by the wireless carriers themselves, as then it's as simple as sending them an email with PHP's mail function.

是的,或者您可以使用无线运营商自己提供的网关,因为这就像使用PHP 的邮件功能向他们发送电子邮件一样简单。

Where (Number)is, you must include their 10 digit phone number. So that means that you must include their area code.

(号码)在哪里,您必须包括他们的 10 位电话号码。所以这意味着你必须包括他们的区号。

AT&T(Number)@txt.att.net

AT&T (号码)@txt.att.net

T-Mobile(Number)@tmomail.net

T-Mobile (号码)@tmomail.net

Sprint(Number)@messaging.sprintpcs.com

冲刺(数字)@messaging.sprintpcs.com

Verizon(Number)@vtext.com OR (Number)@vzwpix.com

Verizon (号码)@vtext.com 或(号码)@vzwpix.com

回答by ritesh chandora

THE Code you are using is totally outdated. Way2sms change their way of authentication. If you want to use new code then here is solution : http://ritesh-chandora.blogspot.in/2012/02/php-code-for-sending-free-sms.htmlthis blog will provide new way of sending sms easily.

您使用的代码已完全过时。Way2sms 改变了他们的身份验证方式。如果您想使用新代码,那么这里是解决方案:http: //ritesh-chandora.blogspot.in/2012/02/php-code-for-sending-free-sms.html该博客将提供发送短信的新方式容易地。

回答by Pramendra Gupta

It seems fine, except one line change this

看起来很好,除了一行改变这个

if($result=='true')
to
if($result == true)