Παράδειγμα Χωρίς την class GunetSMS

Παρέχεται παρακάτω ένα απλό παράδειγμα αποστολής μίας ειδοποίησης μέσω SMS. Είναι σε γλώσσα PHP και δεν κάνει depend σε κάποια βιβλιοθήκη ή PHP extension, αλλά υλοποιεί έναν απλό JSON-RPC 2.0 client σε μία function που μπορεί να χρησιμοποιηθεί αυτούσια.

(Σημείωση: ο κώδικας της παρακάτω function προέρχεται από το project JsonRpcPHP και είναι κάτω από την άδεια χρήσης GPL).

<?php

// ==================================================================
//
// Send an SMS Notification to a user's mobile
//
// ------------------------------------------------------------------

$key = 'SET_YOUR_API_KEY_HERE';
$url = 'https://ws.gunet.gr/ws/?service=sms&key='.$key;

try {
    if(empty( jsonrpccall($url, 'send', array(
            'number' => '6998118881',
            'message' => 'Ο κωδικός σας έχει ενημερωθεί.'
    )))) {
        // Success; Message sent!
    }

} catch (Exception $e) {
    // Failure; message was not sent
    echo $e->getMessage();
}



// ==================================================================
//
// Function Defintions Below
//
// ------------------------------------------------------------------

/**
 * Performs a jsonRCP request and gets the results as an array
 *
 * @param string $url
 * @param string $method
 * @param array $params
 * @return array
 */
function jsonrpccall($url, $method, $params) {
    $currentId = 1;
    // check
    if (!is_scalar($method)) {
        throw new Exception('Method name has no scalar value');
    }
    
    // check
    if (is_array($params)) {
        // no keys
        $params = array_values($params);
    } else {
        throw new Exception('Params must be given as array');
    }
    
    // prepares the request
    $request = array(
        'jsonrpc' => "2.0",
        'method' => $method,
        'params' => $params,
        'id' => $currentId
    );
    $request = json_encode($request);
    
    // performs the HTTP POST
    $opts = array ('http' => array (
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'content' => $request
    ));
    $context  = stream_context_create($opts);
    if ($fp = fopen($url, 'r', false, $context)) {
        $response = '';
        while($row = fgets($fp)) {
            $response.= trim($row)."\n";
        }
        $response = json_decode($response,true);
    } else {
        throw new Exception('Unable to connect to URL');
    }
    
    // final checks and return
    // check
    if ($response['id'] != $currentId) {
        throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')');
    }
    if (!is_null($response['error'])) {
        throw new Exception('Request error: '.$response['error']);
    }
    
    return $response['result'];
}