После обновления столкнулись с тем, что пользователь не может пополнить счет через корзину.
Ему в корзине выводится следующее сообщение:
Товар Занесение на внутренний счет 200,00 руб. не доступен для заказа
Вскрытие показало, что появилась функция checkQuantity, которая и выдает эту ошибку.
Функция вызывает callback для товара корзины и проверяет хватает ли товара для заказа.
При реализации данного функционала забыли про компонент bitrix:sale.account.pay, который создает запись в корзине:
Как видно сюда не передается ни название callback функции, ни провайдер, что подтверждает строка в БД:
Соответственно функция checkQuantity() всегда будет возвращать для товаров пополнения счета ошибку. так как переменная $arFieldsTmp будет пустой.
Если у вас на проектах используется компонент bitrix:sale.account.pay - проверьте его работу.
Ему в корзине выводится следующее сообщение:
Товар Занесение на внутренний счет 200,00 руб. не доступен для заказа
Вскрытие показало, что появилась функция checkQuantity, которая и выдает эту ошибку.
function checkQuantity($arBasketItem, $desiredQuantity) { $arResult = array(); /** @var $productProvider IBXSaleProductProvider */ if ($productProvider = CSaleBasket::GetProductProvider($arBasketItem)) { $arFieldsTmp = $productProvider::GetProductData(array( "PRODUCT_ID" => $arBasketItem["PRODUCT_ID"], "QUANTITY" => $desiredQuantity, "RENEWAL" => "N", "USER_ID" => $userId, "SITE_ID" => $siteId, "CHECK_QUANTITY" => "Y" )); } else { $arFieldsTmp = CSaleBasket::ExecuteCallbackFunction( $arBasketItem["CALLBACK_FUNC"], $arBasketItem["MODULE"], $arBasketItem["PRODUCT_ID"], $desiredQuantity, "N", $userId, $siteId ); } if (empty($arFieldsTmp) || !isset($arFieldsTmp["QUANTITY"])) { $arResult["ERROR"] = GetMessage("SBB_PRODUCT_NOT_AVAILABLE", array("#PRODUCT#" => $arBasketItem["NAME"])); } else if ($desiredQuantity > doubleval($arFieldsTmp["QUANTITY"])) { $arResult["ERROR"] = GetMessage("SBB_PRODUCT_NOT_ENOUGH_QUANTITY", array("#PRODUCT#" => $arBasketItem["NAME"], "#NUMBER#" => $desiredQuantity)); } return $arResult; } |
Функция вызывает callback для товара корзины и проверяет хватает ли товара для заказа.
При реализации данного функционала забыли про компонент bitrix:sale.account.pay, который создает запись в корзине:
$arFields = array( "PRODUCT_ID" => $productID, "PRICE" => $tmpPrice, "CURRENCY" => $tmpCurrency, "QUANTITY" => 1, "LID" => SITE_ID, "DELAY" => "N", "CAN_BUY" => "Y", "NAME" => str_replace("#SUM#", SaleFormatCurrency($price, $currency), GetMessage("SAP_BASKET_NAME")), "MODULE" => "sale", "PAY_CALLBACK_FUNC" => $arParams["CALLBACK_NAME"] ); |
Соответственно функция checkQuantity() всегда будет возвращать для товаров пополнения счета ошибку. так как переменная $arFieldsTmp будет пустой.
Если у вас на проектах используется компонент bitrix:sale.account.pay - проверьте его работу.