网络应用程序发送短信

65

我只是想在我的PHP网页应用程序中发送短信。 有人能告诉我怎么做吗? 需要做哪些事情?

17个回答

52

我不知道这是否适用于您,但我经常为了节省费用向用户询问其运营商,并尝试将其与此列表进行匹配。实际上,许多/大多数运营商都有一个与电话号码相连的电子邮件地址,使您可以轻松地向该号码发送短信。例如,如果您使用ATT并且您的电话号码是786-262-8344,则发送到7682628344@txt.att.net的电子邮件将免费向您发送带有电子邮件主题/正文的文本消息。这种技术几乎可以免费覆盖您的所有美国用户。显然,根据您的应用程序需求可能无法实现/足够/所需,但这是一种需要注意的选择。


6
向运营商特定的地址发送电子邮件被垃圾邮件发送者广泛使用和滥用,现在已不如原来撰写答案时那样有效。此外,在这种方法仍然有效的情况下,常常会经历从发送电子邮件到短信消息到达之间的漫长延迟。 - TrentonMcManus
他们是如何被垃圾邮件攻击的?你是指电话号码可见吗?那么带有验证码的联系表单呢? - johnny

26

您发送短信消息的主要选择是使用现有的短信提供商。根据我的经验(我在SMS消息Web应用程序方面经验丰富),您经常会发现与不同的提供商协商是获得应用程序最优惠交易的最佳途径。

不同的提供商通常提供不同的服务和不同的功能。 我最喜欢的提供商,也是那些过去曾与我愉快地协商降价的提供商,是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.";
}

我之前使用过很多其他提供商,它们的界面非常相似,并且在定价方面都非常有竞争力。你只需寻找适合你需求的提供商。

就费用而言,对于大多数西方国家来说,价格从几便士/美分起(对于大多数第三世界国家,价格略高,因此要小心)。如果您想要从这些提供商中获得优惠价格,大多数情况下您需要批量付款,但是他们通常会与您协商“小于平常”的批次。大多数提供商确实提供后付选项,但仅当您成功完成了几笔交易后...其他人则从一开始就提供,但价格过高。


1
你知道美国有哪些服务提供商吗? - Saif Khan
我不知道有没有直接位于美国的供应商...但是大多数供应商会以非常有竞争力的价格发送到美国,因为好的供应商会按照每个国家的本地基础进行交易。 - James B

13

只发送,但便宜且易用

最简单的方法肯定是使用@Paolo Bergantino 上面提到的电子邮件黑客技巧。让你的用户输入电话号码并从列表中选择运营商很容易。一旦您获得了用户的信息,无论在哪个开发平台上都很容易发送电子邮件。

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

  1. 第一个是移动运营商都会将通过其电子邮件网关发送的短信消息优先于其他短信流量。 可能是因为发送者没有向他们支付费用。 如果您需要最小化延迟,则不要使用此方法。
  2. 第二个是特别在这个现代的可移植电话号码时代,用户会不时地更改运营商,并且几乎肯定会忘记告诉您。 如果您需要能够可靠地向同一人发送SMS消息一年或两年后,请使用此方法将开始失败。

便宜又实用的发送和接收

如果您想在预算内设置您的网站以便发送和接收SMS消息,则可以使用诸如 TextMarks 之类的服务。TextMarks允许您选择一个关键字,用于您的服务,使用户可以通过TextMarks的共享短代码41411将消息路由到您。这里的问题是,他们在每个消息中保留20个字符来投放广告,以支付他们的服务费用。

专业质量

如果您需要低延迟、高可靠性和无广告,请几乎肯定必须通过SMS聚合器,除非您足够大且能够与每个运营商进行谈判。

我发现需要注意的是很多短信聚合平台实际上是营销公司,而不是应用主机——他们并不真正理解将短信作为用户与服务提供商进行交互的渠道。我发现那些使用“你的广告活动”而不是“你的应用程序”的短信聚合平台是最糟糕的罪犯。远离这些平台,找一个能够理解您作为应用程序开发人员需求的短信聚合平台。


11

9

您好,我叫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.");

4
我们使用一种商业解决方案TextAnywhere来实现这个功能。
对于少量的费用(每条短信几便士),他们提供了一个Web服务(还有.NET、ASP、Java、C++等API)。它易于使用,而且有效,尽管不是免费的。
最基本的用法就是在 QueryString 中发送号码和消息文本的 URL 请求,然后他们的服务器会为您完成其余的工作。

这是英镑货币吗?那不是非常贵吗? - Pacerier
它与英国典型的手机服务计划相当,而对于批量短信而言,每条短信的成本比大多数普通服务计划便宜。但是,当我们向10,000人进行短信推广时,它的成本高达几百英镑。比电子邮件贵,比邮票便宜。 - Dylan Beattie

4
如果你知道运营商,那就太好了。大多数都有电子邮件网关。如果没有,您可以使用Clickatell API,每个消息约需0.04美元。我正在研究一种新的方法,您可以使用GSM调制解调器和您个人的无限短信手机计划来发送短信。如果成功,这将节省很多钱。

我也在使用ClickATell,他们的服务让我很满意。 - Alex
你是如何一开始获得无限短信的? - Pacerier

4
如果你愿意投资购买一部安卓智能手机,你可以建立自己的短信网关,最终成本更低。我使用SMS GATEWAY ME,这是一个免费的安卓应用程序,你可以像这样发送消息:
$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);

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

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

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接