Иногда требуется получить IP адрес пользователя который совершил заказ на сайте на 1С-Битрикс и получить его в админке сайта в информации заказа и в письме о новом заказе. Ниже инструкция как это сделать
Получаем IP адрес покупателя
Этот код добавит IP адрес в заказ админке сайта
use Bitrix\Main\EventManager;
use Bitrix\Main\Service\GeoIp\Manager;
EventManager::getInstance()->addEventHandler('sale', 'OnSaleOrderBeforeSaved', 'saveBuyerIpToOrder');
function saveBuyerIpToOrder(\Bitrix\Main\Event $event)
{
$order = $event->getParameter('ENTITY');
// Получаем реальный IP-адрес покупателя с учетом прокси
$ip = Manager::getRealIp();
if (empty($ip)) {
return;
}
// Получаем коллекцию свойств заказа
$propertyCollection = $order->getPropertyCollection();
// ID созданного свойства, замените на свой
$buyerIpPropertyId = 22; // <-- Укажите реальный ID вашего свойства
// Ищем свойство по ID
$property = $propertyCollection->getItemByOrderPropertyId($buyerIpPropertyId);
if (!$property) {
// Альтернативный поиск по символьному коду, если не нашли по ID
foreach ($propertyCollection as $prop) {
if ($prop->getField('CODE') == 'BUYER_IP') {
$property = $prop;
break;
}
}
}
// Если свойство найдено, сохраняем IP
if ($property) {
$property->setValue($ip);
}
}
Теперь в админке сайта в информации о заказе появится IP адрес покупателя
Добавляем IP адрес в письмо о новом заказе
Не забудьте в почтовый шаблон добавить вывод
Почтовые шаблоны в админке сайта находятся вот тут: "Рабочий стол - Настройки- Настройки продукта -Почтовые и СМС события - Почтовые шаблоны"
IP-адрес покупателя: #BUYER_IP#
Этот код добавит IP адрес в письмо о заказе
AddEventHandler("sale", "OnOrderNewSendEmail", "AddBuyerIpToEmail");
function AddBuyerIpToEmail($orderId, &$eventName, &$arFields)
{
// Загружаем заказ
if (\Bitrix\Main\Loader::includeModule('sale')) {
$order = \Bitrix\Sale\Order::load($orderId);
if ($order) {
// Получаем коллекцию свойств заказа
$propertyCollection = $order->getPropertyCollection();
// Ищем свойство с кодом BUYER_IP (или используйте ID 22 как в вашем коде)
$ipProperty = $propertyCollection->getItemByOrderPropertyCode('BUYER_IP');
// Если не нашли по коду, ищем по ID
if (!$ipProperty) {
$buyerIpPropertyId = 22; // Укажите ваш ID свойства
$ipProperty = $propertyCollection->getItemByOrderPropertyId($buyerIpPropertyId);
}
// Если свойство найдено и имеет значение, добавляем его в письмо
if ($ipProperty) {
$ipValue = $ipProperty->getValue();
if (!empty($ipValue)) {
// Добавляем IP в массив полей письма
$arFields["BUYER_IP"] = $ipValue;
$arFields["BUYER_IP_FORMATTED"] = "IP-адрес покупателя: " . $ipValue;
}
}
}
}
}