hublifyConnector

Folgende beispielhafte Implementierung eines PHP-basierten Hublify-Clients.

/**
 * Class hublifyConnector              ( DEMO CLASS ! )
 *
 * An easy to use class to call the hublify api to read or write data.
 *
 * This simple class uses only CURL-functions. It has no other other dependencies.
 *
 */
class hublifyConnector {


    /**
     * @var string The url of your hublify-server, including the base path to api-resource.
     *      Example:  "https://xyz.hublify.io/api/"
     */
    protected  $api_url = null;

    /**
     * @var string The required api-version addressed on the hublify-server.
     *      Leave this untouched. You actually will not have to change this, at all.
     *      Default:  "eos_10"
     */
    protected  $api_version = 'eos_10';

    /**
     * @var string The username with which you want to connect to the hublify-server.
     *      Example: "foo.bar"
     */
    protected  $api_user = null;

    /**
     * @var string The dynamically acquired session-id-token provided from the hublify-server.
     *      We'll get this once we init the api-session and store it here for all further api-calls.
     *      As long as this hublifyConnector-instance lives. 
     */
    protected  $api_sessId = null;


    /**
     * hublifyConnector constructor.
     *
     * Automatically initializes an api session.
     *
     * @param $url string The url of your hublify-server, including the base path to api-resource.
     *        Example:  "https://xyz.hublify.io/api/"
     *
     * @param $username string The hublify-username with which you want to connect to the hublify-server.
     *        Example: "foo.bar"
     *
     * @param $userpwd string The password of that hublify-username.
     *        This ist not stored anywhere in this instance.
     */
    function __construct($url, $username, $userpwd) {
        $this->initSession($url, $username, $userpwd);
    }


    /**
     * Init the api-session
     *
     * This is usually called only once and directly in the beginning of this instance's lifecycle.
     *
     * We will connect and login to the api with username and password and in case of success we will
     * receive a api-session-id in return. This will be stored internally and needs to be used on all
     * further api-calls for authentication.
     *
     * @param $url string The url of your hublify-server, including the base path to api-resource.
     *        Example:  "https://xyz.hublify.io/api/"
     *
     * @param $username string The hublify-username with which you want to connect to the hublify-server.
     *        Example: "foo.bar"
     *
     * @param $userpwd string The password of that hublify-username.
     *        This ist not stored anywhere in this instance.
     *
     * @return bool Returns TRUE on login-success, else FALSE.
     */
    public function initSession($url, $username, $userpwd) {

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url.'login');
        $d = json_encode(array('username' => $username, 'userpwd' => $userpwd));
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $d);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $loginR = json_decode(curl_exec($ch),true);

        curl_close($ch);

        if(isset($loginR['data']['sessid'])) {

            $this->api_sessId = $loginR['data']['sessid'];

            $this->api_url = $url;
            $this->api_username = $url;

            return true;

        } else {

            $this->api_sessId = null;
            echo "ERROR connecting to api: ".$url;
        }
        return false;
    }


    /**
     * Calls an api-resource
     *
     * You need to have a valid API-Session instantiated...
     *
     * @param $function string The api-resource you want to call.
     *        Example:  "product_getlist".
     *
     * @param $params array Optional parameters for the called function.
     *        Which parameters are possible or required depends on the function you call.
     * 
     * @param $stream bool Optional. Set true, if you expect a stream instead of json as a result
     *
     * @return array|null
     */
    public function call($function, $params = null, $stream = false)
    {
        if(strlen($this->api_url)>0 && strlen($this->api_sessId)>0) {

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $this->api_url . $this->api_version . '/' . $function);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array( "API-SessID: " . $this->api_sessId ));
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

            if (!is_null($params)) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
            }

            $response = curl_exec($ch);
            curl_close($ch);

            if ($stream == true) {
                $r = $response;
            } else {
                $r = json_decode($response, true);
            }

            if (!is_null($r)) {
                return ($r);

            } else {
                echo "CALL error.";
                print_r($response);
            }
        } else {
            echo "CALL error. No API-url and/or -sessId set.";
        }
        return null;
    }

}

Beispiel

Folgendes Beispiel benutzt die hublifyConnector Class, um eine Produktliste abzurufen.

index.php

/**
 *     C a l l i n g    t h e    H u b l i f y    A P I
 *
 *     Using the "hublifyConnector"-class
 */

    require_once ('hublifyconnector.class.php');

    // Provide your Hublify-server and -credentials
    $hublifySrvUrl = 'https://{your-hublify-url}/api/';
    $hublifyUserName = '<your username>';
    $hublifyPwd = '<your pwd>';

    // Create hublify-api-connector (and init connection):
    $hublify = new hublifyConnector($hublifySrvUrl, $hublifyUserName, $hublifyPwd);

    // Call api:  "product list"
    $r = $hublify->call(
        'product_getlist',
        [
            "fields"=> [ "name","pcode" ],
            'sql' => [ 'limit' => [ 'max' => 3]]]
    );

    print_r($r);

Ausgabe

Array
(
    [0] => Array
        (
            [pcode] => GX00009
            [name] => T-Shirt Skywalker
        )

    [1] => Array
        (
            [pcode] => SW00123
            [name] => Laserschwert "Vader"
        )

    [2] => Array
        (
            [pcode] => SW00124
            [name] => Yoda Cape XXS
        )

)