inisiatif / whatsapp-qontak-php
使用 Qontak 发送 WhatsApp 消息
1.3.3
2024-08-28 09:05 UTC
Requires
- php: ^8.0
- ext-json: *
- php-http/client-common: ^2.5
- psr/http-client-implementation: ^1.0
- psr/log: ^3.0
- webmozart/assert: ^1.11
Requires (Dev)
- mockery/mockery: ^1.5
- nyholm/psr7: ^1.8
- php-http/mock-client: ^1.5
- phpunit/phpunit: ^9.5
- symplify/easy-coding-standard: ^11.1
- vimeo/psalm: ^4.27
README
通过 Qontak API 发送 WhatsApp 消息,使用 HTTPlug。
安装
首先安装 HTTPlug 适配器或客户端 和 PSR-17 包兼容的
composer require php-http/curl-client laminas/laminas-diactoros
然后安装此包
composer require inisiatif/whatsapp-qontak-php
使用方法
非框架使用
首先您必须创建一个有效且经过批准的 WhatsApp 模板。
use Inisiatif\WhatsappQontakPhp\Client; use Inisiatif\WhatsappQontakPhp\Credential; use Inisiatif\WhatsappQontakPhp\Message\Body; use Inisiatif\WhatsappQontakPhp\Message\Button; use Inisiatif\WhatsappQontakPhp\Message\Header; use Inisiatif\WhatsappQontakPhp\Message\Message; use Inisiatif\WhatsappQontakPhp\Message\Receiver; use Inisiatif\WhatsappQontakPhp\Message\Language; $credentials = new Credential('username', 'password', 'clientId', 'clientSecret'); $client = new Client($credentials); // Create message receiver $receiver = new Receiver('+6281318788271', 'Nuradiyana'); // [Optional] Create language, supported 'en' and 'id', default is 'id' $language = new Language('id'); // [Optional] Create params message body $body = [ new Body('Nuradiyana'), new Body('Gorengan'), ]; // [Optional] Create header message, support "DOCUMENT", "VIDEO", "IMAGE" $header = new Header( Header::TYPE_DOCUMENT, 'https://example.com/link-to-file-url.pdf', 'file-name.pdf' ); // [Optional] Create buttons $buttons = [new Button('url', 'https://example.com')]; $message = new Message($receiver, $language, $body, $header, $buttons); $response = $client->send('templateId', 'channelId', $message); // Message Id and Receiver Name echo $response->getMessageId(); echo $response->getName(); // All raw data \var_dump($response->getData());
在 Laravel 中作为通知通道使用
- 在
config/services.php
中添加新的配置值,然后在.env
中设置每个值
'qontak' => [ 'username' => env('QONTAK_USERNAME', null), 'password' => env('QONTAK_PASSWORD', null), 'client_id' => env('QONTAK_CLIENT_ID', null), 'client_secret' => env('QONTAK_CLIENT_SECRET', null), ],
- 在
AppServiceProvider
的register
方法中添加此代码
$this->app->singleton(\Inisiatif\WhatsappQontakPhp\ClientInterface::class, function () { return $this->app->runningUnitTests() ? \Inisiatif\WhatsappQontakPhp\ClientFactory::makeTestingClient() : \Inisiatif\WhatsappQontakPhp\ClientFactory::makeFromArray( config('service.qontak') ); });
- 然后在通知类中创建或注册
ContakChannel
use Illuminate\Bus\Queueable; use Illuminate\Notifications\Notification; use Illuminate\Contracts\Queue\ShouldQueue; use Inisiatif\WhatsappQontakPhp\Message\Message; use Inisiatif\WhatsappQontakPhp\Message\Receiver; use Inisiatif\WhatsappQontakPhp\Illuminate\Envelope; use Inisiatif\WhatsappQontakPhp\Illuminate\QontakChannel; use Inisiatif\WhatsappQontakPhp\Illuminate\QontakNotification; class InvoicePaid extends Notification implements QontakNotification { use Queueable; public function via($notifiable): array { return [QontakChannel::class]; } public function toQontak($notifiable): Envelope { // First create message object $receiver = new Receiver('+6281318788271', 'Nuradiyana'); $message = new Message($receiver); // Then create envelope object and return it return new Envelope('templateId', 'channelId', $message); } }
测试
🧹 使用 Easy Coding Standard 修复代码库
composer ecs
⚗️ 使用 Psalm 运行静态分析
composer psalm
🚀 运行整个测试套件
composer test
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 获取更多信息。