Сентябрь 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']);
}
}