Как узнать e-mail покупателя по заказу в битрикс?

Узнать e-mail покупателя по заказу в битрикс достаточно редкая задача. Опишу как это сделать.

Почта пользователя битрикс хранится в таблице с пользователями, почта, которую пользователь ввел при оформлении заказа хранится в другом месте. Рассмотрим по порядку:

Как узнать e-mail покупателя по заказу в битрикс?

Разберем работу функции, которая будет получать e-mail покупателя по заказу. В функцию передается параметр — код заказа. Затем, мы бегаем, по свойствам заказа, определяем тип свойства — значение IS_EMAIL должно быть Y, и возвращаем в случае, если нашли свойство типа EMAIL и его значение корректно (функция check_email).

1
2
3
4
5
6
7
8
9
10
11
	<?
		function getOrderEmail($order) {
			$res = CSaleOrderPropsValue::GetOrderProps($order);
			while ($row = $res->fetch()) {
				if ($row['IS_EMAIL']=='Y' && check_email($row['VALUE'])) {
					return $row['VALUE'];
				}
			}
			return false;
		}
	?>

Этот код можно дополнить возвратом e-mail из таблицы с пользователями, в случае если по какой-то причине e-mail в заказе отсутствует.

Как получить email текущего пользователя?

1
2
3
4
5
6
7
<?
	if ($order = CSaleOrder::getById($order)) {
		if ($user = CUser::GetByID($order['USER_ID'])->fetch()) {
			return $user['EMAIL'];
		}
	}
?>

E-mail текущего пользователя вне заказа получаем c помощью CUser::GetByID.

1
2
3
4
5
6
7
<?
        global $USER;
        $userId = $USER->GetID();
	$rsUser = CUser::GetByID($userId);
        $arUser = $rsUser->Fetch();
        print_r($arUser);
?>

В массиве $arUser найдем e-mail текущего пользователя.

Объединив два фрагмента кода, в итоге получим функцию, с помощью которой можно будет узнать e-mail покупателя по заказу в битрикс и в случае отсутствия получить почту из другого места. Всем удачи и успехов в работе!