carpe-hora / smssender
几乎缺失的 SMS 发送 PHP 库。
Requires
- php: >=5.3.0
Requires (Dev)
- kriswallsmith/buzz: *
- phpunit/phpunit: 3.7.*
README
SmsSender 是一个库,可以帮助您通过您的 Web 应用程序发送短信。它提供了一个 SMS 操作的抽象层。该库分为两部分:HttpAdapter
和 Provider
,并且非常易于扩展。
注意:还有一个 捆绑包,它将此库集成到 Symfony2 应用程序中。
状态
此项目已被 弃用,不应使用。
如果有人神奇地出现并想维护此项目,我将很高兴将访问权限授予此存储库。
HttpAdapters
HttpAdapters 负责从远程 API 获取数据。
目前有以下适配器
Providers
Providers 包含提取有用信息的逻辑。
以下提供者被支持
- Esendex
- Nexmo
- Twilio
- CardBoardFish
- ValueFirst(仅覆盖印度的网络)
- Swisscom(基于 GSMA OneAPI 规范)
- websms
安装
推荐通过 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>
完成。
感谢
由于这个库受到willdurand的Geocoder的极大启发,他在本README中应得到特别提及 ;)
致谢
- Kévin Gomez contact@kevingomez.fr
- 所有贡献者
许可证
SmsSender在MIT许可证下发布。有关详细信息,请参阅捆绑的LICENSE文件。