Такая проблема после перехода на php 8.2, кто знает в чем дело? Прошу помочь
Кстати ошибка при оформлении заказа.
[CODE]Fatal error: Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) in /home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php on line 21
[ErrorException] E_COMPILE_ERROR
Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) (0)
/home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php:21[/CODE]
'sale',
'onSalePaySystemRestrictionsClassNamesBuildList',
'myPayFunction'
);
function myPayFunction()
{
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
'\MyPaySystemRestriction' => '/local/php_interface/include/mypayrestriction.php',
)
);
}
[/CODE]
use \Bitrix\Sale\Internals\Entity;
class MyPaySystemRestriction extends Base\Restriction
{
public static function getClassTitle()
{
return 'ограничение по наличию';
}
public static function getClassDescription()
{
return 'оплата онлайн будет доступна только если товар в наличии';
}
protected static function extractParams(Bitrix\Sale\Payment $payment)
{
$obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL")));
CModule::IncludeModule('iblock');
while($bItem = $obBasket->Fetch()){
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "CATALOG_QUANTITY");
$mxResult = CCatalogSku::GetProductInfo($bItem["PRODUCT_ID"]);
if (is_array($mxResult)) {
$arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>5);//Указываем ID инфоблока
} else {
$arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>4);//Указываем ID инфоблока
}
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, Array("nPageSize"=>1), $arSelect);
while($ob = $res->GetNextElement()){
if ($ob->GetFields()["CATALOG_QUANTITY"] <= 0) {
$arFields = true;
break;
}
}
}
$nal = true;
if ($arFields) {
$nal = false;
}
return $nal;
}
public static function check($nalich, array $restrictionParams, $PaySystemId = 1)
{
if (!$nalich) {
if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'Y') {
return false;
}
} else {
if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'N') {
return false;
}
}
return true;
}
public static function getParamsStructure($entityId = 0)
{
return array(
"MY_PARAM_CHECKBOX" => array(
'TYPE' => 'Y/N',
'VALUE' => 'Y',
'LABEL' => 'Наличие да / нет'
)
);
}
}[/CODE]
Кстати ошибка при оформлении заказа.
[CODE]Fatal error: Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) in /home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php on line 21
[ErrorException] E_COMPILE_ERROR
Declaration of MyPaySystemRestriction::extractParams(Bitrix\Sale\Payment $payment) must be compatible with Bitrix\Sale\Services\Base\Restriction::extractParams(Bitrix\Sale\Internals\Entity $entity) (0)
/home/gotovo/fm.gotovo.site/local/php_interface/include/mypayrestriction.php:21[/CODE]
В init.php
[CODE]Bitrix\Main\EventManager::getInstance()->addEventHandler('sale',
'onSalePaySystemRestrictionsClassNamesBuildList',
'myPayFunction'
);
function myPayFunction()
{
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS,
array(
'\MyPaySystemRestriction' => '/local/php_interface/include/mypayrestriction.php',
)
);
}
[/CODE]
в mypayrestriction.php
[CODE]use \Bitrix\Sale\Services\Base;use \Bitrix\Sale\Internals\Entity;
class MyPaySystemRestriction extends Base\Restriction
{
public static function getClassTitle()
{
return 'ограничение по наличию';
}
public static function getClassDescription()
{
return 'оплата онлайн будет доступна только если товар в наличии';
}
protected static function extractParams(Bitrix\Sale\Payment $payment)
{
$obBasket = \Bitrix\Sale\Basket::getList(array('filter' => array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "ORDER_ID" => "NULL")));
CModule::IncludeModule('iblock');
while($bItem = $obBasket->Fetch()){
$arSelect = Array("ID", "IBLOCK_ID", "NAME", "CATALOG_QUANTITY");
$mxResult = CCatalogSku::GetProductInfo($bItem["PRODUCT_ID"]);
if (is_array($mxResult)) {
$arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>5);//Указываем ID инфоблока
} else {
$arFilter = Array("ID"=>$bItem["PRODUCT_ID"], "IBLOCK_ID"=>4);//Указываем ID инфоблока
}
$res = CIBlockElement::GetList(Array("SORT"=>"ASC"), $arFilter, false, Array("nPageSize"=>1), $arSelect);
while($ob = $res->GetNextElement()){
if ($ob->GetFields()["CATALOG_QUANTITY"] <= 0) {
$arFields = true;
break;
}
}
}
$nal = true;
if ($arFields) {
$nal = false;
}
return $nal;
}
public static function check($nalich, array $restrictionParams, $PaySystemId = 1)
{
if (!$nalich) {
if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'Y') {
return false;
}
} else {
if ($restrictionParams["MY_PARAM_CHECKBOX"] == 'N') {
return false;
}
}
return true;
}
public static function getParamsStructure($entityId = 0)
{
return array(
"MY_PARAM_CHECKBOX" => array(
'TYPE' => 'Y/N',
'VALUE' => 'Y',
'LABEL' => 'Наличие да / нет'
)
);
}
}[/CODE]