php-来自Web应用程序的SMS

我只想从Web应用程序中使用PHP发送SMS。谁能告诉我该怎么做?我需要为此做些什么?

Shyju asked 2019-10-07T23:51:38Z
20个解决方案
48 votes

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

Paolo Bergantino answered 2019-10-07T23:51:51Z
26 votes

发送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.";
}

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

关于成本,您正在查看的价格在大多数西方国家中为几便士/美分(不过,在大多数第三世界国家中,价格要高一些,因此请当心)。 如果您想从他们那里获得较高的价格,大多数供应商将不得不批量支付,但他们通常会与您协商“比平常少”的批次。 大多数提供商确实提供后付款选项,但是只有在您成功完成与他们的几笔交易后,其他提供商才开始提供…...其他提供商从一开始就提供此选项,但是价格过高。

James B answered 2019-10-07T23:52:43Z
12 votes

仅发送,但便宜又容易

最简单的方法肯定是使用上面提到的@Paolo Bergantino的电子邮件黑客。 要求用户输入他们的电话号码并从列表中选择他们的运营商很容易。 在获得任何用户信息后,在几乎所有开发平台上,发送电子邮件也很容易。

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

  1. 首先是蜂窝运营商都将通过其电子邮件网关发送的SMS消息的优先级置于其他SMS流量之下。 可能是因为发件人没有为此支付这些费用。 如果最小化延迟对您很重要,请不要使用此方法。
  2. 第二点是,尤其是在当今便携式电话号码时代,用户会不时切换运营商,几乎可以肯定会忘记告诉您。 如果您需要从现在起一两年内将可靠的SMS消息发送给同一个人,则此方法将开始失败。

廉价发送和接收

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

专业素质

如果您需要低延迟,高可靠性并且没有广告,那么您几乎必须通过SMS聚合器,除非您足够大以与每个运营商进行单独协商。

我发现使用SMS聚合器要注意的最大事情是,它们中的许多实际上是由营销公司而不是应用程序托管商建立的,他们并不真正了解使用SMS作为用户与之交互的渠道 服务供应商。 我发现,使用“您的竞选活动”而不是“您的申请”一词的聚集者是最严重的犯罪者。 远离它们,并找到一个了解您作为应用程序开发人员需求的聚合器。

sblom answered 2019-10-07T23:54:09Z
11 votes

Twilio最近发布了一个用于发送SMS消息的API。 该api非常简单,用于发送SMS的基本REST接口,以及用于响应的返回文档。

Tim Lytle answered 2019-10-07T23:54:33Z
8 votes

嗨,我叫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.");
Jarod Reyes answered 2019-10-07T23:54:57Z
4 votes

为此,我们使用了称为TextAnywhere的商业解决方案。

只需少量费用(每条SMS几便士),他们即可为您提供Web服务(以及用于.NET,ASP,Java,C ++等的API)。 尽管不是免费的,但它很容易且有效。

从最基本的意义上讲,它就像用QueryString中的数字和消息文本进行URL请求一样简单,其余的工作由他们的服务器完成。

Dylan Beattie answered 2019-10-07T23:55:35Z
4 votes

如果您知道承运人,那么您就是黄金。 大多数都有电子邮件网关。 如果没有,您可以使用Clickatell API,每条消息的费用约为$ 0.04。 我现在正在调查一个黑客,您将在其中使用GSM调制解调器和带有无限SMS的个人手机计划。 如果可行,这可以节省很多钱。

Tony answered 2019-10-07T23:55:59Z
3 votes

如果您愿意投资购买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);

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

user3144832 answered 2019-10-07T23:56:36Z
2 votes

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

lcvinny answered 2019-10-07T23:57:00Z
2 votes

dk text不仅允许您将大量文本消息发送给请求的客户,而且还将很快提供google语音集成,以便与您的google语音帐户使用同一系统

Michael answered 2019-10-07T23:57:24Z
2 votes

要从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
?>
george answered 2019-10-07T23:57:49Z
1 votes

最近,我不得不在我们的网站上实施用户初始化的短信功能,并发现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系统定期轮询您网站上的网页,并根据 安排用户指定的时间。 同样,我没有走那么远,但认为这很有趣。

codemonkey answered 2019-10-07T23:58:48Z
0 votes

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

Ariel answered 2019-10-07T23:59:11Z
0 votes

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

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

ng. answered 2019-10-07T23:59:42Z
0 votes

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

通过使用PHP和Ajax演示SMS网关API

kva answered 2019-10-08T00:00:13Z
0 votes

移动文本警报具有用于发送SMS消息的PHP API。

Jimmy Pelton answered 2019-10-08T00:00:36Z
0 votes
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);
}
shiyani suresh answered 2019-10-08T00:00:54Z
0 votes

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

Jarosław Wasilewski answered 2019-10-08T00:01:25Z
0 votes

您可以使用我们的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!" }'

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

结果是:SMS

以下问题涵盖了有关在PHP中发送HTTP请求的详细信息:

  • 带JSON正文的POST请求
  • 将数据POST到PHP中的URL
  • 如何使用PHP发送POST请求?
astef answered 2019-10-08T00:02:30Z
0 votes

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

Pavel Samoylenko answered 2019-10-08T00:02:56Z
translate from https://stackoverflow.com:/questions/432944/sms-from-web-application