#битрикс #яндекс
Доброго времени суток ! На сайте реализована многосайтовость, два ИМ на которых можно оформлять заказы, подключена яндекс касса. В аккаунте яндекс кассы прописаны ссылки: Check URL https://site1.ru/bitrix/tools/sale_ps_result.php Aviso URL https://site1.ru/bitrix/tools/sale_ps_result.php Success URL http://site1.ru/bitrix/tools/sale_ps_success.php Fail URL http://site1.ru/bitrix/tools/sale_ps_fail.php т.е ссылки от первого сайта, когда клиент делает заказа на втором сайте site2.ru то в случае успешной оплаты соответственно от попадает на site1.ru , мне нужно сделать перенаправление на site2.ru т.е на тот сайт в котором был сделан заказ. В файле /bitrix/tools/sale_ps_success.php я хочу сделать редирект , как мне показалось что это можно сделать получив ID заказа из URL который формирует яндекс касса в случае успешной оплаты, в котором есть параметр orderNumber=273 . Но заметил что номер заказа в яндекс кассе не совпадают с номером заказа на сайте. К примеру если а ЯК это 273 то на сайте 280 . И итог того что хочу сделать: Получить номер заказа из URL, в файле sale_ps_success.php проверить какому сайту пренадлежит заказ и сделать редиррект на нужный сайт https://site2/personal/order/make/?ORDER_ID=".$OrderID Кто нибудь сталкивался с подобным? Почему номера заказов разные? По совету Mihanik71 использовать класс Bitrix\Sale\Internals\PaymentTable оказалось верным решением за что ему большое спасибо, ниже пример кода который в файле(sale_ps_success.php) я запилил у себя на сайте: $orderNumbder = $_GET['orderNumber']; // тут приходит номер оплаты CModule::IncludeModule("sale"); c $obj = new Bitrix\Sale\Internals\PaymentTable; // класс с помощью которого можно вытащить id заказа, был обнаружен с помощью модуля live ip $shimpentCode = $obj->getlist(array('select' => array('ID','ORDER_ID'),'filter' => array('ID' => $orderNumbder)))->fetch(); $SiteOrder = CSaleOrder::GetByID($shimpentCode['ORDER_ID']); // вытаскиваем свойства заказа, нас интересует поле LID $SiteID = $SiteOrder['LID']; // id сайта на котором была покупка $OrderID = $shimpentCode['ORDER_ID']; $successUrl = ""; // простое условие , выбираем куда редиректить покупателя if($SiteID == 's1'){ $successUrl = "https://site1.ru/personal/order/make/?ORDER_ID=".$OrderID . "&PAY=Y"; // параметр PAY=Y добавил для своих нужд } if($SiteID == 's2'){ $successUrl = "https://site2.ru/personal/order/make/?ORDER_ID=".$OrderID . "&PAY=Y"; } $successPath = COption::GetOptionString("sale", "sale_ps_success_path", "/"); if(!empty($successUrl)){ LocalRedirect($successUrl); } }
Ответы
Ответ 1
Есть класс Bitrix\Sale\Internals\PaymentTable там по номеру оплаты поле ID можно получить номер заказа ORDER_ID.Ответ 2
Ваше решение не совсем верно с точки зрения нового ядра D7 Битрикс. Нежелательно использовать API старого ядра, когда есть аналоги нового. К тому же было бы неверно использовать Bitrix\Sale\Internals\PaymentTable, потому что нет гарантий, что данное поведение функции сохраниться в дальнейшем, а именно: Подпространство Bitrix\Sale\Internals содержит классы для работы с таблицами модуля Интернет-магазин. Важно! Прямое использование данных классов не рекомендуется и совместимость не гарантируется. https://dev.1c-bitrix.ru/api_d7/bitrix/sale/internals/ Гораздо лучше использовать доступные публичные статические методы: //Вместо CModule::IncludeModule("sale"); \Bitrix\Main\Loader::includeModule('sale'); //Вместо создания объекта класса Bitrix\Sale\Internals\PaymentTable $payment = \Bitrix\Sale\Payment::getList( array( "filter" => array('ID' => $_GET['orderNumber']), "select" => array('ORDER_ID') ) ); $paymentFields = $payment->fetch(); //Поднимаем объект заказа по id $order = \Bitrix\Sale\Order::load($paymentFields['ORDER_ID']); //Получаем поле 'LID' $SiteID = $order->getField('LID'); //'ID' заказа можно получить и из заказа тоже, например: $OrderID = $order->getId() $OrderID = $paymentFields['ORDER_ID']; $successUrl = ""; // простое условие , выбираем куда редиректить покупателя if($SiteID == 's1') { $successUrl = "https://site1.ru/personal/order/make/?ORDER_ID=".$OrderID . "&PAY=Y"; // параметр PAY=Y добавил для своих нужд } if($SiteID == 's2') { $successUrl = "https://site2.ru/personal/order/make/?ORDER_ID=".$OrderID . "&PAY=Y"; } if(!empty($successUrl)) { LocalRedirect($successUrl); } Можно еще и $_GET['orderNumber'] через API получать, но это уже так, легкое ООП извращение: $request = \Bitrix\Main\Context::getCurrent()->getRequest(); $request->get("orderNumber");
Комментариев нет:
Отправить комментарий