pikart/goip
Composer 安装命令:
composer require pikart/goip
包简介
Goip server and client
README 文档
README
This package allow to send and receive SMS messages using GSM / VOIP Goip1, Goip4, Goip8, Goip16 gateways from Hybertone / Dbltek company. SMS can be received via the UDP protocol using php sockets or reactphp. The SMS can be sent via UDP or HTTP. The package is used in a production environment with four Goip16 gateways connected (64 lines). Additionally, it is possible to receive basic information about the state and status of individual GSM gates (lines).
Requirements
PHP >= 7.4
Installation
composer require pikart/goip
Server usage instruction
To start receiving messages from Goip gateways you need to create and start a server.
Two implementations are possible:
\Pikart\Goip\UdpServer::class // php sockets \Pikart\Goip\ReactServer::class // reactphp
Creating a server using php sockets:
$server = \Pikart\Goip\ServerFactory::default( \Pikart\Goip\UdpServer::class, '0.0.0.0', 333);
Creating a server using reactphp:
$server = \Pikart\Goip\ServerFactory::default( \Pikart\Goip\ReactServer::class, '0.0.0.0', 333);
Method \Pikart\Goip\ServerFactory::default() : Server creates new Server instance, it takes four parameters:
- $serverClass (string) - Server implementation \Pikart\Goip\Server::class
- $host (string) - server host address
- $port (int) - server port
- $args (array) optional - additional parameters
The server allows to listen messages received from Goip trough the Observer pattern.
Register message listener
use Pikart\Goip\ServerFactory; use Pikart\Goip\ReactServer; use Pikart\Goip\Message; use Pikart\Goip\Messages\RequestMessage; use Pikart\Goip\Messages\ReceiveMessage; $server = ServerFactory::default( ReactServer::class, '0.0.0.0', 333); // Listening to all incoming messages $listenerId1 = $server->listenAll(function (Message $message){ // Request message if( $message instanceof RequestMessage) { var_dump( $message ); } // Receive message if( $message instanceof ReceiveMessage) { var_dump( $message ); } // Message var_dump( $message ); }); // Listening to a concrete message $listenerId2 = $server->listen( RequestMessage::class, function (RequestMessage $message){ var_dump( $message ); }); $listenerId3 = $server->listen( ReceiveMessage::class, function (ReceiveMessage $message){ var_dump( $message ); }); // Remove listener 1 $server->off($listenerId1); // Remove listener 2 $server->off($listenerId2); // Remove listener 3 $server->off($listenerId3);
It's highly recommended to use external queue system like RabbitMQ or Laravel Queues to process incoming messages.
Server startup
use Pikart\Goip\ServerFactory; use Pikart\Goip\ReactServer; use Pikart\Goip\Message; $server = ServerFactory::default( ReactServer::class, '0.0.0.0', 333); // Listening to all incoming messages $server->listenAll(function (Message $message){ // Message var_dump( $message ); }); $server->run();
Message types
\Pikart\Goip\Messages\RequestMessage::class // Keep Alive packets with gateway (line) information \Pikart\Goip\Messages\DeliverMessage::class // SMS delivery report \Pikart\Goip\Messages\HangupMessage::class // End telephone call \Pikart\Goip\Messages\ReceiveMessage::class // Incoming SMS \Pikart\Goip\Messages\RecordMessage::class // Start a phone call \Pikart\Goip\Messages\StateMessage::class // Change of gate (line) status \Pikart\Goip\Messages\NotSupportedMessage::class // Message not supported by package \Pikart\Goip\Message::class // Main abstract class
Message attributes and properties
use Pikart\Goip\ServerFactory; use Pikart\Goip\ReactServer; use Pikart\Goip\Message; use Pikart\Goip\Messages\ReceiveMessage; $server = ServerFactory::default( ReactServer::class, '0.0.0.0', 333); $server->listenAll(function (Message $message){ // Array of all attributes $attributes = $message->attributes(); // Pikart\Goip\Request::class Access to raw request from goip $request = $message->request(); // Show remote host and port $remoteHost = $message->request()->host(); $remotePort = $message->request()->port(); }); // ReceiveMessage $server->listen( ReceiveMessage::class, function ( ReceiveMessage $message ) { // Received text message $smsTextMessage = $message->msg(); // Sender phone number $phoneNumber = $message->srcnum(); // Password from goip $goipPassword = $message->password(); // Show remote host and port $remoteHost = $message->request()->host(); $remotePort = $message->request()->port(); });
Sending a message
Sending via UDP socket
use Pikart\Goip\Sms\SocketSms; /** * SocketSms constructor. * * @param string $host Goip host * @param int $port Goip port * @param string $id Unique sending session id * @param string $password Goip password * @param array|null $options */ $sms = new SocketSms( '192.168.0.11', 9991, 123, 'password', ['timeout' => 30] ); /** * Send sms * * @param string $number Phone number * @param string $message Text message * @return array Response from goip * @throws GoipException * @throws SocketException * @throws TimeoutException */ $response = $sms->send('999999999', 'text message'); var_dump( $response ); // response from goip array(4) { ["sendid"]=>string(3) "123" // unique sendid ["telid"]=>string(1) "1" // session id ["sms_no"]=> string(1) "0" // sms count number ["raw"]=>string(12) "OK 123 1 0" // raw response }
Sending via HTTP
use Pikart\Goip\Sms\HttpSms; /** * HttpSms constructor. * * @param string $host Goip host for example: http://192.168.0.11 * @param int $line Goip line number, * @param string $login Goip login * @param string $password Goip password */ $sms = new HttpSms('http://192.168.0.11',1, 'admin', 'admin'); /** * Send sms * * @param string $number Phone number * @param string $message Text message * @return array * @throws GoipException */ $response = $sms->send('999999999', 'text message'); var_dump( $response ); array(3) { ["id"]=> string(8) "0000021f" // send id ["raw"]=> string(45) "Sending,L1 Send SMS to:999999999; ID:0000021f" // Raw response ["status"]=> string(4) "send" // send status }
pikart/goip 适用场景与选型建议
pikart/goip 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 8.33k 次下载、GitHub Stars 达 31, 最近一次更新时间为 2020 年 04 月 14 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「client」 「sms」 「server」 「gateway」 「goip」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 pikart/goip 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 pikart/goip 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 pikart/goip 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.
Mock PSR-18 HTTP client
SDK for payment gateway PlatbaMobilom.sk for PHP7.0
Extensible library for building notifications and sending them via different delivery channels.
Asynchronous MQTT client built on React
A jQuery augmented PHP library for creating and validating HTML forms
统计信息
- 总下载量: 8.33k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 31
- 点击次数: 13
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2020-04-14