akibtanjim / virtual-classroom
Laravel 虚拟教室,使用 Braincert 虚拟教室 API。
Requires
- php: >=5.4
- ixudra/curl: ^6.19
This package is auto-updated.
Last update: 2024-09-07 19:08:21 UTC
README
此包是为 Laravel 构建的,旨在为任何网站集成提供虚拟教室 API。此包使用 BrainCert 虚拟教室 API。更多信息请访问 这里。
安装
使用 composer 安装
composer require akibtanjim/virtual-classroom
在 Laravel 5.5 或更高版本中,此包将被自动发现,您可以安全地跳过以下两个步骤。
如果使用 Laravel 5.4 或更低版本,在更新 composer 后,将 ServiceProvider 添加到 config/app.php
中的 providers 数组
在 providers 部分,添加以下行
AkibTanjim\VirtualClassRoom\VirtualClassRoomServiceProvider::class,
将别名添加到 aliases 部分 of config/app.php
'ClassRoom' => AkibTanjim\VirtualClassRoom\Facades\ClassRoom::class,
使用方法
为了方便使用虚拟教室功能,您需要拥有一个 BrainCert 账户。您可以从 这里 注册。
此包需要 BrainCert 账户的 API 密钥。您可以从 这里 找到您的 API 密钥。请将您的域名填写在那里。您还可以从 BrainCert 门户 添加自定义重定向 URL、自定义标志、favicon、主机名等。
在获取您的 API 密钥 后,打开您的 .env
文件并粘贴以下代码
BRAIN_CERT_BASE_URL=https://api.braincert.com
BRAIN_CERT_API_KEY=YOUR_API_KEY
可用方法
- 安排课程
- 启动课程
- 课程列表
- 删除课程
- 取消课程
- 添加定价方案
- 定价方案列表
- 删除定价方案
- 方案支付
- 添加折扣
- 折扣列表
- 删除折扣
- 应用折扣券
- 录音列表
- 获取录音
- 删除录音
- 更改录音状态
- 获取课程使用报告
- 获取可用参与者
安排课程
此方法允许安排课程。
ClassRoom::schedule($request)
示例请求
ClassRoom::schedule([
"title" => "demo-class",
"timezone" => 12,
"date" => "2020-06-07",
"start_time" => "07:42AM",
"end_time" => "08:12AM",
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "addclass",
"class_id": 397262,
"title": "demo-class"
},
"message": "Class scheduled successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The title field is required."
],
"message": "Invalid Parameter(s)"
}
启动课程
此方法允许启动课程,并为课程提供一个启动 URL。
ClassRoom::launchClass($request)
示例请求
ClassRoom::launchClass([
"class_id" => 123456,
"user_id" => 2,
"user_name" => "Student",
"is_teacher" => 0,
"lesson_name" => "Lesson-02",
"course_name" => "Course-02",
"is_extend" => 1
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"class_id": "396767",
"method": "getclasslaunch",
"launchurl": "LAUNCH_URL",
"encryptedlaunchurl": "ENCRYPTED_LAUNCH_URL"
},
"message": "Class launched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The user name field is required."
],
"message": "Invalid Parameter(s)"
}
课程列表
此方法允许获取所有课程。
ClassRoom::classList($request)
示例请求
ClassRoom::classList([
"published" => 1,
"start" => 0,
// "limit" => 5,
// "search" => "demo"
]);
示例响应
{
"status": "success",
"data": {
"total": 14,
"classes": [
{
"isRecordingLayout": "0",
"canceled_date": "0000-00-00",
"isPrivateChat": "0",
"created_by": "0",
"instructor_id": "0",
"id": "123456",
"user_id": "123",
"title": "demo-class",
"date": "2020-06-07",
"start_time": "01:15 PM",
"end_time": "01:45 PM",
"timezone": "12",
"end_date": "0000-00-00",
"description": "",
"record": "1",
"ispaid": "0",
"language": "11",
"currency": "usd",
"status": "Upcoming",
"repeat": "0",
"virtual_class_type": "html5",
"weekdays": "",
"seat_attendees": "1",
"end_classes_count": "0",
"published": "1",
"timezone_id": "12",
"timezone_country": "Asia/Dhaka",
"timezone_label": "Central Asia Standard Time",
"difftime": "+06:00",
"timezone_title": "(GMT+06:00) Astana, Dhaka",
"totalrecords": "0",
"duration": 1800,
"next_class": 0,
"time_to_live_class": null,
"next_class_date_time": null,
"class_starts_in": 46996,
"label": "Central Asia Standard Time",
"isVideo": 1,
"isRegion": "0",
"privacy": "1",
"isBoard": "1",
"isScreenshare": "1",
"isCorporate": "1",
"isCancel": "0",
"extended_duration": "0",
"extended_duration_date": "0000-00-00"
},
{
"isRecordingLayout": "0",
"canceled_date": "0000-00-00",
"isPrivateChat": "0",
"created_by": "0",
"instructor_id": "0",
"id": "123456",
"user_id": "123",
"title": "demo-class",
"date": "2020-06-07",
"start_time": "07:42 AM",
"end_time": "08:12 AM",
"timezone": "12",
"end_date": "0000-00-00",
"description": "",
"record": "0",
"ispaid": "0",
"language": "11",
"currency": "usd",
"status": "Upcoming",
"repeat": "0",
"virtual_class_type": "html5",
"weekdays": "",
"seat_attendees": "2",
"end_classes_count": "0",
"published": "1",
"timezone_id": "12",
"timezone_country": "Asia/Dhaka",
"timezone_label": "Central Asia Standard Time",
"difftime": "+06:00",
"timezone_title": "(GMT+06:00) Astana, Dhaka",
"totalrecords": "0",
"duration": 1800,
"next_class": 0,
"time_to_live_class": null,
"next_class_date_time": null,
"class_starts_in": 27016,
"label": "Central Asia Standard Time",
"isVideo": 0,
"isRegion": "0",
"privacy": "1",
"isBoard": "0",
"isScreenshare": "1",
"isCorporate": "0",
"isCancel": "0",
"extended_duration": "0",
"extended_duration_date": "0000-00-00"
}
]
},
"message": "Class list fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The limit must be an integer."
],
"message": "Invalid Parameter(s)"
}
删除课程
此方法允许删除课程。
ClassRoom::removeClass($request)
示例请求
ClassRoom::removeClass([
"class_id" => 123456,
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "removeclass",
"class_id": "123456"
},
"message": "Class removed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
取消课程
此方法允许取消或激活课程/周期性课程。
ClassRoom::cancelClass($request)
示例请求
ClassRoom::cancelClass([
"class_id" => 123456,
"is_cancel" => 1
]);
示例响应
{
"status": "success",
"data": {
"status":"ok",
"method":"cancelclass",
"class_id":10
},
"message": "Class cancelled successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
添加定价方案
此方法允许向课程添加定价方案。
ClassRoom::addScheme($request)
示例请求
ClassRoom::addScheme([
'class_id' => 123456,
'price' => 20,
'no_of_day' => 30,
'access_type' => 1,
'no_of_max_use' => 1,
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "addprice",
"price_id": 14
},
"message": "Price Scheme added successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
定价方案列表
此方法允许获取课程的定价方案列表。
ClassRoom::schemeList($request)
示例请求
ClassRoom::schemeList([
'class_id' => 123456
]);
示例响应
{
"status": "success",
"data": [
{
"id": "123",
"class_id": "123456",
"scheme_price": "20",
"scheme_days": "30",
"lifetime": "0",
"times": "1",
"numbertimes": "1",
"subscription": "0"
},
{
"id": "123",
"class_id": "123456",
"scheme_price": "20",
"scheme_days": "30",
"lifetime": "0",
"times": "1",
"numbertimes": "1",
"subscription": "0"
}
],
"message": "Schemes fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
删除定价方案
此方法允许删除课程的定价方案。
ClassRoom::removeScheme($request)
示例请求
ClassRoom::removeScheme([
'price_id' => 123456
]);
示例响应
{
"status": "success",
"data": [
"status":"ok",
"method":"removeprice",
"price_id":"34"
],
"message": "Scheme removed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The price id field is required."
],
"message": "Invalid Parameter(s)"
}
方案支付
此方法允许支付课程方案。
ClassRoom::payment($request)
示例请求
ClassRoom::payment([
'price_id' => 123,
'class_id' => 123456,
'card_number' => '4242 4242 4242 4242',
'card_exp_month' => '01',
'card_exp_year' => '2017',
'card_cvc' => '141',
'student_email' => 'yourname@domain.com',
'cancel_url' => base64_encode('YOUR_CANCEL_URL'),
'return_url' => base64_encode('YOUR_RETURN_URL')
]);
示例响应
{
"status": "success",
"data": {
"status":"ok",
"method":"apiclasspayment",
"charge_id": "ch_1BL9Ae2eZvKYlo2CWz1xDYF1"
},
"message": "Payment processed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The price id field is required."
],
"message": "Invalid Parameter(s)"
}
添加折扣
此方法允许向课程添加折扣。
ClassRoom::addDiscount($request)
示例请求
ClassRoom::addDiscount([
'class_id' => 123456,
'discount' => 5,
'start_date' => '2020-06-06',
// 'end_date' => '2020-06-06',
'discount_type' => 0,
// 'discount_code' => 'abcd',
// 'discount_limit'=> 5,
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "addDiscount",
"Discount id": 123
},
"message": "Discount added successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
折扣列表
此方法允许获取课程的折扣列表。
ClassRoom::discountList($request)
示例请求
ClassRoom::discountList([
'class_id' => 123456,
]);
示例响应
{
"status": "success",
"data": [
{
"id":"37",
"class_id":"598",
"discount_code":"100code",
"is_use_discount_code":"1",
"discount_limit":"55",
"is_no_limit":"0",
"discount_type":"fixed_amount",
"special_price":"100",
"start_date":"2014-09-01 00:00:00",
"end_date":"0000-00-00 00:00:00",
"is_never_expire":"1"
}
],
"message": "Discount list fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
删除折扣
此方法允许从课程中删除折扣。
ClassRoom::removeDiscount($request)
示例请求
ClassRoom::discountList([
'class_id' => 123456,
]);
示例响应
{
"status": "success",
"data": {
"status":"ok",
"method":"removediscount",
"discount_id":"40"
},
"message": "Discount removed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The discount id field is required."
],
"message": "Invalid Parameter(s)"
}
应用折扣券
此方法允许将折扣应用于课程。
ClassRoom::applyCoupon($request)
示例请求
ClassRoom::applyCoupon([
'class_id' => 123456,
'discount_code' => 'abcd'
]);
示例响应
{
"status": "success",
"data": {
"error":"0",
"discount_id":"88"
"discount_value":"2"
"discount_type":"percentage"
},
"message": "Discount coupon applied successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
录音列表
此方法允许获取课程的所有录音。
ClassRoom::recordingList($request)
示例请求
ClassRoom::recordingList([
'class_id' => 123456,
// 'search' => 'demo'
]);
示例响应
{
"status": "success",
"data": [
{
"id":"6",
"classroom_id":"52",
"user_id":"0",
"name":"video1369233387010_650002050.webm",
"fname":"",
"status":"1",
"date_recorded":"1969-12-31"
},
{
"id":"8",
"classroom_id":"52",
"user_id":"0",
"name":"video1369231601092_104397168.webm",
"fname":"","status":"0",
"date_recorded":"1969-12-31"
}
],
"message": "Recording list fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
获取录音
此方法允许获取课程的具体录音。
ClassRoom::getRecording($request)
示例请求
ClassRoom::getRecording([
'record_id' => 114,
]);
示例响应
{
"status": "success",
"data": [
{
"id":"114",
"classroom_id":"483",
"user_id":"43",
"name":"20143142521video_483_480325_ready.webm",
"fname":"",
"status":"1",
"date_recorded":"2014-04-28",
"record_url":"https:\/\/dm0d88zfsyhg8.cloudfront.net\/20143142521video_483_480325_ready.webm?Expires=1411640160&Signature=WmXk3GV3DMZ7xFHpn9~oRxAG5vbjtTMN~399bZhbF7UPAKJ-xJnKXGPENJffbq5fnsDydb3jAK7vA0O2l5pcz-MPkjqWz13Fg6hPGiT4Vo57gyVe3H9kBWtEAjmZrPaiMMgSweqslx5f9Ytq7D59tez3~qG3pfwW0r59iI8gKHI_&Key-Pair-Id=APKAINGTP6O5WANPM7YQ"
}
],
"message": "Recording fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The record id field is required."
],
"message": "Invalid Parameter(s)"
}
删除录音
此方法允许删除课程的具体录音。
ClassRoom::removeRecording($request)
示例请求
ClassRoom::removeRecording([
'record_id' => 123456,
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "removeclassrecording",
"record_id": "1234"
},
"message": "Recording removed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The record id field is required."
],
"message": "Invalid Parameter(s)"
}
更改录音状态
此方法允许更改课程录音的状态。
ClassRoom::changeRecordingStatus($request)
示例请求
ClassRoom::changeRecordingStatus([
'record_id' => 123456,
]);
示例响应
{
"status": "success",
"data": {
"status":"ok",
"method":"changestatusrecording",
"record_id":"20"
},
"message": "Recording status changed successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The record id field is required."
],
"message": "Invalid Parameter(s)"
}
获取课程使用报告
此方法用于获取与会者的总时长和总生产率百分比。如果您传递一个特定的用户ID,它将返回用户特定的数据
ClassRoom::changeRecordingStatus($request)
示例请求
ClassRoom::classUsageReport([
'class_id' => 123456,
'user_id' => 1,
'is_teacher' => 1
]);
示例响应
{
"status": "success",
"data": [
{
"classId":"1973",
"userId":"1254",
"duration":"00:08:55",
"percentage":"9.91%",
"attendance":"Yes",
"session":
[
{
"time_in":"Jun 14, 2017 03:01:21 AM",
"time_out":"Jun 14, 2017 02:54:49 AM"
},
{
"time_in":"Jun 14, 2017 02:55:02 AM",
"time_out":"Jun 14, 2017 03:01:21 AM"
},
{
"time_in":"Jun 14, 2017 03:45:08 AM",
"time_out":"Jun 14, 2017 03:46:58 AM"
}
]
}
],
"message": "Class usage report fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
获取可用参与者
此方法用于在直播课程启动时显示可用座位列表。通过查询与会者数量,这非常有用,可以分配新与会者到直播课程。
ClassRoom::getAttendees($request)
示例请求
ClassRoom::getAttendees([
'class_id' => 123456
]);
示例响应
{
"status": "success",
"data": {
"status": "ok",
"method": "availableAttendees",
"class_id": "123456",
"remaning_attendees": 2
},
"message": "Available attendees list fetched successfully"
}
错误响应
{
"status": "fail",
"errors": [
"The class id field is required."
],
"message": "Invalid Parameter(s)"
}
时区列表
查看完整列表
28=>(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London
30=>(GMT) Monrovia, Reykjavik
72=>(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna
53=>(GMT+01:00) Brussels, Copenhagen, Madrid, Paris
14=>(GMT+01:00) Sarajevo, Skopje, Warsaw, Zagreb
71=>(GMT+01:00) West Central Africa
83=>(GMT+02:00) Amman
84=>(GMT+02:00) Beirut
24=>(GMT+02:00) Cairo
61=>(GMT+02:00) Harare, Pretoria
27=>(GMT+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius
35=>(GMT+02:00) Jerusalem
21=>(GMT+02:00) Minsk
86=>(GMT+02:00) Windhoek
31=>(GMT+03:00) Athens, Istanbul, Minsk
2=>(GMT+03:00) Baghdad
49=>(GMT+03:00) Kuwait, Riyadh
54=>(GMT+03:00) Moscow, St. Petersburg, Volgograd
19=>(GMT+03:00) Nairobi
87=>(GMT+03:00) Tbilisi
34=>(GMT+03:30) Tehran
1=>(GMT+04:00) Abu Dhabi, Muscat
88=>(GMT+04:00) Baku
9=>(GMT+04:00) Baku, Tbilisi, Yerevan
89=>(GMT+04:00) Port Louis
47=>(GMT+04:30) Kabul
25=>(GMT+05:00) Ekaterinburg
90=>(GMT+05:00) Islamabad, Karachi
73=>(GMT+05:00) Islamabad, Karachi, Tashkent
33=>(GMT+05:30) Chennai, Kolkata, Mumbai, New Delhi
62=>(GMT+05:30) Sri Jayawardenepura
91=>(GMT+05:45) Kathmandu
42=>(GMT+06:00) Almaty, Novosibirsk
12=>(GMT+06:00) Astana, Dhaka
41=>(GMT+06:30) Rangoon
59=>(GMT+07:00) Bangkok, Hanoi, Jakarta
50=>(GMT+07:00) Krasnoyarsk
17=>(GMT+08:00) Beijing, Chongqing, Hong Kong, Urumqi
46=>(GMT+08:00) Irkutsk, Ulaan Bataar
60=>(GMT+08:00) Kuala Lumpur, Singapore
70=>(GMT+08:00) Perth
63=>(GMT+08:00) Taipei
65=>(GMT+09:00) Osaka, Sapporo, Tokyo
77=>(GMT+09:00) Seoul
75=>(GMT+09:00) Yakutsk
10=>(GMT+09:30) Adelaide
4=>(GMT+09:30) Darwin
20=>(GMT+10:00) Brisbane
5=>(GMT+10:00) Canberra, Melbourne, Sydney
74=>(GMT+10:00) Guam, Port Moresby
64=>(GMT+10:00) Hobart
69=>(GMT+10:00) Vladivostok
15=>(GMT+11:00) Magadan, Solomon Is., New Caledonia
44=>(GMT+12:00) Auckland, Wellington
26=>(GMT+12:00) Fiji, Kamchatka, Marshall Is.
6=>(GMT-01:00) Azores
8=>(GMT-01:00) Cape Verde Is.
39=>(GMT-02:00) Mid-Atlantic
22=>(GMT-03:00) Brasilia
94=>(GMT-03:00) Buenos Aires
55=>(GMT-03:00) Buenos Aires, Georgetown
29=>(GMT-03:00) Greenland
95=>(GMT-03:00) Montevideo
45=>(GMT-03:30) Newfoundland
3=>(GMT-04:00) Atlantic Time (Canada)
57=>(GMT-04:00) Georgetown, La Paz, San Juan
96=>(GMT-04:00) Manaus
51=>(GMT-04:00) Santiago
76=>(GMT-04:30) Caracas
56=>(GMT-05:00) Bogota, Lima, Quito
23=>(GMT-05:00) Eastern Time (US & Canada)
67=>(GMT-05:00) Indiana (East)
11=>(GMT-06:00) Central America
16=>(GMT-06:00) Central Time (US & Canada)
37=>(GMT-06:00) Guadalajara, Mexico City, Monterrey
7=>(GMT-06:00) Saskatchewan
68=>(GMT-07:00) Arizona
38=>(GMT-07:00) Chihuahua, La Paz, Mazatlan
40=>(GMT-07:00) Mountain Time (US & Canada)
52=>(GMT-08:00) Pacific Time (US & Canada)
104=>(GMT-08:00) Tijuana, Baja California
48=>(GMT-09:00) Alaska
32=>(GMT-10:00) Hawaii
58=>(GMT-11:00) Midway Island, Samoa
18=>(GMT-12:00) International Date Line West
105=>(GMT-4:00) Eastern Daylight Time (US & Canada)
13=>GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague
支持货币列表
查看完整列表
AUD
CAD
EUR
GBP
NZD
USD
重复列表
查看完整列表
1 =>Daily (all 7 days)
2=>6 Days(Mon-Sat)
3=>5 Days(Mon-Fri)
4=>Weekly
5=>Once every month
6=>On selected days
工作日列表
查看完整列表
1=> Sunday
2=> Monday
3=> Tuesday
4=> Wednesday
5=> Thursday
6=> Friday
7=> Saturday
界面语言列表
查看完整列表
1 =>arabic
2 =>bosnian
3 =>bulgarian
4 =>catalan
5 =>chinese-simplified
6 =>chinese-traditional
7 =>croatian
8 =>czech
9 =>danish
10 =>dutch
11 =>english
12 =>estonian
13 =>finnish
14 =>french
15 =>german
16 =>greek
17 =>haitian-creole
18 =>hebrew
19 =>hindi
20 =>hmong-daw
21 =>hungarian
22 =>indonesian
23 =>italian
24 =>japanese
25 =>kiswahili
26 =>klingon
27 =>korean
28 =>lithuanian
29 =>malayalam
30 =>malay
31 =>maltese
32 =>norwegian-bokma
33 =>persian
34 =>polish
35 =>portuguese
36 =>romanian
37 =>russian
38 =>serbian
39 =>slovak
40 =>slovenian
41 =>spanish
42 =>swedish
43 =>tamil
44 =>telugu
45 =>thai
46 =>turkish
47 =>ukrainian
48 =>urdu
49 =>vietnamese
50 =>welsh
数据中心区域列表
查看完整列表
0 => Intelligent routing to nearest location
1 => US East (Dallas, TX)
2 => US West (Los Angeles, CA)
3 => US East (New York)
4 => Europe (Frankfurt, Germany)
5 => Europe (London)
6 => Asia Pacific (Bangalore, India)
7 => Asia Pacific (Singapore)
8 => US East (Miami, FL)
9 => Europe (Milan, Italy)
10 => Asia Pacific (Tokyo, Japan)
11 => Middle East (Dubai, UAE)
12 => Australia (Sydney)
13 => Europe (Paris, France)
14 => Asia Pacific (Hong Kong, China)
15 => Europe (Amsterdam, Netherlands)
作者
- 阿基布·坦吉姆 - akibtanjim
- Alveee - Alveee
- 鲁图卢拉·伊尔·卡比尔·阿希克 - LutfullahilKabirAshik