【发布时间】:2010-09-30 18:47:02
【问题描述】:
我只想从我的 Web 应用程序中用 PHP 发送 SMS。 谁能告诉我该怎么做? 为此我需要做些什么?
【问题讨论】:
我只想从我的 Web 应用程序中用 PHP 发送 SMS。 谁能告诉我该怎么做? 为此我需要做些什么?
【问题讨论】:
我认为,这是这个主题中最古老的问题。 主要回答- 付费网关的广告。 但还有另一种方式 - 来自安卓设备(SIM 卡)、安卓网关的短信。 我用简单的 API 创建了一个免费的开源应用程序:https://github.com/pavelakafoks/SmsTransmitter 谷歌播放:https://play.google.com/store/apps/details?id=info.ininfo.smstransmitter 您可以将我的应用程序用于您的网站,也可以根据我的资源构建您自己的 android 应用程序。 它比互联网短信网关更便宜。 我希望它对某人有用。
【讨论】:
您可以使用我们的 API 和 this 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 是您的子帐户。
有关在 PHP 中发送 HTTP 请求的详细信息包含在以下问题中:
【讨论】:
使用多网关解决方案是个好主意。我已经为我的目的创建了一个,但我认为它对任何想要轻松设置的人都有用: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 个正在开发中,其他正在计划中。
【讨论】:
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);
}
【讨论】:
大家好,我叫 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.");
【讨论】:
如果您愿意投资安卓智能手机,您可以设置自己的短信网关,最终价格会更便宜。
我使用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);
他们的网站上有一个文档告诉您如何接受传入的消息。
【讨论】:
要从 Web 应用程序发送 SMS,您需要将应用程序连接到 SMS Gateway。大多数 SMS 网关提供可用于执行此操作的外部 API。他们通常有文档,您可以使用这些文档了解如何将 SMS 通知集成到您的 PHP 代码中。不幸的是,没有可靠的免费短信服务提供,因此您必须为此短信服务付费。您可以查看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
?>
【讨论】:
dktext 不仅允许您向请求的客户发送 bult 短信,而且很快将提供 google 语音集成,以便使用与您的 google 语音帐户相同的系统
【讨论】:
Twilio最近发布了一个API来发送SMS messages。 api比较简单,基本的REST interface to send SMS,还有一个post returning document to respond。
【讨论】:
我不知道这是否适用于您,但我多次为自己省钱的做法是在用户的个人资料中询问他的运营商是什么,然后尝试将其与this list 匹配。从本质上讲,许多/大多数运营商都有一个连接到电话号码的电子邮件地址,您可以轻松地向该号码发送文本。例如,如果您有 ATT 并且您的电话号码是 786-262-8344,则发送至 7682628344@txt.att.net 的电子邮件将免费向您发送包含电子邮件主题/正文的短信。这项技术几乎可以免费覆盖您的所有美国用户。显然,根据您的应用程序的需要,这可能是不可能/足够/不希望的,但这是一个需要注意的选项。
【讨论】:
如果您了解承运人,您就是黄金。大多数都有电子邮件网关。如果没有,您可以使用 Clickatell API,每条消息的成本约为 0.04 美元。我现在正在研究一种黑客攻击,您可以在其中使用 GSM 调制解调器和您的个人手机计划以及无限短信。如果可行,这可以节省很多钱。
【讨论】:
只发送,但便宜又容易
最简单的方法肯定是使用上面提到的@Paolo Bergantino 的电子邮件黑客。要求您的用户输入他们的电话号码并从列表中选择他们的运营商很容易。在获得用户信息后,在任何开发平台上都可以轻松发送电子邮件。
不过,我发现这种方法有两个非常重要的限制:
以低廉的价格发送和接收
如果您试图将您的网站设置为发送和接收 SMS 消息,并且预算有限,您可以使用TextMarks 等服务。 TextMarks 允许您为您的服务选择一个关键字,该关键字允许用户通过 TextMarks 的共享短代码 41411 将消息路由给您。这里的问题是他们在每条消息中保留 20 个字符用于短广告以支付他们的服务费用。
专业品质
如果您需要低延迟、高可靠性和无广告,那么您几乎必须通过 SMS 聚合器,除非您的规模大到可以单独与每个运营商协商。
我发现 SMS 聚合器最需要注意的一点是,它们中的许多都是真正成立的营销公司,而不是应用程序主机 - 他们并不真正了解将 SMS 作为用户通过它的渠道可以与服务提供商交互。我发现使用短语“你的活动”而不是“你的应用程序”的聚合器是最严重的违规者。远离他们,并找到一个了解您作为应用程序开发人员需求的聚合器。
【讨论】:
我最近不得不在我们的网站上实现用户发起的短信功能,并发现 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 系统定期轮询您网站上的页面,向他们的用户发送短信根据用户指定的时间表拨打电话。再说一次,我并没有走那么远,但认为它很有趣。
【讨论】:
您发送 SMS 消息的主要选项是使用现有的 SMS 提供商。以我的经验(这在 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.";
}
我过去使用过的许多其他提供商都有非常相似的界面,而且在定价方面都非常具有竞争力。您只需四处寻找适合您需求的提供商。
在成本方面,大多数西方国家的价格从几便士/美分不等(不过,大多数第三世界国家的价格略高,所以要小心)。如果您想从他们那里获得体面的价格,您将不得不批量支付大多数供应商,但他们通常会与您协商“比平常少”的批次。大多数提供商确实提供后付款选项,但只有在您成功完成与他们的几笔交易时...其他提供商从一开始就提供,但价格过高。
【讨论】:
为此,我们使用名为 TextAnywhere 的商业解决方案。
只需支付少量费用(每条 SMS 几便士),他们就可以为您提供 Web 服务(以及用于 .NET、ASP、Java、C++ 等的 API)。虽然不是免费的,但它很简单而且很有效。
在最基本的情况下,它就像使用 QueryString 中的数字和消息文本发出 URL 请求一样简单,其余的由他们的服务器为您完成。
【讨论】:
如果您需要一种可靠的方式来发送多条 SMS,您应该寻找充当 Web 到 SMS 网关的 SMS 服务提供商。在这种情况下,将有一个基于 http 的接口,允许您通过调用 URL 并将收件人和消息作为参数来发送 SMS。
【讨论】:
基本上,每个运营商都有一个电子邮件网关,您需要向其发送电子邮件。您需要提前了解运营商,以便知道发送 SMS 消息的电子邮件地址。
【讨论】: