Push notification SDK(AnPush、Bark、Chanify、DingTalk、Discord、Gitter、GoogleChat、IGot、Lark、Mattermost、MicrosoftTeams、NowPush、Ntfy、Push、Pushback、PushBullet、PushDeer、Pushover、PushPlus、QQ、RocketChat、ServerChan、ShowdocPush、SimplePush、Slack、Telegram、WeWork、WPush、XiZhi、YiFengChuanHua、Zulip).
[!NOTE]
Push notification SDK(AnPush、Bark、Chanify、DingTalk、Discord、Gitter、GoogleChat、IGot、Lark、Mattermost、MicrosoftTeams、NowPush、Ntfy、Push、Pushback、PushBullet、PushDeer、Pushover、PushPlus、QQ、RocketChat、ServerChan、ShowdocPush、SimplePush、Slack、Telegram、WeWork、WPush、XiZhi、YiFengChuanHua、Zulip).
composer require guanguans/notify -v
$response = (new Guanguans\Notify\DingTalk\Client(
new Guanguans\Notify\DingTalk\Authenticator('c44fec1ddaa8a833156efb77b7865d62ae13775418030d94d05da08bfca73')
))
->send(
Guanguans\Notify\DingTalk\Messages\BtnsActionCardMessage::make([
'title' => 'This is title(keyword).',
'text' => 'This is text.',
])
)
// ->dump()
->json();
// 1. Create authenticator
$authenticator = new Guanguans\Notify\DingTalk\Authenticator(
'c44fec1ddaa8a833156efb77b7865d62ae13775418030d94d05da08bfca73',
// 'SECc32bb7345c0f73da2b9786f0f7dd5083bd768a29b82e6d460149d730eee51'
);
// 2. Create client
$client = new Guanguans\Notify\DingTalk\Client($authenticator);
// 3. Create message
$message = Guanguans\Notify\DingTalk\Messages\BtnsActionCardMessage::make([
'title' => 'This is title(keyword).',
'text' => 'This is text.',
// 'btnOrientation' => 1,
// 'btns' => [
// [
// 'title' => 'This is title 1.',
// 'actionURL' => 'https://github.com/guanguans/notify',
// ],
// ],
])
->btnOrientation(1)
->addBtn([
'title' => 'This is title 2.',
'actionURL' => 'https://github.com/guanguans/notify',
]);
// 4. Send message
$response = $client
// ->baseUri('base-uri')
// ->connectTimeout(10)
// ->debug(true)
// ->proxy('http://127.0.0.1:1087')
// ->timeout(30)
// ->verify(false)
// ->push(
// GuzzleHttp\Middleware::log(
// new Psr\Log\NullLogger,
// new GuzzleHttp\MessageFormatter(GuzzleHttp\MessageFormatter::DEBUG)
// ),
// 'log'
// )
// ->before(
// 'log',
// GuzzleHttp\Middleware::mapRequest(
// static fn (Psr\Http\Message\RequestInterface $request) => $request
// ),
// )
->send($message)
->dump()
// ->throw()
->json();
$promise = $client->sendAsync($message);
$response = $promise->wait();
/** @var iterable<array-key, \Guanguans\Notify\Foundation\Contracts\Message> $messages */
/** @var array<array-key, \Guanguans\Notify\Foundation\Response|\Psr\Http\Message\ResponseInterface> $responses */
$responses = $client->pool($messages);
use Guanguans\Notify\Foundation\Client;
use GuzzleHttp\HandlerStack;
use Hyperf\Guzzle\CoroutineHandler;
use Hyperf\Guzzle\HandlerStackFactory;
use Hyperf\Guzzle\PoolHandler;
// Set Handler directly
// $client->setHandler(make(CoroutineHandler::class));
// $client->setHandler(make(PoolHandler::class));
$client->setHandler((fn () => $this->getHandler($this->option))->call(new HandlerStackFactory));
// Or set HandlerStackResolver
$client->setHandlerStackResolver(static fn (Client $client): HandlerStack => array_reduce(
$client->defaultMiddlewares(),
static fn (HandlerStack $handlerStack, callable $middleware) => tap($handlerStack)->push($middleware),
(new HandlerStackFactory)->create()
));
[!TIP]
Required to install Laravel Idea plugin.
composer test
composer benchmark
+---------------------+--------------------------+-----+-------+-----+----------+-----------+--------+
| benchmark | subject | set | revs | its | mem_peak | mode | rstdev |
+---------------------+--------------------------+-----+-------+-----+----------+-----------+--------+
| SendMessageBench | benchSendMessage | | 10000 | 3 | 9.345mb | 186.142μs | ±0.05% |
| CreateInstanceBench | benchCreateAuthenticator | | 10000 | 3 | 6.970mb | 0.775μs | ±0.44% |
| CreateInstanceBench | benchCreateMessage | | 10000 | 3 | 6.970mb | 1.776μs | ±0.56% |
| CreateInstanceBench | benchCreateClient | | 10000 | 3 | 7.410mb | 12.889μs | ±0.58% |
+---------------------+--------------------------+-----+-------+-----+----------+-----------+--------+
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.