API osTicket для создания нескольких билетов
Я использую API oSTicket для создания тикета на одном веб-сайте, поскольку в нашей компании есть случаи, когда один и тот же тикет необходимо дублировать на другой веб-сайт, на котором также запущен osticket. Я получаю ошибки. То, что я пытаюсь и не уверен, где ошибка, это дублировать код API.
Ниже приведены два кода, помещенные в один. Информация взята из формы на предыдущей странице. Если я использую API для одного билета, он работает нормально. Я использую два разных ключа API
<?php
//eTrack case file create.
date_default_timezone_set('Africa/Johannesburg');
$today = date("Y-m-d");
$time = date("H:i:s");
if(!isset($_POST['submit']))
{
//This page should not be accessed directly. Need to submit the form.
echo "Submitted";
}
$province = $_POST['province'];
$usergroup = $_POST['usergroup'];
$usermail = $_POST['usermail'];
$topicId = $_POST['topicId'];
// If 1, display things to debug.
$debug="0";
// You must configure the url and key in the array below.
$config = array(
'url'=>'http://****.biz/incidents/api/tickets.json', // URL to site.tld/api/tickets.json
'key'=>'****D66F84' // API Key goes here
);
# NOTE: some people have reported having to use "http://your.domain.tld/api/http.php/tickets.json" instead.
if($config['url'] === 'http://e-****.biz.tld/incidents/api/http.php/tickets.json') {
echo "<p style=\"color:red;\"><b>Error: No URL</b><br>You have not configured this script with your URL!</p>";
echo "Please edit this file ".__FILE__." and add your URL at line 18.</p>";
die();
}
if(IsNullOrEmptyString($config['key']) || ($config['key'] === '*******')) {
echo "<p style=\"color:red;\"><b>Error: No API Key</b><br>You have not configured this script with an API Key!</p>";
echo "<p>Please log into System as an admin and navigate to: Admin panel -> Manage -> Api Keys then add a new API Key.<br>";
echo "Once you have your key edit this file ".__FILE__." and add the key at line 19.</p>";
die();
}
# Fill in the data for the new ticket, this will likely come from $_POST.
# NOTE: your variable names in osT are case sensiTive.
# So when adding custom lists or fields make sure you use the same case
# For examples on how to do that see Agency and Site below.
$data = array(
'name' => 'Control', // Client or Company Name
'email' => "$usermail", // Person opening the case file email
'phone' => '**', // Contact number of the person opening the case file. In this instance our Office Number
'subject' => "$casetype - $client - $reg", // Case type description, Testing multiple POST replies to string
'date2' => "$date",
'time' => "$time",
'message' => "
Case Type: $casetype
Vehicle Registration: $reg
Vehicle Make: $make
Client: $name
Where was it Taken: $taken
Reported by: $name2 of $client
Case Notes:
$notes", // test ticket body, aka Issue Details.
'ip' => $_SERVER['REMOTE_ADDR'], // Should be IP address of the machine thats trying to open the ticket.
'topicId' => "$topicId", // the help Topic that you want to use for the ticket Help topic ID is linked to dropdown list
'date' => "$date", //Reported date to Control room
'timerec' => "$time", // Reported time to control room
'email' => "$usermail",
);
# more fields are available and are documented at:
# https://github.com/osTicket/osTicket-1.8/blob/develop/setup/doc/api/tickets.md
if($debug=='1') {
print_r($data);
die();
}
# Add in attachments here if necessary
# Note: there is something with this wrong with the file attachment here it does not work.
//$data['attachments'][] =
//array('file.txt' =>
// 'data:text/plain;base64;'
// .base64_encode(file_get_contents('/file.txt'))); // replace ./file.txt with /path/to/your/test/filename.txt
#pre-checks
function_exists('curl_version') or die('CURL support required');
function_exists('json_encode') or die('JSON support required');
#set timeout
set_time_limit(30);
#curl post
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['url']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_USERAGENT, 'osTicket API Client v1.8');
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:', 'X-API-Key: '.$config['key']));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result=curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code != 201)
die('Unable to create ticket: '.$result);
$ticket_id = (int) $result;
# Continue onward here if necessary. $ticket_id has the ID number of the
# newly-created ticket
function IsNullOrEmptyString($question){
return (!isset($question) || trim($question)==='');
}
?>
<?php
//Recovery Assist case file create.
date_default_timezone_set('Africa/Johannesburg');
$today = date("Y-m-d");
$time = date("H:i:s");
#
# Configuration: Enter the url and key. That is it.
# url => URL to api/task/cron e.g # http://yourdomain.com/support/api/tickets.json
# key => API's Key (see admin panel on how to generate a key)
# $data add custom required fields to the array.
#
# Originally authored by jared@osTicket.com
# Modified by ntozier@osTicket / tmib.net
if(!isset($_POST['submit']))
{
//This page should not be accessed directly. Need to submit the form.
echo "Submitted";
}
$name = $_POST['name'];
$topicId = $_POST['topicId'];
// If 1, display things to debug.
$debug="0";
// You must configure the url and key in the array below.
$config = array(
'url'=>'http://***.co.za/report/api/tickets.json', // URL to site.tld/api/tickets.json
'key'=>'****DA3C6' // API Key goes here
);
# NOTE: some people have reported having to use "http://your.domain.tld/api/http.php/tickets.json" instead.
if($config['url'] === 'http://***.co.za/report/api/http.php/tickets.json') {
echo "<p style=\"color:red;\"><b>Error: No URL</b><br>You have not configured this script with your URL!</p>";
echo "Please edit this file ".__FILE__." and add your URL at line 18.</p>";
die();
}
if(IsNullOrEmptyString($config['key']) || ($config['key'] === '****')) {
echo "<p style=\"color:red;\"><b>Error: No API Key</b><br>You have not configured this script with an API Key!</p>";
echo "<p>Please log into System as an admin and navigate to: Admin panel -> Manage -> Api Keys then add a new API Key.<br>";
echo "Once you have your key edit this file ".__FILE__." and add the key at line 19.</p>";
die();
}
# Fill in the data for the new ticket, this will likely come from $_POST.
# NOTE: your variable names in osT are case sensiTive.
# So when adding custom lists or fields make sure you use the same case
# For examples on how to do that see Agency and Site below.
$data = array(
'name' => 'Control', // Client or Company Name
'email' => "$usermail", // Person opening the case file email
'phone' => '****', // Contact number of the person opening the case file. In this instance our Office Number
'subject' => "$casetype - $client - $reg", // Case type description, Testing multiple POST replies to string
'date2' => "$date",
'time' => "$time",
'message' => "
Case Type: $casetype
Vehicle Registration: $reg
Vehicle Make: $make
Client: $name
Where was it Taken: $taken
Reported by: $name2 of $client
Case Notes:
$notes", // test ticket body, aka Issue Details.
'ip' => $_SERVER['REMOTE_ADDR'], // Should be IP address of the machine thats trying to open the ticket.
'topicId' => "$topicId", // the help Topic that you want to use for the ticket Help topic ID is linked to dropdown list
'date' => "$date", //Reported date to Control room
'timerec' => "$time", // Reported time to control room
'name' => "$name",
'name2' => "$name2",
'email' => "$usermail",
);
# more fields are available and are documented at:
# https://github.com/osTicket/osTicket-1.8/blob/develop/setup/doc/api/tickets.md
if($debug=='1') {
print_r($data);
die();
}
# Add in attachments here if necessary
# Note: there is something with this wrong with the file attachment here it does not work.
//$data['attachments'][] =
//array('file.txt' =>
// 'data:text/plain;base64;'
// .base64_encode(file_get_contents('/file.txt'))); // replace ./file.txt with /path/to/your/test/filename.txt
#pre-checks
function_exists('curl_version') or die('CURL support required');
function_exists('json_encode') or die('JSON support required');
#set timeout
set_time_limit(30);
#curl post
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $config['url']);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_USERAGENT, 'osTicket API Client v1.8');
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect:', 'X-API-Key: '.$config['key']));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result=curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($code != 201)
die('Unable to create ticket: '.$result);
$ticket_id = (int) $result;
# Continue onward here if necessary. $ticket_id has the ID number of the
# newly-created ticket
function IsNullOrEmptyString($question){
return (!isset($question) || trim($question)==='');
}
?>
Я получаю ошибку:
Невозможно повторно объявить функцию IsNullOrEmptyString() (ранее объявленную в /home/www/e-biz/control/iframe/hollard/report_sub.php:350) в /home/www/e- biz / control / iframe / hollard / report_sub. PHP на линии 522
Единственное, о чем я могу думать, это то, что из-за дублирования кода возникают конфликты во втором коде.
PS Я удалил часть кода POST, чтобы сделать код меньше
2 ответа
IsNullOrEmptyString
функция уже определена.
Чтобы избежать этой ошибки, используйте:
if (!function_exists('IsNullOrEmptyString')) {
function IsNullOrEmptyString($question){
return (!isset($question) || trim($question)==='');
}
}
Хотя вы должны обратить внимание на то, почему вы получаете эту ошибку. Обычно это указывает на что-то неправильное в логике приложения.
Никогда не стоит просто дублировать код. Попробуйте увидеть общие / идентичные части и извлечь их как отдельные функции.
Я думаю, вам нужно снова проверить весь процесс. пожалуйста, проверьте ссылку ниже https://github.com/sharmaghanshyam/Osticket-Creation-API