Получить баланс бонусного счета iikoCard по номеру телефона

Модуль расширенного управления меню для битрикс

Сентябрь 11, 2023

Теги: Интеграция с iiko

Для модуля Интеграция с iiko. Получение баланса всех бонусных счетов пользователя по его номеру телефона.

В данном примере 29 - это идентификатор элемента инфоблока ресторанов:


\Bitrix\Main\Loader::includeModule('grain.iiko');

$restaurantId 29;
$account Grain\Iiko\Rest::getAccount($restaurantId);
var_dump(\Grain\Iiko\Rest::getWalletBalancesByPhone($restaurantId,'+79999999999',false));
/*
Вариант ответа: 
array(2) {
  ["result"]=>
  array(1) {
    [0]=>
    array(4) {
      ["id"]=>
      string(36) "03650000-6bac-ac3f-97da-08db8e621df1"
      ["name"]=>
      string(35) "Бонусная программа"
      ["type"]=>
      int(1)
      ["balance"]=>
      float(1100)
    }
  }
  ["account"]=>
  array(6) {
    ["ID"]=>
    int(0)
    ["HOST"]=>
    string(20) "api-ru.iiko.services"
    ["PORT"]=>
    int(443)
    ["LOGIN"]=>
    string(3) "***"
    ["PASSWORD"]=>
    string(0) ""
    ["API_VERSION"]=>
    int(1)
  }
}
*/

Функция getFormatedByPhone для получения бонусного баланса с кешированием в сессии (в данном примере 317 - это идентификатор ресторана):


namespace Grain;


use 
Bitrix\Main\Loader;
use 
Grain\Iiko\Rest;

\Bitrix\Main\EventManager::getInstance()->addEventHandler
    
'sale'
    
'OnSaleOrderSaved'
    
'\Grain\IikoBonus::onSaleOrderSaved'
); 

class 
IikoBonus 
{
    const 
restaurantId 317;
    
    public static function 
onSaleOrderSaved(\Bitrix\Main\Event $event)
    {
        if(!
$event->getParameter("IS_NEW"))
            return;
        
$order $event->getParameter("ENTITY");
        static::
clear();
    }
    
    public static function 
getFormatedByPhone($phone)
    {
        
$balance = static::get(static::restaurantId,$phone);
        if(
$balance===null)
            return 
'';
        if(!
loader::includeModule('sale'))
            return 
'';
        return 
\SaleFormatCurrency($balance,'RUB');
    }
    
    public static function 
get($restaurantId,$phone)
    {
        if(isset(
$_SESSION['grainIikoBonus'][(int)$restaurantId]))
            return 
$_SESSION['grainIikoBonus'][(int)$restaurantId];
        
        if(!
Loader::includeModule('grain.iiko'))
            return 
null;            
        
$account Rest::getAccount($restaurantId);
        
$result Rest::getWalletBalancesByPhone($restaurantId,$phone,false);
            
        if(!isset(
$result['result'][0]['balance']))
            
$balance null;
        else
            
$balance = (float)$result['result'][0]['balance'];

        if(!isset(
$_SESSION['grainIikoBonus']))
            
$_SESSION['grainIikoBonus'] = array();
        
$_SESSION['grainIikoBonus'][(int)$restaurantId] = $balance;
        return 
$_SESSION['grainIikoBonus'][(int)$restaurantId];
    }
    
    public static function 
clear()
    {
        if(isset(
$_SESSION['grainIikoBonus']))
            unset(
$_SESSION['grainIikoBonus']);
    }
}

← Переход к списку