Ошибка может возникнуть на запросе SaleApproved при оплате бонусами с указанного номера карты, когда сделать это не представляется возможным.
Если с бонусным счетом всё в порядке, но на нем не хватает средств для оплаты - тогда возникает ошибка CEE-167.
Повторная попытка вызова SaleApproved не приведет к успеху. Возможные пути исправления:
Рассмотрим стандартный ответ на запрос Login:
Ответ Login
<?xml version='1.0' encoding='Windows-1251' standalone='yes'?>
<XML>
<Result>Ok</Result><Error></Error><Remark></Remark>
<Data>
<Owner ID='10000000000102'>
<Name Type='First'><![CDATA[Ivan]]></Name>
<Name Type='Middle'><![CDATA[Ivanovich]]></Name>
<Name Type='Last'><![CDATA[Ivanov]]></Name>
<Name Type='Full'><![CDATA[Ivanov Ivan Ivanovich]]></Name>
</Owner>
<Accounts>
<!--- вырезано для краткости --->
<Account AccountNumber='01.00004.00000615.0001' Type='2' Code='5' Blocked='0'>
<Name>
<![CDATA[Bonus]]>
</Name>
<CreditDepth Sum='0'>0руб 00коп</CreditDepth>
<Balance Sum='21170'>211руб 70коп</Balance>
<BlockReason>
<![CDATA[]]>
</BlockReason>
</Account>
</Accounts>
</Data>
</XML>
Мы видим, что среди всех есть счет с Type
=2 - значит, это счет с бонусами. Он не заблокирован (Blocked='0'), поэтому с данного счета можно списывать бонусы
При ошибке CEE-166 возможны следующие причины:
Информация о счетах по указанному номеру карты (см. запрос Login) передается от системы лояльности (CRM), в том числе и признак блокировки Blocked.