Работа с заказом Битрикс на D7
Последние записи
Битрикс. Работаем с заказом на D7
Получаем данные о заказе по его id с помощью \Bitrix\Sale\Internals\OrderTable
if(class_exists('\Bitrix\Sale\Internals\OrderTable'))
$arOrder = \Bitrix\Sale\Internals\OrderTable::getList(array('order' => array('ID' => 'ASC'), 'filter' => array('ID' => $ORDER_ID)))->Fetch();
else
$arOrder = CSaleOrder::GetList(array(), array('ID' => $ORDER_ID))->Fetch();
Получаем объект заказа
//получаем заказ по id
$order = \Bitrix\Sale\Order::load($orderId);
//получаем заказ по номеру заказа
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderNumber);
Получаем все параметры заказа
$order->getFields();
Получаем наиболее часто используемые параметры:
$order->getField("ID"); // ID заказа
$order->getField("LID"); // ID сайта
$order->getField("ACCOUNT_NUMBER"); // Номер заказа
$order->getField("TRACKING_NUMBER");
$order->getField("PAY_SYSTEM_ID"); //* ID платежной системы
$order->getField("DELIVERY_ID"); //* ID службы доставки
$order->getField("DATE_INSERT"); // object(DateTime) Время добавления
$order->getField("DATE_UPDATE"); // object(DateTime) Время обновления
$order->getField("PERSON_TYPE_ID"); // ID типа плательщика (физ/юр лицо)
$order->getField("USER_ID"); // ID пользователя
$order->getField("PAYED"); //* Статус оплаты (Y/N)
$order->getField("DATE_PAYED"); //* object(DateTime) Дата оплаты
$order->getField("EMP_PAYED_ID");
$order->getField("DEDUCTED"); //* Отгрузка заказа
$order->getField("DATE_DEDUCTED"); //* object(DateTime) Дата отгрузки
$order->getField("EMP_DEDUCTED_ID"); //*
$order->getField("REASON_UNDO_DEDUCTED"); //* Причина отмены отгрузки
$order->getField("STATUS_ID"); // Статус заказа (F/N/H т.п., посмотреть можно тут /bitrix/admin/sale_status.php?lang=ru)
$order->getField("DATE_STATUS"); // object(DateTime) Дата изменения статуса
$order->getField("PRICE_DELIVERY"); //* Стоимость доставки
$order->getField("ALLOW_DELIVERY"); //* Доставка разрешена
$order->getField("RESERVED");
$order->getField("PRICE"); // Сумма заказа
$order->getField("CURRENCY"); // Код валюты
$order->getField("DISCOUNT_VALUE"); // Скидка
$order->getField("TAX_VALUE"); // Налог
$order->getField("SUM_PAID"); // Оплаченная сумма
$order->getField("USER_DESCRIPTION"); // Комментарий покупателя к заказу
$order->getField("PAY_VOUCHER_NUM"); // Номер документа прихода
$order->getField("PAY_VOUCHER_DATE"); // object(DateTime) Дата прихода
$order->getField("ADDITIONAL_INFO"); // Дополнительная информация
$order->getField("COMMENTS"); // Комментарий администратора
$order->getField("COMPANY_ID"); // Офис
$order->getField("RESPONSIBLE_ID"); // Ответственный
$order->getField("LOCKED_BY"); // ID пользователя, заблокировавший заказ
$order->getField("DATE_LOCK"); // object(DateTime) Дата блокировки
$order->getField("UPDATED_1C");
$order->getField("XML_ID");
$order->getField("ID_1C");
$order->getField("VERSION_1C");
$order->getField("VERSION");
$order->getField("EXTERNAL_ORDER");
$order->getField("CANCELED"); // Омена заказа (N/Y)
$order->getField("EMP_CANCELED_ID");
$order->getField("DATE_CANCELED"); // object(DateTime) Дата отмены
$order->getField("REASON_CANCELED"); // Причина отмены
Обновляем и сохраняем заказ
$order->setField('PAYED', 'Y');
$order->save();
Отслеживаем изменение статуса заказа
Событие до смены статуса OnSaleBeforeStatusOrderChange
, после смены OnSaleStatusOrderChange
\Bitrix\Main\EventManager::getInstance()->addEventHandler('sale', 'OnSaleStatusOrderChange', ['Handler', 'OnSaleStatusOrderChange']);
class Handler {
function OnSaleStatusOrderChange($event)
{
$parameters = $event->getParameters();
if ($parameters['VALUE'] === 'F') { //Проверяем статус по его коду
//Можно по имени с помощью $event->getParameter('NAME')
$order = $parameters['ENTITY'];
}
return new \Bitrix\Main\EventResult(
\Bitrix\Main\EventResult::SUCCESS
);
}
}
Битрикс, получаем ссылку на оплату заказа
$ORDER = \Bitrix\Sale\Order::load($arResult['ORDER']['ID']);
if (!$ORDER->getPaymentCollection()->isEmpty() && $order['PAYED'] != 'Y') {
/** @var Payment $payment */
$payment = $ORDER->getPaymentCollection()->current();
$service = \Bitrix\Sale\PaySystem\Manager::getObjectById($payment->getPaymentSystemId());
if ($service) {
$context = \Bitrix\Main\Application::getInstance()->getContext();
$result = $service->initiatePay(
$payment,
$context->getRequest(),
\Bitrix\Sale\PaySystem\BaseServiceHandler::STRING
);
if ($result->isSuccess()) {
echo $result->getTemplate();
}
}
}
Просмотр заказа неавторизованным пользователем в Битрикс с отправкой ссылки на заказ пользователю
В папке /personal/order/
создаем файл detail.php
и в нем размещаем компонент bitrix:sale.personal.order.detail
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
$APPLICATION->SetTitle("");
$APPLICATION->IncludeComponent(
"bitrix:sale.personal.order.detail",
"",
Array(
"ACTIVE_DATE_FORMAT" => "d.m.Y",
"ALLOW_INNER" => "N",
"CACHE_GROUPS" => "Y",
"CACHE_TIME" => "3600",
"CACHE_TYPE" => "A",
"CUSTOM_SELECT_PROPS" => array(""),
"DISALLOW_CANCEL" => "N",
"ID" => $ID,
"ONLY_INNER_FULL" => "N",
"PATH_TO_CANCEL" => "",
"PATH_TO_COPY" => "",
"PATH_TO_LIST" => "",
"PATH_TO_PAYMENT" => "payment.php",
"PICTURE_HEIGHT" => "110",
"PICTURE_RESAMPLE_TYPE" => "1",
"PICTURE_WIDTH" => "110",
"PROP_1" => array(""),
"PROP_2" => array(""),
"REFRESH_PRICES" => "N",
"RESTRICT_CHANGE_PAYSYSTEM" => array("0"),
"SET_TITLE" => "Y"
)
);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
Переходим по пути /bitrix/admin/settings.php?mid=sale&lang=ru&back_url_settings=&tabControl_active_tab=edit1
(Настройки -> Настройка продукта -> Настройка модулей
)
Ищем группу свойств Настройки показа карточки заказа в публичной части
и включаем опцию Разрешить просмотр заказа по ключу без авторизации
В качестве шаблона пути используем /personal/order/detail.php?ID=#order_id#
. Не забываем выбрать необходимые статусы
В шаблоне письма отправляемом при установке конкретного статуса вставляем ссылку на заказ #ORDER_PUBLIC_URL#
Все. Теперь при установке нового статуса в заказе пользователю будет отправлено письмо со ссылкой просмотр заказа инкогнито
1C Bitrix и Яндекс Кассы, как сгенерировать/получить ссылку на оплату заказа?
Ответ со stackOverflow
use Bitrix\Main,
Bitrix\Main\Loader,
Bitrix\Sale,
Bitrix\Sale\Order,
Bitrix\Sale\PaySystem,
Bitrix\Sale\Payment;
Loader::includeModule("sale");
$registry = Sale\Registry::getInstance(Sale\Registry::REGISTRY_TYPE_ORDER);
$orderClassName = $registry->getOrderClassName();
$order = $orderClassName::loadByAccountNumber(10);// id заказа
if ($order->isAllowPay()) {
$paymentCollection = $order->getPaymentCollection();
foreach ($paymentCollection as $payment) {
$arResult["PAYMENT"][$payment->getId()] = $payment->getFieldValues();
if (intval($payment->getPaymentSystemId()) > 0 && !$payment->isPaid()) {
$paySystemService = PaySystem\Manager::getObjectById($payment->getPaymentSystemId());
if (!empty($paySystemService)) {
$arPaySysAction = $paySystemService->getFieldsValues();
if ($paySystemService->getField('NEW_WINDOW') === 'N' || $paySystemService->getField('ID') == PaySystem\Manager::getInnerPaySystemId()){
$initResult = $paySystemService->initiatePay($payment, null, PaySystem\BaseServiceHandler::STRING);
if ($initResult->isSuccess())
$arPaySysAction['BUFFERED_OUTPUT'] = $initResult->getTemplate(); // получаем форму оплаты из обработчика
else
$arPaySysAction["ERROR"] = $initResult->getErrorMessages();
}
}
}
}
}
Делаем сдвиг ID заказов
Для этого переходим в SQL запрос
и применяем команду:
ALTER TABLE b_sale_order AUTO_INCREMENT = 100000
где 100000
Id с которого должна начинаться нумерация
Стоит ознакомиться:
Комментарии