Opencart Tinkoff и купоны, ошибка division by zero
Недавно разбирались с Opencart модулем эквайринга от Тинкофф-банка, суть — модуль периодически вываливал ошибку «Division by zero: запрос к платёжному сервису был отправлен некорректно»
UPD: Я отправил все доработки сотрудникам Тинькофф Банка, так что, вероятно в ближайшем обновлении их модуля это уже будет исправлено!
Проблема в том, что по какой-то причине их модуль не умеет работать с покупкой подарочных сертификатов и просто всячески отбрыкивается от корректной работы.
Вот лечение — в файле model/extension/payment/tinkoff.php в методе getReceipt после цикла обработки товаров добавляем ещё один цикл вида:
foreach ($this->session->data['vouchers'] as $voucher) { $receiptItems[] = array( 'Name' => mb_substr($voucher['description'], 0, 64), 'Price' => $voucher['amount'] * 100, 'Quantity' => 1, 'Amount' => $voucher['amount'] * 100, 'Tax' => 'none' ); }
здесь мы готовим данные для формирования чека, затем нужно добавить в методе getRealAmount следующий код (опять же, до или после цикла с обработкой товаров):
foreach ($this->session->data['vouchers'] as $voucher) { $price = $voucher['amount']; $realAmount += $price; }
Таким вот нехитрым способом мы добавили поддержку подарочных сертификатов к оплате через тинькофф банк.