интеграции POS терминала на PHP

Пример нескольких функций

Для HTTP запросов будем использовать  CURL

например проверка состояния аппарата, передаем  $URL из API ikkm 


/apicheck/
Для того чтобы ответ был форме JSON используем ключ v2 
 
/v2/apicheck/
получаем

{ "body" : "0", "result" : "200", "resultText" : "5" }

рассмотрим передаваемые параметры. параметры бывают динамические(apikey) и статичные (ip addr, ширина чека и т.п.) 

public function send_to_ikkm($url,$params_from)

{
    $ip_addr = "192.168.10.132"; //статичный параметр, берем из вашего  конфигурационного файла или базы данных
    $params_stat = array(
        'key' => '34932136',  // динамический параметр, первоначально сохраняем там же где IP адрес, 
                                 //но при каждом новом фискальном чеке данный параметр изменяется, надо сохранять
    );

    $params = array_merge($params_stat,$params_from); // объединяем параметры в зависимости какая API команда требуется 
    

    $myCurl = curl_init();
    curl_setopt_array($myCurl, array(
        CURLOPT_URL => $ip_addr. $url,
        CURLOPT_PORT => 8080,
        CURLOPT_PROTOCOLS => CURLPROTO_HTTP,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query($params)
    ));
    $response = curl_exec($myCurl);
    curl_close($myCurl);
    return $response;
}


пример использования API запроса apicheck для проверки

//$url, $data
public function apicheck()
{

    $params = array(
        'beep' => 'true', //Beep для привлечение внимания покупателя
    );

       $response = $this->send_to_ikkm('/v2/apicheck/',$params);

       $this->response->addHeader('Content-Type: application/json');
       $this->response->setOutput($response);
}

пример печати фискального чека API

public function doFiscal($docType,$total,$cash,$bank,$tara,$credit,$OfdItemDataJSON)
{

        $docTypeThis = "sale";
        if ($docType == 2) $docTypeThis = "saleReturn";
        if ($docType == 3) $docTypeThis = "buy";
        if ($docType == 4) $docTypeThis = "buyReturn";

    $params = array(
        $docTypeThis => $total,  
    );

        if ($cash > 0){
           $params += ["cash" => $cash];  // сколько дали наличности
        }
        if (bank > 0){
           $params += ["bank" => $bank]; // сколько прошло по банковской карте
        }
        if (tara > 0) {
           $params += ["tara" => $tara]; // иногда используют как подарочный сертификат 
        }
        if (credit > 0) {
           $params += ["credit" => $credit]; // для регистрации отпуска в кредит ( например: отпуск товара с доставкой, оплата потом)    
        }


//   вид $OfdItemDataJSON
// [{
//    "name": "Чай",
//    "price": "200",
//    "qty": "2",
//    "sum": "400"}, {
//    "name": "АИ-95",
//    "price": "60",
//    "qty": "2",
//    "sum": "120"}, {
//    "name": " скидка 10% ",
//    "discount": "1240" #если скидка, поля price|qty|sum не указываются}]


    $params_from = array_merge($params, array(
          'itemdata' => $OfdItemDataJSON
    ));

       $response = $this->send_to_ikkm('/api/',$params_from);

       $this->response->addHeader('Content-Type: application/json');
       $this->response->setOutput($response);

}

примеры вызова функции в интерфейсе

<script>
$(document).on('click', '#button-ikkm', function() {
    $.ajax({
        url: 'index.php?route=sale/order/apicheck&user_token={{ user_token }}&order_id={{ order_id }}',
        dataType: 'json',
        beforeSend: function() {
            $('#button-ikkm').button('loading');
        },
        complete: function() {
            $('#button-ikkm').button('reset');
        },
        success: function(json) {
                if (json['body']) {
                  json['body'];
                }
           },
            error: function(xhr, ajaxOptions, thrownError) {
            alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
            }
    });
});
</script>

Ваша проблема решена?