carpe-hora/smssender

此软件包已被 废弃 且不再维护。未建议替代软件包。

几乎缺失的 SMS 发送 PHP 库。

1.4.0 2014-10-20 07:10 UTC

This package is auto-updated.

Last update: 2022-02-01 12:20:05 UTC


README

SmsSender 是一个库,可以帮助您通过您的 Web 应用程序发送短信。它提供了一个 SMS 操作的抽象层。该库分为两部分:HttpAdapterProvider,并且非常易于扩展。

注意:还有一个 捆绑包,它将此库集成到 Symfony2 应用程序中。

状态

此项目已被 弃用,不应使用。

如果有人神奇地出现并想维护此项目,我将很高兴将访问权限授予此存储库。

HttpAdapters

HttpAdapters 负责从远程 API 获取数据。

目前有以下适配器

  • BuzzHttpAdapter 用于 Buzz,这是一个用于发送 HTTP 请求的轻量级 PHP 5.3 库;
  • CurlHttpAdapter 用于 cURL

Providers

Providers 包含提取有用信息的逻辑。

以下提供者被支持

安装

推荐通过 composer 安装 SmsSender。

只需为您的项目创建一个 composer.json 文件

{
    "require": {
        "Carpe-Hora/SmsSender": "~1.0"
    }
}

使用方法

首先,您需要一个 适配器 来查询 API

<?php

$adapter  = new \SmsSender\HttpAdapter\BuzzHttpAdapter();

BuzzHttpAdapter 可调整,实际上您可以向此适配器传递一个 Browser 对象

<?php

$buzz    = new \Buzz\Browser(new \Buzz\Client\Curl());
$adapter = new \SmsSender\HttpAdapter\BuzzHttpAdapter($buzz);

现在,您必须选择您的 提供者

您可以使用内置的提供者或编写自己的。您还可以注册所有提供者并在以后决定。这就是我们要做的

<?php

$sender = new \SmsSender\SmsSender();
$sender->registerProviders(array(
    new \SmsSender\Provider\EsendexProvider(
        $adapter, '<ESENDEX_USER>', '<ESENDEX_PASS>', '<ESENDEX_ACCOUNT>'
    ),
    new \SmsSender\Provider\OtherProvider($adapter)
));

一切正常,享受吧!

API

主要方法称为 send(),它接收一个电话号码、一条消息和发起者的名称。

<?php

$result = $sender->send('0642424242', 'It\'s the answer.', 'Kévin');
// Result is:
// "id"        => string(7) "some Id"
// "sent"      => bool "true"
// "status"    => string(9) "delivered"
// "recipient" => string(10) "0642424242"
// "body"      => string(17) "It's the answer."

send() 方法返回一个包含以下 API 的 Sms 结果对象,该对象还实现了 ArrayAccess 接口

  • getId() 将返回 id
  • isSent() 布尔值表示短信是否已发送;
  • getStatus() 布尔值表示短信的状态(请参阅 ResultInterface 接口以获取完整的状态列表);
  • getRecipient() 字符串表示收件人的电话号码;
  • getBody() 通过提供者发送的消息;

SmsSender 的 API 是流畅的,您可以编写

<?php

$result = $sender
    ->registerProvider(new \My\Provider\Custom($adapter))
    ->using('custom')
    ->send('0642424242', 'It\'s the answer.', 'Kévin');

using() 方法允许您选择要使用的 适配器。当您处理多个适配器时,您可能想选择其中一个。默认行为是使用第一个,但这可能很烦人。

单个接收者策略

有时您想在开发环境中配置单个接收者策略,以避免向真实用户发送短信,但仍允许开发者检查短信阅读器中的渲染消息。

通过使用SingleRecipientSender,您可以通过装饰器模式无需其他更改即可发送短信。只需传递正在使用的发送者(例如SmsSender)和接收者电话号码,即可完成。

<?php

$sender = new \SmsSender\SmsSender();
$sender->registerProviders(array(
    new \SmsSender\Provider\EsendexProvider(
        $adapter, '<ESENDEX_USER>', '<ESENDEX_PASS>', '<ESENDEX_ACCOUNT>'
    ),
    new \SmsSender\Provider\OtherProvider($adapter)
));

$singleRecipientSender = new \SmsSender\SingleRecipientSender($sender, '0601010101');

现在所有短信都将透明地发送到0601010101

<?php

$result = $singleRecipientSender>send('0642424242', 'It\'s the answer.', 'Kévin');
// Result is:
// "id"        => string(7) "some Id"
// "sent"      => bool "true"
// "status"    => string(9) "delivered"
// "recipient" => string(10) "0642424242" <== The recipient phonenumber is not the single recipient one :)
// "body"      => string(17) "It's the answer."

延迟发送

默认情况下,SmsSender在调用send方法时立即发送消息。但是,如果您想避免SmsSender和短信提供商之间通信的性能影响,您可以选择使用“延迟发送者”。

该发送者通过将消息放入池中而不是直接发送消息来实现。这意味着您可以在实际发送消息之前,例如等待响应流式传输到用户。

目前,支持的池是MemoryPool。以下是如何设置的示例

<?php

$sender = new \SmsSender\SmsSender();
$sender->registerProvider(new \SmsSender\Provider\DummyProvider());

$pool = new \SmsSender\Pool\MemoryPool();

$delayedSender = new \SmsSender\DelayedSender($sender, $pool);

$delayedSender->send('0601010101', 'foo'); // nothing is sent here, the message is only queued
$delayedSender->send('0601010102', 'bar'); // same here

$results = $delayedSender->flush(); // the two previous message are sent here

扩展功能

您可以提供自己的适配器,只需创建一个实现HttpAdapterInterface的新类。

您还可以通过实现ProviderInterface来编写自己的提供商

注意,AbstractProvider类可以通过提供有用功能来帮助您。

单元测试

要运行单元测试,您需要一组可以使用composer安装的依赖项。

php composer.phar install --dev

安装后,只需运行以下命令

./vendor/bin/phpunit

由于需要API密钥,您将获得一些跳过的单元测试。

phpunit.xml.dist文件重命名为phpunit.xml,然后取消注释以下行并添加您的API密钥

<php>
      <!-- <server name="TWILIO_ACCOUNT_SID" value="Your Twilio account sid" /> -->
      <!-- <server name="TWILIO_API_SECRET" value="Your Twilio API secret" /> -->
</php>

完成。

感谢

由于这个库受到willdurandGeocoder的极大启发,他在本README中应得到特别提及 ;)

致谢

许可证

SmsSender在MIT许可证下发布。有关详细信息,请参阅捆绑的LICENSE文件。