Search code examples
phpjsoncurlosticket

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'     =>      'mailbox@host.com',
        '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'     =>      'mailbox@host.com',
        '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


Solution

  • <?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'     =>      'mailbox@host.com',
            '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