quickhelper/quickzoom
Composer 安装命令:
composer require quickhelper/quickzoom
包简介
A complete Laravel Zoom integration package
README 文档
README
A complete solution for integrating Zoom video conferencing into Laravel applications. Manage meetings, webinars, participants, and recordings with an elegant API.
Features
✅ Complete Meeting Management - Create, update, delete, and list Zoom meetings
✅ Webinar Support - Schedule and manage webinars
✅ Participant Tracking - Track meeting participants and attendance
✅ Recording Management - Access and manage meeting recordings
✅ Webhook Integration - Real-time event notifications
✅ Database Storage - Store meeting data locally
✅ Laravel Integration - Native Laravel service provider, facades, and events
Requirements
- PHP 8.0+
- Laravel 9.x, 10.x, or 11.x
- Zoom OAuth 2.0 Server-to-Server App Credentials
Installation
- Install via Composer:
composer require quickhelper/quickzoom
- Publish config and migrations:
php artisan vendor:publish --provider="QuickZoom\Providers\QuickZoomServiceProvider"
- Add Zoom credentials to your
.env:
ZOOM_API_KEY=your_zoom_api_key ZOOM_API_SECRET=your_zoom_api_secret ZOOM_ACCOUNT_ID=your_zoom_account_id ZOOM_WEBHOOK_SECRET=your_webhook_secret # Optional
Important: Zoom has deprecated JWT authentication. You must create an OAuth 2.0 Server-to-Server app in the Zoom Marketplace and use those credentials.
- Run migrations:
php artisan migrate
Usage
Basic Meeting Management
use QuickZoom\Facades\QuickZoom; // Create a simple meeting $meeting = QuickZoom::createMeeting('me', [ 'topic' => 'Team Meeting', 'start_time' => now()->addDay()->toIso8601String(), 'duration' => 60, 'agenda' => 'Quarterly planning session' ]); echo "Meeting created successfully!"; echo "Join URL: " . $meeting['join_url']; echo "Meeting ID: " . $meeting['id']; echo "Password: " . $meeting['password']; // List all meetings $meetings = QuickZoom::listMeetings(); foreach ($meetings['meetings'] as $meeting) { echo "Meeting: " . $meeting['topic'] . " - " . $meeting['start_time']; } // Get specific meeting details $meetingDetails = QuickZoom::getMeeting($meetingId); echo "Meeting Status: " . $meetingDetails['status']; // Update a meeting $updatedMeeting = QuickZoom::updateMeeting($meetingId, [ 'topic' => 'Updated Meeting Title', 'duration' => 90 ]); // End an ongoing meeting QuickZoom::endMeeting($meetingId); // Delete a meeting QuickZoom::deleteMeeting($meetingId);
Advanced Meeting with Custom Settings
$advancedMeeting = QuickZoom::createMeeting('me', [ 'topic' => 'Advanced Workshop', 'type' => 2, // Scheduled meeting 'start_time' => '2024-12-25T10:00:00Z', 'duration' => 120, 'timezone' => 'Africa/Cairo', 'password' => '123456', 'agenda' => 'Advanced Laravel Development Workshop', 'settings' => [ 'host_video' => true, 'participant_video' => false, 'join_before_host' => true, 'mute_upon_entry' => true, 'waiting_room' => false, 'approval_type' => 0, 'audio' => 'both', 'auto_recording' => 'cloud', 'alternative_hosts' => 'assistant@company.com' ] ]);
Working with Participants
// Register a participant $registration = QuickZoom::registerParticipant($meetingId, [ 'email' => 'participant@example.com', 'first_name' => 'John', 'last_name' => 'Doe', 'org' => 'Tech Company', 'job_title' => 'Developer' ]); echo "Registration successful!"; echo "Join URL: " . $registration['join_url']; // List meeting participants (after meeting) $participants = QuickZoom::listParticipants($meetingId); foreach ($participants['participants'] as $participant) { echo $participant['name'] . " joined at " . $participant['join_time']; }
Using in Controllers
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use QuickZoom\Facades\QuickZoom; use QuickZoom\Models\ZoomMeeting; class MeetingController extends Controller { public function createMeeting(Request $request) { $request->validate([ 'topic' => 'required|string|max:200', 'start_time' => 'required|date|after:now', 'duration' => 'required|integer|min:15|max:300' ]); try { // Create meeting in Zoom $zoomMeeting = QuickZoom::createMeeting('me', [ 'topic' => $request->topic, 'start_time' => $request->start_time, 'duration' => $request->duration, 'agenda' => $request->agenda ]); // Save to database $meeting = ZoomMeeting::create([ 'zoom_id' => $zoomMeeting['id'], 'user_id' => auth()->id(), 'topic' => $zoomMeeting['topic'], 'start_url' => $zoomMeeting['start_url'], 'join_url' => $zoomMeeting['join_url'], 'password' => $zoomMeeting['password'], 'start_time' => $zoomMeeting['start_time'], 'duration' => $zoomMeeting['duration'] ]); return response()->json([ 'success' => true, 'meeting' => $meeting ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 500); } } }
Webhook Setup
- Configure your Zoom app webhook in the Zoom Marketplace
- Add the webhook URL to your Zoom app settings (typically
https://yourdomain.com/api/zoom/webhook) - Listen for events in your Laravel application:
// In your EventServiceProvider protected $listen = [ \QuickZoom\Events\ZoomMeetingStarted::class => [ \App\Listeners\HandleMeetingStarted::class, ], \QuickZoom\Events\ZoomMeetingEnded::class => [ \App\Listeners\HandleMeetingEnded::class, ], \QuickZoom\Events\ZoomParticipantJoined::class => [ \App\Listeners\HandleParticipantJoined::class, ], \QuickZoom\Events\ZoomParticipantLeft::class => [ \App\Listeners\HandleParticipantLeft::class, ], ];
Event Listener Example
php artisan make:listener HandleMeetingStarted
<?php namespace App\Listeners; use QuickZoom\Events\ZoomMeetingStarted; use QuickZoom\Models\ZoomMeeting; class HandleMeetingStarted { public function handle(ZoomMeetingStarted $event) { $meetingId = $event->payload['payload']['object']['id']; // Update meeting status in database ZoomMeeting::where('zoom_id', $meetingId) ->update(['status' => 'started']); // Send notifications, log activity, etc. } }
Available Methods
| Method | Description |
|---|---|
listMeetings() |
List all meetings |
getMeeting() |
Get meeting details |
createMeeting() |
Schedule a new meeting |
updateMeeting() |
Update meeting details |
deleteMeeting() |
Delete a meeting |
endMeeting() |
End an ongoing meeting |
listParticipants() |
List meeting participants |
registerParticipant() |
Register participant for meeting |
listRecordings() |
Get meeting recordings |
createWebinar() |
Schedule a webinar |
listWebinars() |
List scheduled webinars |
Configuration
Publish the configuration file to customize:
php artisan vendor:publish --tag=quickzoom-config
Available configuration options:
return [ 'api_key' => env('ZOOM_API_KEY'), 'api_secret' => env('ZOOM_API_SECRET'), 'base_url' => 'https://api.zoom.us/v2/', 'webhook_secret' => env('ZOOM_WEBHOOK_SECRET'), 'default_settings' => [ 'host_video' => true, 'participant_video' => true, // ... other meeting defaults ], 'routes' => [ 'prefix' => 'api/zoom', 'middleware' => ['api', 'auth:sanctum'], 'webhook_path' => 'webhook', ] ];
Security
- Uses JWT authentication with Zoom API
- Webhook signature verification
- Encrypted API communication
- Token rotation and caching
Testing
Run the tests with:
composer test
📚 Documentation
- Quick Start Guide - Get started in 5 minutes
- Complete Examples - Comprehensive usage examples
- API Testing Guide - Test your integration
- FAQ - Frequently asked questions
- Development Guide - For contributors
🔧 Troubleshooting
Common Issues
Authentication Error:
- Ensure you're using OAuth 2.0 Server-to-Server app (not JWT)
- Verify your API Key, Secret, and Account ID are correct
- Check that your Zoom app has the required scopes
Meeting Creation Fails:
- Verify the start time is in the future
- Check the duration is between 15-300 minutes
- Ensure the timezone is valid
Webhook Issues:
- Make sure your webhook URL is publicly accessible
- Verify HTTPS is enabled
- Check the webhook secret matches your configuration
Changelog
See CHANGELOG.md for recent changes.
Contributing
Contributions are welcome! Please see CONTRIBUTING.md for details.
License
The MIT License (MIT). See LICENSE.md for more information.
Support
For issues and feature requests, please open an issue.
Credits
Created with ❤️ by Yossef Ashraf
quickhelper/quickzoom 适用场景与选型建议
quickhelper/quickzoom 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 5 次下载、GitHub Stars 达 1, 最近一次更新时间为 2025 年 04 月 14 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「video」 「laravel」 「zoom」 「Conference」 「Meetings」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 quickhelper/quickzoom 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 quickhelper/quickzoom 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 quickhelper/quickzoom 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Easy to use SDK with grabber for multiple platforms at once like YouTube, Dailymotion, Facebook and more.
The yii2-videojs-widget is a Yii 2 wrapper for the [video.js](http://www.videojs.com/). A JavaScript and CSS library that makes it easier to work with and build on HTML5 video. This is also known as an HTML5 Video Player.
A PSR-7 compatible library for making CRUD API endpoints
Display a video using native HTML5 video
Alfabank REST API integration
TYPO3 Plugin that displays YouTube-videos faster by loading the video-player on demand while displaying a cacheable preview picture.
统计信息
- 总下载量: 5
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 22
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-04-14