来自Web应用程序的SMS
我只想从PHP中的Web应用程序发送短信。 谁能告诉我如何做到这一点? 我需要为此做什么?
我不知道这是否适用于你,但是我多次为自己省钱,就是在用户的个人资料中询问他的承运人是什么,然后尝试将其与this list
相匹配。 从本质上讲,许多/大多数运营商都有一个电子邮件地址连接到一个电话号码,很容易让你发送文本的数字。 例如,如果您有ATT,并且您的电话号码是786-262-8344,则发送到7682628344@txt.att.net的电子邮件将免费向您发送包含电子邮件主题/正文的文本消息。 这项技术几乎涵盖了所有美国用户免费。 显然,根据您的应用程序的需要,这可能是不可能的/充分的/期望的,但是这是一个选项要注意的。
发送短信的主要选项是使用现有的SMS提供商。 根据我的经验(使用SMS消息传递Web应用程序的广泛经验),您经常会发现与不同提供商进行协商是获得最佳应用程序的最佳方式。
不同的提供商通常提供不同的服务和不同的function。 TM4B( http://www.tm4b.com )是我最喜欢的供应商,事实上,过去和我一起高兴地与我谈判的供应商。 这些人有很好的利率,覆盖了全球的很大一部分,并有优秀的客户服务。
下面是一些从我的实时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."; }
过去我使用过的许多其他供应商都有非常相似的界面,在定价方面都非常有竞争力。 你只需要四处寻找一个适合你的需求的提供者。
在成本方面,你看大多数西方国家的价格在几便士/分(不过大多数第三世界国家的价格略高一点,所以要小心)。 如果你想从他们那里得到不错的利率,大多数供应商你将不得不支付大量的费用,但是他们经常会和你谈判'小于平时'的批次。 大多数供应商提供后期付款选项,但只有当您成功完成了一些与他们的交易…其他人提供从一开始,但价格是敲诈勒索。
只发送,但便宜又容易
最简单的方法是使用@ Paolo Bergantino上面提到的电子邮件黑客。 要求用户input电话号码并从列表中select运营商很容易。 在任何开发平台上,一旦获得用户信息,发送电子邮件也很容易。
然而,我发现有两个非常重要的限制:
- 首先是蜂窝运营商将通过其电子邮件网关发送的SMS消息优先于其他SMS业务。 可能是因为他们没有得到寄件人的付款。 如果最小化延迟对您很重要,请勿使用此方法。
- 二是特别是在这个现代化的便携式电话号码时代,用户会不时更换运营商,几乎肯定会忘记告诉你。 如果您需要在一两年后能够可靠地将SMS消息发送给同一个人,则此方法将开始失败。
发送和接收便宜
如果您尝试将网站设置为按预算发送和接收 SMS消息,则可以使用文本标记等服务。 TextMarks允许您为服务select一个关键字,允许用户通过TextMarks的共享短代码41411将消息发送给您。这里的关键是他们在每条消息中保留了20个字符,用于支付其服务的短广告。
专业素质
如果你需要低延迟,高可靠性,没有广告,你几乎不得不通过一个短信聚合,除非你足够大,与每个运营商单独谈判。
我发现最重要的事情是用SMS聚合器注意到,他们中的很多人确实是成为营销公司,而不是应用程序主机 – 他们并不了解使用SMS作为用户可以与之互动的渠道服务供应商。 我发现使用短语“您的广告系列”而不是“您的应用程序”的聚合器是最糟糕的违规者。 远离他们,并find一个聚合器,了解您作为应用程序开发人员的需求。
Twilio最近发布了一个API来发送短信 。 api比较简单, 发送短信的基本REST接口 ,以及发回文件回复 。
嗨,我的名字是Jarod,我为Twilio.com工作,所以我有点偏见。 但是据说,使用Twilio REST API从您的PHP Web应用程序发送短信是非常容易的。 这是一个简单的例子:
<?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.");
我们使用称为TextAnywhere的商业解决scheme。
一小笔费用(每个SMS几便士),他们给你一个Web服务(加上.NET,ASP,Java,C ++等的API)。 虽然它不是免费的,但它很容易,而且很有效。
在最基本的方面,就像使用QueryString中的数字和消息文本进行URL请求一样简单,其服务器为您完成剩下的工作。
如果你知道载体,你是金。 大多数有电子邮件网关。 如果没有,您可以使用Clickatell API,每个消息的费用大约为0.04美元。 我正在寻找一个黑客现在你会使用一个GSM调制解调器和个人手机计划与无限的短信。 这可以节省很多钱,如果它的工作。
如果你愿意投资一个Android智能手机,你可以设置自己的SMS网关,最后出来便宜。
我使用SMS GATEWAY ME这是一个免费的Android应用程序,你可以发送这样的消息:
$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);
在他们的网站上有一个文件,告诉你如何接受传入的消息。
如果您需要一个可靠的方式发送许多短信,你应该寻找一个短信服务提供商,充当一个网站的短信网关。 在这种情况下,将会有一个基于http的界面,允许你通过调用一个URL发送短信,并传递收件人和消息作为参数。
dktext不仅可以让你发送文字信息给请求的客户,但很快就会提供谷歌语音集成使用相同的系统与您的谷歌语音帐户
要从Web应用程序发送短信,您需要将应用程序连接到SMS网关。 大多数短信网关提供可以用来做这件事的外部API。 他们通常有文档可以用来找出如何在您的PHP代码中集成SMS通知。 不幸的是,没有可靠的免费短信服务提供,所以你必须支付这个短信服务。 你可以检查http://www.phpjabbers.com/web-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 ?>
PHP需要调用外部消息服务提供者RestAPI来发送SMS。 你可以通过两种简单的方式来调用:
使用Curl调用API:需要在服务器上安装curl并使用as
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sms_gateway_url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); curl_close($ch);
否则使用PHP file_get_contents()
这里是PHP类和testing代码发送短信使用批量短信网关服务 ,您可以尝试与您的Web应用程序。
我最近必须在我们的网站上实现用户启动的短信function,并发现www.dotgo.com服务很有帮助。 它是免费的…看起来它是由几个博士创build的一种无状态的消息框架(认为HTTP请求响应模型)。
为了让它工作,你build立了一个“index.crml”文件(类似于index.html,php等)。 我们看起来像这样(对不起,所有这一切都在一行…有一些问题得到它显示,否则):
<?xml version="1.0" encoding="UTF-8"?><cmrl xmlns:dotgo="http://dotgo.com/cmrl/1.0"><match pattern="*"><engine href="http://www.bulbstorm.com/sms/flashbulb.php"/></match></cmrl>
在我们的网站上,索引文件依次引用/sms/flashbulb.php文件,除了打开和closuresphp标签外,其他文件如下所示:
$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>";
无论如何,我只包含代码,以了解框架的function,以及如何编写代码来获取function。
有一些限制。 最重要的是,一切都是由用户提出的。 所以,如果你主要是想发送不在用户之前发送消息到你的网站的传出消息来“获取”响应消息,那么它可能不是你想要的。 尽pipe我们正在做的事情。 其中一位创始人甚至亲自回复了电子邮件的问题,非常有帮助。
我们还没有使用的function之一,但他们已经考虑到了他们的订阅function…用户可以设置它,使dotgo系统定期轮询您的网站上的一个页面,发送短信到他们的手机每个安排用户指定。 再次,我没有那么做,但认为这很有趣。
基本上,每个运营商都有一个电子邮件网关,您将需要发送电子邮件。 您需要提前知道运营商,以便知道发送短信的电子邮件地址。
有几个SMPP库可用于PHP,一个是以下。 这是用于与SMS服务器通信的协议。
http://pear.php.net/reference/Net_SMPP-0.4.3/Net_SMPP/_SMPP_Net_SMPP-0.4.3_SMPP_php.html
我已经在PHP中使用下面的SMS API url与jQuery ajax方法,也可以存储每一个短信的细节在MySQL数据库中进行跟踪。
使用PHP和Ajax演示SMS Gateway API
移动文本警报具有用于发送SMS消息的PHP API。
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); }
使用多网关解决scheme是个好主意。 我已经创build了一个用于我的目的,但我认为这可能是有用的任何人想轻松设置: https : //packagist.org/packages/orajo/sms-zilla
$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();
现在这个图书馆支持5个提供商,第6个在开发中,其他的正在计划中。
您可以使用我们的API和涵盖该主题的本教程 。
但是,基本上,发送单个短信就像发送HTTP POST请求一样简单:
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!" }'
您的账户1234512345
, 1234512345
– 密码(使用更强大的密码!)和amazing_hq
是您的子账户。
其结果是:
有关在PHP中发送HTTP请求的详细信息包含在以下问题中:
- POST请求与JSON正文
- POST数据到PHP中的URL
- 如何使用PHP发送POST请求?