Как работает PHP код передачи данных о гашении билета
Гашение билетов происходит сканером, при сканировании QR кодов билетов, и может проводиться в ручном режиме в реестре покупателей билетов.
Наша компания Цифровая фабрика, по одному из заказов, работала по программированию и настройке передачи данных в билетный реестр из существующего интернет магазина. Это материалы собранные к данному проекту.
Передача данных по API в ручном режиме из реестра покупателей
Ручное гашение может заменять гашение сканером, после проверки билета администратором.
Во-первых нужно получить номер заказа, чтобы из базы данных получить адрес ссылки в билетном реестре. Также получаем текущее время, присваем его переменной, для передачи данных о времени гашения билета.
Собственно сам процесс передачи данных о гашении, это знать по какому адресу отправлять для какого билета, то есть передача данных это куда и что, что это visit_date.
Весь процесс передачи проходит в public function ajax_attendee_checkin()
Когда он вызывается то во время регистрации посетителя, во время гашения его билета, запускается процесс передачи данных. Этот процесс по AJZX находится в файле event-tickets/src/Tribe/Metabox.php// Гашение работает по нажатию кнопки, "Погасить билет".
После передачи данных получаем ответ, в виде массива, сериализируем его, добавляем время, и записываем результат в лог файл.
394
395
396 $ticketnumber = $attendee_id['ticket_id'];
397 $order_idforcheckin = $attendee_id - 1;
398
399 global $wpdb;
400
401 $localtime = time() + 25200;
402 $visited_normal = date('d.m.y H:i', $localtime);
403
404 $wpdb->update( 'ticket_id',
405
406 [ 'visited_normal' => $visited_normal],
407 [ 'ticket_id' => $order_idforcheckin]
408
409 );
410
411 $gos = $wpdb->get_row( "SELECT * FROM ticket_id WHERE ticket_id = '$order_idforcheckin'" );
412 $gosId = $gos->gos_id;
413
414 $visit_date = time();
415
416 $ticketId = $gosId;
417 $url = 'https://pushka.gosuslugi.ru/api/v1/tickets/'. $ticketId . '/visit';
418
419 $data = [
420 'visit_date' => $visit_date
421 ];
422
423 $jsonData = json_encode($data);
424
425 $ch = curl_init($url);
426 curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'PUT');
427 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
428 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
429 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
430 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
431 curl_setopt($ch, CURLOPT_HEADER, false);
432 curl_setopt($ch, CURLOPT_TIMEOUT, 4000);
433 curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
434 curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer тут код авторизации в реестре']);
435 curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
436
437 $curlResult = curl_exec($ch); // выполняем передачу результат получилось или нет записываем в переменную
438
439
440 if ($curlResult === FALSE) {
441 $curlerror = curl_error($ch);
442 }
443
444 $curlinfo = curl_getinfo($ch); //тут получаем данные по передаче в виде массива
445
446 $new_str2 = serialize($curlinfo);
447 $timeqr = time();
448 $dateqr = date("Передача данных автоматическая d.m.y H:i");
449 $localtime = time() + 25200;
450 $visited_normal = date('d.m.y H:i', $localtime);
455 curl_close($ch);
456
457
458 $filename = DIR . '/curlinfo.log'; // создаем файл в который будем записать лог
459 $fh = fopen($filename, 'c');
460 fseek($fh, 0, SEEK_END);
461 fwrite($fh, PHP_EOL . "attendee = $attendee");
462 fwrite($fh, PHP_EOL . "visited_normal = $visited_normal"); // время в "нормальном формате", не UNIX время
463 fwrite($fh, PHP_EOL . "ticketnumber = $ticketnumber"); // записываем в лог номер билета
464
466 fwrite($fh, PHP_EOL . "order_idforcheckin = $order_idforcheckin");
467
468 fwrite($fh, PHP_EOL . "new_str2 = $new_str2"); // тут результаты передачи данных, результат обмена
469 fwrite($fh, PHP_EOL . "order_idforcheckin = $order_idforcheckin");
471 fwrite($fh, PHP_EOL . " \n ");
472
473 fclose($fh);