Lslschr
Lslschr

Reputation: 25

Can't create ticket via OsTicket api (Malformed JSON)

<?php
#$test = snmpget -v 1 -O v 192.168.0.100 -c public .1.3.6.1.4.1.6574.1.2.0;

$oksystemp = "40";

$cursystemp = snmpget("192.168.0.100", "public", "1.3.6.1.4.1.6574.1.2.0");

if ($cursystemp > $oksystemp) {

    $config = array(
        'url'=>'http://10.0.0.56/api/http.php/tickets.json',
        'key'=>'83952BBA4A8173FF265FCD9941019797'
        );

    # Fill in the data for the new ticket, this will likely come from $_POST.

    $data = array(
        'name'      =>      'John Doe',
        'email'     =>      '[email protected]',
        'subject'   =>      'Test API message',
        'message'   =>      'Die Temperatur des Systems beträgt ".$cursystemp."',
        'attachments' => array(),
    );

    /* 
     * Add in attachments here if necessary
    $data['attachments'][] =
    array('filename.pdf' =>
            'data:image/png;base64,' .
                base64_encode(file_get_contents('/path/to/filename.pdf')));
    */

    #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.7');
    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

} elseif ($cursystemp == $oksystemp) {

    $config = array(
        'url'=>'http://10.0.0.56/api/http.php/tickets.json',
        'key'=>'83952BBA4A8173FF265FCD9941019797'
        );

    # Fill in the data for the new ticket, this will likely come from $_POST.

    $data = array(
        'name'      =>      'John Doe',
        'email'     =>      '[email protected]',
        'subject'   =>      'Test API message',
        'message'   =>      'Die Temperatur des Systems beträgt ".$cursystemp."',
        'attachments' => array(),
    );

    /* 
     * Add in attachments here if necessary
    $data['attachments'][] =
    array('filename.pdf' =>
            'data:image/png;base64,' .
                base64_encode(file_get_contents('/path/to/filename.pdf')));
    */

    #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.7');
    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

} else {
    echo ($cursystemp);
}

?>

i got this code. When i execute the script i get an "Syntax error, malformed JSON". I dont know ehere the Problem should be. I want to create a script which will work as a crontab on a server and request every 5 minutes parameters from a synology nas, when the temperature is to high, it should automaticlly create an ticket in osticket.

Kind Regards

Upvotes: 0

Views: 1234

Answers (1)

Lslschr
Lslschr

Reputation: 25

<?php
#$test = snmpget -v 1 -O v 192.168.0.100 -c public .1.3.6.1.4.1.6574.1.2.0;

$oksystemp = "40";

$cursystemp = snmpget("192.168.0.100", "public", "1.3.6.1.4.1.6574.1.2.0");

function ticket() {
    # 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)
    #

    $config = array(
                'url'=>'http://10.0.0.56/api/http.php/tickets.json',
                'key'=>'83952BBA4A8173FF265FCD9941019797'
                );

    # Fill in the data for the new ticket, this will likely come from $_POST.

    $data = array(
        'name'      =>      'John Doe',
        'email'     =>      '[email protected]',
        'subject'   =>      'Test API message',
        'message'   =>      'This is a test of the osTicket API',
        'attachments' => array(),
    );

    /* 
     * Add in attachments here if necessary
    $data['attachments'][] =
    array('filename.pdf' =>
                'data:image/png;base64,' .
                base64_encode(file_get_contents('/path/to/filename.pdf')));
    */

    #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.7');
    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
}


if ($cursystemp > $oksystemp) {

    ticket();

} elseif ($cursystemp == $oksystemp) {

    ticket();

} else {
    echo ($cursystemp);
}

?>

I just cleand my code a little bit now it works, if someone get the same problem

Upvotes: 1

Related Questions