allanvb/laravel-semysms

Laravel 的 SemySMS 集成

1.0.9 2021-04-20 08:47 UTC

This package is auto-updated.

Last update: 2024-09-20 16:16:44 UTC


README

Laravel SMS 邮件服务 SemySMS 的包

Packagist Version GitHub last commit License Sonar

SemySMS API 集成到您的 Laravel 5 应用中的包。

安装

composer require allanvb/laravel-semysms

Laravel 5.5+

如果您正在使用 Laravel 5.5 或更高版本,该包将自动注册提供者和外观。

Laravel 5.4 及以下

Allanvb\LaravelSemysms\SemySmsServiceProvider 添加到您的 config/app.php 文件中的 providers 数组中

'providers' => [
    // Other service providers...

    Allanvb\LaravelSemysms\SemySmsServiceProvider::class,
],

在您的 config/app.php 中添加一个别名

'aliases' => [
    ...
    'SemySMS' => Allanvb\LaravelSemysms\Facades\SemySMS::class,
],

或者您可以在需要时使用外观类

use Allanvb\Semysms\Facades\SemySMS;

概述

查看以下主题之一以了解有关 SemySMS 包的更多信息。

配置

您可以使用 php artisan vendor:publish 命令将配置文件复制到您的应用的配置目录

$ php artisan vendor:publish --provider="Allanvb\LaravelSemysms\SemySmsServiceProvider" --tag="config"

然后更新 config/semy-sms.php 以包含您的凭据。您还可以更新您的 .env 文件

SEMYSMS_TOKEN=your_access_token
SEMYSMS_DEVICE_ID=default_device_id

所有方法都使用 Validator 验证传递的数据。

默认情况下,方法将尝试使用您在 SEMYSMS_DEVICE_ID 变量中指定的设备。

使用

要使用 SemySMS 库,您可以访问外观,或从服务容器中请求实例

SemySMS::sendOne([
    'to' => '+1234567890',
    'text' => 'My first message.'
]);

或者

app('semy-sms')->sendOne([
    'to' => '+1234567890',
    'text' => 'My first message.'
]);
  • 所有号码都必须使用国际格式。

所有方法和事件都将返回一个 Collection,因此您可以使用所有可用方法来操作响应。例如:SemySMS::getInbox()->sortByDesc('date');

示例

发送简单消息

SemySMS::sendOne([
    'to' => '+1234567890',
    'text' => 'Test message'
]);

可用参数

  • to - (string) 国际格式电话号码 (必需)
  • text - (string) 短信文本,最多 255 个符号 (必需)
  • device_id - (string) 设备 ID 或 active

device_id 参数也可以接受 active 值,这意味着服务将新短信分配给所有您的活动设备。

发送多条消息

SemySMS::sendMultiple([
    'to' => ['+1234567890','+1567890234','+1902345678'],
    'text' => 'Test message'
]);

可用参数

  • to - (array) 国际格式电话号码列表 (必需)
  • text - (string) 短信文本,最多 255 个符号 (必需)

如果您想对发送多条消息有更多控制,可以使用链式方法。

$messages = SemySMS::multiple();

$messages->addRecipient([
    'to' => '+1234567890',
    'text' => 'Test message',
]);

$messages->addRecipient([
    'to' => '+1567890234',
    'text' => 'Test message 2',
]);

$messages->send();

可用参数

  • to - (string) 国际格式电话号码 (必需)
  • text - (string) 短信文本,最多 255 个符号 (必需)
  • device_id - (int) 设备 ID。
  • my_id - (string) 您的会计系统中的短信代码

发送 USSD 请求

  • 此功能仅适用于 Android 8.0+
SemySMS::ussd([
    'to' => '*123#'
]);

您可以使用 'device_id' 参数从特定设备执行 USSD 请求。

已发送短信列表

SemySMS::getOutbox();

可选,您可以使用 Interval 助手指定要获取的时间间隔,如下所示。

SemySMS::getOutbox([
    'interval' => Interval::days(3)
]);

已接收短信列表

SemySMS::getInbox();

删除已发送短信

SemySMS::deleteOutbox();

删除已接收短信

SemySMS::deleteInbox();

deleteOutbox()deleteInbox() 方法将返回已删除的消息。

可选,您可以使用过滤器使用 getOutbox()getInbox()deleteOutbox()deleteInbox() 方法。

可用参数

  • interval - (Interval) 时间间隔。
  • device_id - (int) 设备 ID。
  • start_id - (int) 列表过滤器的起始 ID。
  • end_id - (int) 列表过滤器的结束 ID。
  • list_id - (array) 短信代码列表。
  • phone - (string) 电话号码。

设备列表

SemySMS::getDevices();

默认情况下,此方法将返回连接到账户的所有设备的列表。

可用参数

  • status - (字符串) 活跃|存档。
  • list_id - (数组) 设备列表。

取消发送短信

SemySMS::cancelSMS();

此方法将取消所有未发送到默认设备的信息。

您可以通过传递 device_id 来请求取消特定设备的所有短信,或者通过传递数组中的 sms_id 来取消特定信息。

事件

该包内置了事件。您可以选择以下三个事件进行监听。

通知频道

此包还提供了 SemySMS 的通知通道。

要使用通知通道,您必须在通知类的 via 方法中使用 SemySmsChannel::class。之后,您将能够使用 toSemySms() 方法发送消息。

请参见以下示例。

use Illuminate\Notifications\Notification;
use Allanvb\LaravelSemysms\Channels\SemySmsChannel;
use Allanvb\LaravelSemysms\Channels\SemySmsMessage;

class MyNotification extends Notification
{
    public function via($notifiable)
    {
        return [SemySmsChannel::class];
    }

    public function toSemySms($notifiable)
    {
        return (new SemySmsMessage)
            ->text('My first notification message.');
    }

}

您可以通过两种方式添加收件人。

  • 第一种是通过在您的通知模型中使用以下 routeNotificationForSemySMS()
// User model

public function routeNotificationForSemySMS()
{
    return $this->phone;
}
  • 第二种方式是在您的通知内部使用 to() 方法。
public function toSemySms($notifiable)
{
    return (new SemySmsMessage)
            ->to('+1234567890')
            ->text('My second notification message.');
}

如果您两者都使用,则 to() 方法将被用作主要方法。

异常

该包可能会抛出以下异常

额外

接收设备消息

如果您想从您的设备获取传入的消息,您可以使用

https://yourdomain.com/semy-sms/receive 路径在您的 SemySMS 控制面板中。

要使此路由正常工作,您需要进行一些操作

  • 将配置文件中的 catch_incoming 更改为 true
  • semy-sms/receive 路径添加到 VerifyCsrfToken 中间件的 $except 变量中。

之后,您将能够监听 semy-sms.received 事件。

如果您执行了 USSD 请求,您可以监听 semy-sms.ussd-response 事件来处理 USSD 响应。

如果您的 USSD 响应以短信的形式接收,您可以将发送者名称添加到配置文件中的 ussd_senders

有关事件的信息,请参阅 Laravel 官方文档

间隔

间隔类提供了以下方法: hours()days()weeks()months()years()

如果您想对 Interval 有更多控制,可以向对象传递一个 startDate 和一个 endDate

$startDate = Carbon::yesterday()->subDays(1);
$endDate = Carbon::yesterday();

Interval::create($startDate, $endDate);

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件