· 4 years ago · Jan 28, 2021, 01:56 PM
1function zoom_convert_date($date) {
2 $year = substr($date, 0, 4);
3 $month = substr($date, 4, 2);
4 $day = substr($date, 6, 2);
5 $hour = substr($date, 8, 2);
6 $minute = substr($date, 10, 2);
7 $second = substr($date, 12, 2);
8
9 return $year . "-" . $month . "-" . $day . "T" . $hour . ":" . $minute . ":" . $second;
10}
11
12function create_meeting($booking_id, $order_id) {
13 require_once 'chat/config.php';
14
15 $client = new GuzzleHttp\Client(['base_uri' => 'https://api.zoom.us']);
16 $db = new DB();
17
18 $booking = new WC_Booking($booking_id);
19 $booking_meta = get_post_meta($booking_id);
20 $start_date = zoom_convert_date($booking_meta['_booking_start'][0]);
21 $end_date = zoom_convert_date($booking_meta['_booking_end'][0]);
22 $duration = (strtotime($end_date) - strtotime($start_date)) / 60;
23 $booking_product = $booking_meta['_booking_product_id'][0];
24
25 try {
26 $response = $client->request('POST', '/oauth/authorize', [
27 'form_params' => [
28 "response_type" => "code",
29 "client_id" => CLIENT_ID,
30 "redirect_uri" => REDIRECT_URI
31 ],
32 ]);
33
34 $code = json_decode($response->getBody()->getContents(), true);
35
36 } catch(Exception $e) {
37 echo $e->getMessage();
38 }
39
40 try {
41 $response = $client->request('POST', '/oauth/token', [
42 "headers" => [
43 "Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
44 ],
45 'form_params' => [
46 "grant_type" => "authorization_code",
47 "code" => $code,
48 "redirect_uri" => REDIRECT_URI
49 ],
50 ]);
51
52 $token = json_decode($response->getBody()->getContents(), true);
53
54 if($db->is_table_empty()) {
55 $db->update_access_token(json_encode($token));
56 }
57 } catch(Exception $e) {
58 echo $e->getMessage();
59 }
60
61 $arr_token = $db->get_access_token();
62 $accessToken = $arr_token->access_token;
63
64 try {
65 $response = $client->request('POST', '/v2/users/me/meetings', [
66 "headers" => [
67 "Authorization" => "Bearer $accessToken"
68 ],
69 'json' => [
70 "topic" => "#" . $booking_id . " " . str_replace(' ', " ", get_the_title($booking->product_id)),
71 "type" => 2,
72 "start_time" => $start_date . "Z",
73 "duration" => $duration,
74 "password" => wp_generate_password(8),
75 "timezone" => "Europe/Warsaw"
76 ],
77 ]);
78
79 $data = json_decode($response->getBody());
80 $db->insert_meeting(array($data->id, get_field("ekspert", $booking->product_id)->ID, $order_id, $data->start_time, $data->duration, $data->join_url, $data->password));
81
82 } catch(Exception $e) {
83 if( 401 == $e->getCode() ) {
84 $refresh_token = $db->get_refersh_token();
85
86 $client = new GuzzleHttp\Client(['base_uri' => 'https://zoom.us']);
87 $response = $client->request('POST', '/oauth/token', [
88 "headers" => [
89 "Authorization" => "Basic ". base64_encode(CLIENT_ID.':'.CLIENT_SECRET)
90 ],
91 'form_params' => [
92 "grant_type" => "refresh_token",
93 "refresh_token" => $refresh_token
94 ],
95 ]);
96 $db->update_access_token($response->getBody());
97
98 create_meeting($booking_id, $order_id);
99 } else {
100 echo $e->getMessage();
101 }
102 }
103}
104
105function meeting_init($order_id) {
106 $order = wc_get_order($order_id);
107 $booking_ids = WC_Booking_Data_Store::get_booking_ids_from_order_id($order_id);
108
109 if ($order->get_status() == "completed" && !empty($booking_ids)) {
110 foreach ($booking_ids as $booking_id) {
111 create_meeting($booking_id, $order_id);
112 }
113 }
114}
115add_action('woocommerce_thankyou', 'meeting_init', 10, 1);