Php 来自web应用程序的SMS

Php 来自web应用程序的SMS,php,sms,Php,Sms,我只想用PHP从我的web应用程序发送短信。 谁能告诉我怎么做? 为此我需要做些什么?基本上,每个运营商都有一个电子邮件网关,您需要向其发送电子邮件。您需要提前了解运营商,以便知道发送SMS消息的电子邮件地址。如果您需要可靠的方式发送多条SMS,您应该寻找充当web-to-SMS网关的SMS服务提供商。在这种情况下,将有一个基于http的接口,允许您通过调用URL并将收件人和消息作为参数传递来发送SMS。我们使用一种商业解决方案,称为此 一个小的费用(每SMS的便士),他们给你一个Web服务(加

我只想用PHP从我的web应用程序发送短信。 谁能告诉我怎么做?
为此我需要做些什么?

基本上,每个运营商都有一个电子邮件网关,您需要向其发送电子邮件。您需要提前了解运营商,以便知道发送SMS消息的电子邮件地址。

如果您需要可靠的方式发送多条SMS,您应该寻找充当web-to-SMS网关的SMS服务提供商。在这种情况下,将有一个基于http的接口,允许您通过调用URL并将收件人和消息作为参数传递来发送SMS。

我们使用一种商业解决方案,称为此

一个小的费用(每SMS的便士),他们给你一个Web服务(加上API,.NET,ASP,java,C++等)。虽然不是免费的,但它很简单,也很有效


最基本的是,只需在查询字符串中使用号码和消息文本发出URL请求,其余的由他们的服务器完成。

发送SMS消息的主要选项是使用现有的SMS提供商。根据我的经验(这在SMS消息传递web应用程序中非常广泛),您经常会发现,与不同的提供商协商是为您的应用程序获得最佳交易的最佳方式

不同的提供商通常提供不同的服务和功能。我最喜欢的供应商是TM4B(),事实上,它在过去曾与我愉快地协商降低费率。这些家伙有很好的价格,覆盖了全球很大一部分地区,并且有很好的客户服务

下面是从我的一个live web应用程序中提取的一些代码(以及一些模糊的部分),用于通过其API发送简单消息:

require_once("tm4b.lib.php");
$smsEngine = new tm4b();

// Prepare the array for sending
$smsRequest["username"] = "YOURUNAME";
$smsRequest["password"] = "YOURPWORD";
$smsRequest["to"] = "+441234554443";
$smsRequest["from"] = "ME!";
$smsRequest["msg"] = "Hello, test message!";

// Do the actual sending
$smsResult = $smsEngine->ClientAPI($smsRequest);

// Check the result
if( $smsResult['status'] == "ok" ) {
    print "Message sent!";
} else {
    print "Message not sent.";
}
我过去使用过的许多其他供应商都有非常相似的接口,在定价方面都非常有竞争力。您只需四处寻找适合您需要的提供商


在成本方面,大多数西方国家的价格都在几便士/美分之间(但大多数第三世界国家的价格略高,所以要小心)。如果你想从供应商那里获得合理的价格,大多数供应商都必须批量支付,但他们通常会与你协商“比平时小”的批次。大多数供应商都会提供后付费选项,但只有在您与他们成功完成几笔交易后。。。其他人从一开始就提供这种服务,但价格太高。

我不知道这是否适用于你,但为了省钱,我做了很多次,就是询问用户档案中的运营商是什么,然后尝试将其与之匹配。基本上,许多/大多数运营商都有一个电子邮件地址连接到一个电话号码,您可以轻松地向该号码发送短信。例如,如果您有ATT,并且您的电话号码是786-262-8344,则发送电子邮件至7682628344@txt.att.net将免费向您发送包含邮件主题/正文的短信。这项技术几乎可以免费覆盖所有美国用户。显然,根据您的应用程序的需要,这可能不可能/足够/需要,但这是一个需要注意的选项。

我最近不得不在我们的网站上实现用户启动的sms功能,并发现www.dotgo.com服务很有帮助。它是免费的。。。看起来它是由几位博士创建的,作为某种类型的无状态消息传递框架(想想http请求-响应模型)

为了让它工作,您需要设置一个“index.crml”文件(类似于index.html、php等)。我们的看起来是这样的(很抱歉,将所有内容放在一行上…在显示时遇到一些问题):


在我们的站点上,索引文件依次引用/sms/flashbull.php文件,该文件(不包括打开和关闭php标记)如下所示:

$wordArray = explode(' ',$_REQUEST['sys_argument']);
$username = strip_tags($wordArray[0]);
$messageBody = str_replace($username.' ', '', $_REQUEST['sys_argument']);
require_once 'Database.php';
$dbh = new Database('bulbstorm');
$args = array($username, $messageBody);
$dbh->execMysqlProc('uspAddFlashbulb', $args);
print "<message><content>Bulb received and saved to your account</content></message>";
$URL = "http://v2.smsgateway.me/API/Send/Single.php";

$postdata = http_build_query(
    array(
    'Username' => "foo@bar.co.uk",
    'Password' => "password",
    'Number' => "+447791064782",
    'Message' => "Hello World!",
    )
);

$opts = array('http' => array('method'  => 'POST', 'header'  => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));

$context  = stream_context_create($opts);

$result = file_get_contents($URL, false, $context);
$wordArray=explode(“”,$\u请求['sys\u参数']);
$username=strip_标记($wordArray[0]);
$messageBody=str_replace($username.'','',$_请求['sys_参数']);
需要_once“Database.php”;
$dbh=新数据库('BulbForm');
$args=array($username,$messageBody);
$dbh->execMysqlProc('uspaddflashbull',$args);
打印“收到灯泡并保存到您的帐户”;
无论如何,我只提供了一些代码来说明框架是如何工作的,以及要编写多少代码来实现功能

有一些限制。最重要的是,一切都是用户初始化的。因此,如果您主要希望发送发送的消息之前没有您的用户向您的站点发送消息以“获取”响应消息,那么这可能不是您想要的。但是我们在做什么。其中一位创始人甚至亲自回复了一封电子邮件,非常有帮助


其中一个我们还没有使用的功能,但已经考虑到的是他们的订阅功能。。。用户可以将其设置为dotgo系统定期轮询站点上的页面,并按照用户指定的时间表向其手机发送sms消息。再说一次,我没有走那么远,但觉得它很有趣。

只发送,但又便宜又容易

最简单的方法就是使用上面提到的@email hack。让用户输入他们的电话号码并从列表中选择他们的运营商很容易。在任何开发平台上,一旦你有了用户的信息,就可以很容易地发送电子邮件

然而,我发现这种方法有两个非常重要的局限性:

  • 首先,蜂窝运营商都将通过其电子邮件网关发送的SMS消息优先于其他SMS流量。可能是因为寄件人没有为此支付他们。如果最小化延迟对您很重要,请不要使用此方法
  • 第二点是,特别是在这个移动电话号码的现代时代,用户会不时更换运营商,而且几乎肯定会忘记
    <?php
    $SMSLIB["phone"] = '44111222333'; // your phone number
    $SMSLIB["key"] = 'abcdefghijklmnopqrs'; // your personal API code
    include("smslib.php"); // we will provide you with smslib.php file
    sendSMS("test message", $SMSLIB["phone"]); // function which sends the message
    ?>
    
    $URL = "http://v2.smsgateway.me/API/Send/Single.php";
    
    $postdata = http_build_query(
        array(
        'Username' => "foo@bar.co.uk",
        'Password' => "password",
        'Number' => "+447791064782",
        'Message' => "Hello World!",
        )
    );
    
    $opts = array('http' => array('method'  => 'POST', 'header'  => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));
    
    $context  = stream_context_create($opts);
    
    $result = file_get_contents($URL, false, $context);
    
    <?php
    // Get the PHP helper library from twilio.com/docs/php/install
    require_once('/path/to/twilio-php/Services/Twilio.php'); // Loads the library
    
    // Your Account Sid and Auth Token from twilio.com/user/account
    $sid = "{{ account_sid }}"; 
    $token = "{{ auth_token }}"; 
    $client = new Services_Twilio($sid, $token);
    
    $client->account->messages->sendMessage("+14158141829", "+14159352345", "Hi Shyju, Sorry it took me so long to get back to you. <3 The Internet.");
    
    function sendSMS($number,$message) {
        $request = message api link;
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $request);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($ch);
        curl_close($ch);
        return split(',',$response);
    }
    
    $smsSender = new SmsZilla\SmsSender(new SmsZilla\Adapter\MockAdapter());
    
    $smsSender->setRecipient('605123456');
    // adding more recipients (with and without country code)
    $smsSender->setRecipient(['511654321', '48511654987', '+41751654987']);
    
    $smsSender->setText("Message text");
    $result = $smsSender->send();
    
    curl -X "POST" https://api.wavecell.com/sms/v1/amazing_hq/single \
        -u amazing:1234512345 \
        -H "Content-Type: application/json" \
        -d $'{ "source": "AmazingDev", "destination": "+6512345678", "text": "Hello, World!" }'