Работа с профилями покупателя через API
Как в 1С-Битрикс через API получить, добавить, изменить данные в профилях покупателя
Получение списка профилей покупателя по ID пользователя:
function getList($userId)
{
$profiles = \Bitrix\Sale\Internals\UserPropsTable::getList([
'filter' => [
'USER_ID' => $userId,
],
]);
$result = [];
while ($profile = $profiles->fetch()) {
$result[] = $profile;
}
return $result;
}
Получение списка значений полей профиля (свойств заказа) по ID профиля:
function getProfileFields($profileId)
{
$fields = \CSaleOrderUserPropsValue::GetList([], ['USER_PROPS_ID' => $profileId]);
$profileFields = [];
while ($field = $fields->GetNext()) {
$profileFields[$field['PROP_CODE']] = $field;
}
return $profileFields;
}
Получение профиля покупателя по типу плательщика и ID покупателя:
function getUserProfileByPersonType($personType, $userId)
{
$profile = \Bitrix\Sale\Internals\UserPropsTable::getList([
'filter' => [
'USER_ID' => $userId,
'PERSON_TYPE_ID' => $personType,
],
]);
if ($profile = $profile->fetch()) {
return $profile;
}
return false;
}
Получение списка полей профиля (не значений) по типу плательщика:
function getProfileFieldsByPersonType($personType)
{
$fields = \CSaleOrderProps::GetList(
['SORT' => 'ASC'],
[
'PERSON_TYPE_ID' => $personType,
'USER_PROPS' => 'Y',
]
);
$result = [];
while ($field = $fields->GetNext()) {
$result[] = $field;
}
return $result;
}
Добавление профиля покупателя по типу плательщика:
function addProfile($personType, $data, $userId)
{
$profile = \Bitrix\Sale\Internals\UserPropsTable::add([
'NAME' => $data['NAME'],
'USER_ID' => $userId,
'PERSON_TYPE_ID' => $personType,
'DATE_UPDATE' => new \Bitrix\Main\Type\DateTime,
]);
if (!$profile->isSuccess()) {
return false;
}
$profileId = $profile->getId();
$requiredFields = getProfileFieldsByPersonType($personType);
foreach ($requiredFields as $field) {
\CSaleOrderUserPropsValue::Add([
'USER_PROPS_ID' => $profileId,
'ORDER_PROPS_ID' => $field['ID'],
'NAME' => $field['NAME'],
'VALUE' => $data[$field['CODE']],
]);
}
return $profileId;
}
Изменение профиля покупателя по типу плательщика:
function updateProfile($profileId, $personType, $data)
{
$requiredFields = getProfileFieldsByPersonType($personType);
\Bitrix\Sale\Internals\UserPropsTable::update($profileId, [
'NAME' => $data['NAME'],
'XML_ID' => $data['DEFAULT'],
'DATE_UPDATE' => new \Bitrix\Main\Type\DateTime,
]);
$profileFields = getProfileFields($profileId);
foreach ($requiredFields as $field) {
if (isset($profileFields[$field['CODE']])) {
\CSaleOrderUserPropsValue::Update($profileFields[$field['CODE']]['ID'], [
'USER_PROPS_ID' => $profileId,
'ORDER_PROPS_ID' => $field['ID'],
'VALUE' => $data[$field['CODE']],
]);
}
}
return $profileId;
}
$data – массива вида:
$data = [
'NAME' => 'Иван',
'LAST_NAME' => 'Иванов',
'PHONE' => '+7 999 888-77-66',
//... и т.д.
];
Оставьте комментарий
Если эта статья была полезной для вас, оставьте комментарий ниже или задайте интересующий Вас вопрос. Ваш опыт может помочь другим читателям!
Написать комментарий