headsnet/sms-bundle

此包已被弃用,不再维护。未建议替代包。

提供电子邮件和短信发送功能

v0.1.12 2018-09-28 01:20 UTC

This package is auto-updated.

Last update: 2022-09-28 10:28:36 UTC


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 实例。

查看这些事件的示例 事件订阅者

贡献

欢迎提交拉取请求和其他贡献。