来自Web应用程序的SMS

时间:2009-01-11 13:42:43

标签: php sms

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

20 个答案:

答案 0 :(得分:48)

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

答案 1 :(得分:26)

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

不同的提供商通常提供不同的服务和不同的功能。 TM4B(http://www.tm4b.com)是我最喜欢的提供商,也是我过去与我协商过低利率的提供商。这些人拥有优惠的价格,覆盖全球的很大一部分,并提供优质的客户服务。

以下是从我的一个实时网络应用程序中提取的一些代码(以及一些模糊的部分),用于通过其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.";
}

我过去使用的许多其他提供商都有非常相似的界面,而且在定价方面都非常具有竞争力。您只需要四处寻找适合您需求的提供商。

关于成本,你看大多数西方国家的价格从几便士/美分不等(大多数第三世界国家的价格略高一些,但要注意)。大多数供应商,如果你想从它们那里获得不错的价格,你将不得不批量支付,但他们经常与你谈判“比平时更小”的批次。大多数提供商确实提供后付款选项,但只有当您成功完成与他们的一些交易时...其他人从一开始就提供它,但价格是敲诈的。

答案 2 :(得分:12)

仅发送,但便宜又简单

最简单的方法是使用上面提到的@ Paolo Bergantino的电子邮件黑客。您可以轻松地要求用户输入他们的电话号码并从列表中选择他们的运营商。在任何开发平台上,只要您拥有用户的信息,就可以轻松发送电子邮件。

然而,我用这种方法发现了两个非常重要的限制:

  1. 首先,蜂窝网络运营商优先考虑通过其电子邮件网关发送的SMS消息,低于其他短信流量。可能是因为他们没有得到发件人的报酬。如果最小化延迟对您很重要,请不要使用此方法。
  2. 第二是特别是在现代便携式电话号码时代,用户会不时转换运营商,几乎肯定会忘记告诉你。如果您需要能够在一年或两年后可靠地向同一个人发送SMS消息,此方法将开始失败。
  3. 以便宜的方式发送和接收

    如果您尝试将网站设置为按预算发送并接收短信,则可以使用TextMarks等服务。 TextMarks允许您为您的服务选择一个关键字,允许用户通过TextMarks的共享短代码41411向您发送消息。这里的问题是他们在每条消息中保留20个字符,以便为他们的服务支付短广告。

    专业品质

    如果你需要低延迟,高可靠性和无广告,你几乎不得不通过短信聚合器,除非你足够大,可以单独与每个运营商协商。

    我发现使用SMS聚合器注意的最重要的事情是,他们中的许多人真的被设置为营销公司,而不是应用程序主机 - 他们并不真正理解使用SMS作为用户的渠道可以与服务提供商互动。我发现使用“您的广告系列”而非“您的应用”这一短语的聚合器是最严重的违规者。远离他们,找到一个了解您作为应用程序开发人员的需求的聚合器。

答案 3 :(得分:11)

Twilio最近发布了一个发送SMS messages的API。 api相当简单,基本REST interface to send SMSpost returning document to respond

答案 4 :(得分:8)

您好,我的名字是Jarod,我在Twilio.com工作,所以我有点偏颇。但话说回来,使用Twilio REST API从PHP Web应用程序发送SMS非常容易。这是一个简单的例子:

<?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.");

答案 5 :(得分:4)

我们使用名为TextAnywhere的商业解决方案。

只需支付少量费用(每条短信几便士),它们就会为您提供Web服务(以及.NET,ASP,Java,C ++等API)。这很简单,虽然它不是免费的,但它确实有效。

最基本的,就像使用QueryString中的数字和消息文本发出URL请求一样简单,他们的服务器会为您完成剩下的工作。

答案 6 :(得分:4)

如果你了解承运人,你就是金。大多数都有电子邮件网关。如果不是,您可以使用Clickatell API,每条消息的费用约为0.04美元。我正在寻找一个黑客,你现在将使用GSM调制解调器和你的个人手机计划与无限短信。如果它有效,这可以节省很多钱。

答案 7 :(得分:3)

如果您愿意投资Android智能手机,您可以设置自己的短信网关,最终会更便宜。

我使用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);

他们的网站上有一个文档,告诉您如何接受传入的消息。

答案 8 :(得分:2)

如果您需要一种可靠的方式来发送许多短信,您应该寻找一个短信服务提供商作为短信网关的网络。在这种情况下,将有一个基于http的界面,允许您通过调用URL并将收件人和邮件作为参数传递来发送SMS。

答案 9 :(得分:2)

要从Web应用程序发送SMS,您需要将应用程序连接到SMS Gateway。大多数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
?>

答案 10 :(得分:2)

文字不仅允许您向发送请求的客户发送批量短信,而且很快将提供Google语音集成功能,以便将相同的系统与您的Google语音帐户配合使用

答案 11 :(得分:1)

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

为了使它工作,你设置一个“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文件,其中(不包括打开和关闭的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>";

无论如何,我只包含代码,以便了解框架的功能以及编写代码以获得实用功能的代码。

有一些限制。最重要的是一切都是用户启动的。因此,如果您主要希望发送不在您的用户之前向您的网站发送消息的外发消息来“获取”响应消息,那么它可能不是您想要的。尽管我们正在做的事情。其中一位创始人甚至亲自回复了一封电子邮件问题并且非常有帮助。

我们尚未使用但已考虑的功能之一是其订阅功能...用户可以对其进行设置,以便dotgo系统定期轮询您网站上的网页,向他们发送短信根据用户指定的时间表的电话。再一次,我没有那么做,但认为这很有意思。

答案 12 :(得分:0)

有几个可用于PHP的SMPP库,其中一个是以下内容。这是用于与SMS服务器通信的协议。

http://pear.php.net/reference/Net_SMPP-0.4.3/Net_SMPP/_SMPP_Net_SMPP-0.4.3_SMPP_php.html

答案 13 :(得分:0)

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

答案 14 :(得分:0)

我在PHP中使用了以下SMS API url和jQuery ajax方法,并且你可以将每个sms详细信息存储在mysql数据库中进行跟踪。

demo SMS Gateway API by using PHP and Ajax

答案 15 :(得分:0)

Mobile Text Alerts有一个用于发送短信的PHP API。

答案 16 :(得分:0)

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);
}

答案 17 :(得分:0)

使用multigateway解决方案是个好主意。我已经为我的目的创建了一个,但我认为它对任何想要轻松设置的人都有用: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个是开发者,其他人是计划的。

答案 18 :(得分:0)

您可以使用涵盖该主题的APIthis tutorial

但是,基本上,发送单个短信就像发送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!" }'

amazing是您的帐户,1234512345 - 密码(使用更强的密码!)和amazing_hq是您的子帐户。

导致: SMS

有关在PHP中发送HTTP请求的详细信息,请参阅以下问题:

答案 19 :(得分:0)

我认为,这是这个主题最古老的问题。 主要答案 - 广告付费网关。 但还有一种方法 - 来自Android设备(SIM卡),Android网关的短信。 我使用简单的API创建了一个免费的开源应用程序:https://github.com/pavelakafoks/SmsTransmitter Google Play:https://play.google.com/store/apps/details?id=info.ininfo.smstransmitter 您可以将我的应用程序用于您的站点,或者根据我的源代码构建您自己的Android应用程序。 它比互联网短信网关便宜得多。 我希望它对某些人有用。