headsnet / sms-bundle
提供电子邮件和短信发送功能
Requires
- php: >=7.0
- esendex/sdk: 1.*
- misd/phone-number-bundle: ^1.2
- symfony/framework-bundle: ~3.3 || ~4.0
- twig/twig: ^2.0
README
Symfony 扩展包,用于发送和接收短信。目前仅支持 Esendex SMS 网关 - https://www.esendex.com/。未来可能添加其他网关。
深受优秀的 tomazahlin/symfony-mailer-bundle https://github.com/tomazahlin/symfony-mailer-bundle 启发
安装
需要 Symfony >= 3.3 和 PHP >= 7.0
使用 Composer 安装
composer require headsnet/sms-bundle
将包添加到 AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Headsnet\SmsBundle\HeadsnetSmsBundle(),
);
}
如果您需要接收短信,请在 app/config/routing.yml 中添加路由配置
headsnet_sms:
resource: '@HeadsnetSmsBundle/Resources/config/routing.yml'
prefix: '/sms'
配置
在 app/config.yml 中添加所需配置
headsnet_sms:
dispatcher: esendex
esendex:
account_reference: ~
username: ~
password: ~
vmn: ~ # Virtual Mobile Number
要模拟短信发送,您可以使用 DummyDispatcher - 例如在运行测试套件时 - 在 app/config_test.yml 中添加以下内容
headsnet_sms:
dispatcher: dummy
要覆盖收件人电话号码,例如在开发中,请将以下内容添加到 app/config_dev.yml
headsnet_sms:
delivery_override: '+33123456789'
定义短信消息模板
创建一个映射服务,将模板路径定义与模板名称关联
<?php
declare(strict_types=1);
namespace AppBundle\Sms;
use Headsnet\Sms\Mapping\TemplateMappingInterface;
/**
* Map template reference names to template paths
*/
class Mapping implements TemplateMappingInterface
{
/**
* @return array
*/
public function getMappings()
{
return [
'customer.confirm' => '@AppBundle/sms/customer.confirm.text.twig',
'customer.reminder' => '@AppBundle/sms/customer.reminder.text.twig'
];
}
}
发送短信
要发送短信,将 SMS 发送者服务注入到您的代码中。从这里您可以访问 SMS 消息工厂或 SMS 发送者
namespace Company\App;
use Headsnet\Sms\SmsSendingInterface;
class MyService
{
private $smsSending;
public function __construct(SmsSendingInterface $smsSending)
{
$this->smsSending = $smsSending;
}
public function doSomething()
{
// How to access factory to create SMS instances
$factory = $this->smsSending->getFactory();
// How to access sender to send or queue the SMS
$smsSender = $this->smsSending->getSmsSender();
}
}
设置推送通知
如果您希望 EsendexEventDispatcher 网关发送交付通知等,您必须确保已将包的路由添加到您的 routing.yml 文件中。
然后,在您的 EsendexEventDispatcher 控制面板中,使用以下 URL 配置推送通知路由
接收到的短信
https://app.your-domain.com/sms/esendex/message-received
已投递的短信
https://app.your-domain.com/sms/esendex/delivery-notify
失败的短信
https://app.your-domain.com/sms/esendex/delivery-error
退订
https://app.your-domain.com/sms/esendex/opt-out
这些端点将接收来自 EsendexEventDispatcher 的有效负载并触发以下事件之一
- headsnet.sms.delivered
- headsnet.sms.error
- headsnet.sms.received
- headsnet.sms.opt_out
这些事件的监听器将收到一个包含消息数据的 Headsnet\SmsBundle\Event\SmsEvent 实例。
查看这些事件的示例 事件订阅者。
贡献
欢迎提交拉取请求和其他贡献。