Skip to content

Смена идентификатора участника программы лояльности ​

Метод меняет идентификатор участника программы лояльности на новый. Старый идентификатор подменяется новым не только в карточке участника, но и во всех связанных ресурсах ПЛ: бонусных транзакциях, заказах ПЛ, стикерах, сертификатах, подписках, реферальных кодах и токенах wallet-карт.

Метод используется, когда клиент сменил номер телефона и нужно сохранить за ним всю историю в программе лояльности: бонусный баланс, уровень, стикеры и реферальные начисления.

Управление участниками ПЛ делается только со стороны сервера, в целях безопасности. Поэтому в SDK методов для работы с этим API нет, а секретный ключ обязателен всегда.

POST https://api.rees46.ru/loyalty/members/change

Параметры ​

ПараметрОбязателен?Описание
shop_idДаAPI-ключ
shop_secretДаСекретный ключ API
identifierДаТекущий идентификатор участника ПЛ
new_identifierДаНовый идентификатор участника ПЛ

Оба идентификатора нормализуются перед сравнением, поэтому +7 (999) 123-45-67 и 79991234567 считаются одним и тем же идентификатором.

Логика работы ​

  1. Если любой из идентификаторов пустой или не является корректным номером телефона — ошибка запроса.
  2. Если участника с идентификатором identifier не существует — ошибка 404.
  3. Если new_identifier уже принадлежит другому участнику ПЛ — запрос отклоняется.
  4. Если new_identifier равен identifier — ничего не делается, возвращается успешный ответ.
  5. Если всё валидно, идентификатор меняется во всех ресурсах ПЛ в рамках одной транзакции.

Каждая смена идентификатора записывается в системный лог проекта.

Запрос ​

Пример запроса:

shell
curl --header "Content-Type: application/json" \
  --request POST \
  --data-binary "@payload.json" \
  https://api.rees46.ru/loyalty/members/change

Пример JSON-тела:

json
{
    "shop_id": "...",
    "shop_secret": "...",
    "identifier": "...",
    "new_identifier": "..."
}

Ответ ​

Пример ответа сервера:

json
{
  "status": "success",
  "payload": {
    "message": "Identifier is changed successfully",
    "identifier": "...",
    "previous_identifier": "..."
  }
}

Расшифровка ответа:

ПараметрОписание
statusЗапрос выполнен успешно или нет
payload.messageСообщение с результатом обработки запроса
payload.identifierНовый идентификатор участника
payload.previous_identifierПрежний идентификатор участника

Если новый идентификатор совпадает со старым, запрос считается успешным, но никаких изменений не происходит:

json
{
  "status": "success",
  "payload": {
    "message": "Identifier is not changed",
    "identifier": "..."
  }
}

В случае ошибки ответ будет в формате:

json
{
  "status": "error",
  "payload": {
    "message": "New identifier already belongs to another member"
  }
}

Возможные ошибки:

КодСообщениеПричина
400Incorrect member identifierПараметр identifier пустой или невалидный
400Incorrect new member identifierПараметр new_identifier пустой или невалидный
400New identifier already belongs to another memberНовый идентификатор уже занят другим участником ПЛ
400Failed to change member identifierНе удалось выполнить смену, изменения откачены
402Loyalty program service is not enabled for this projectНет активной подписки на программу лояльности
403Shop not found by secret keyНеверный или отсутствующий секретный ключ
404Loyalty program is not configured for this projectПрограмма лояльности не настроена в проекте
404Member is not foundУчастника с текущим идентификатором не существует

Ограничения ​

Телефон профиля не меняется

Метод меняет только идентификатор участника программы лояльности. Номер телефона самого профиля в CDP остается прежним. Чтобы сменить его, используйте отдельный метод принудительной смены phone в профиле.

Если этого не сделать, то при следующем вызове регистрации участника участник будет заново создан со старым идентификатором, так как регистрация берет идентификатор из профиля клиента.

Wallet-карты нужно переустановить

Серийный номер карты в Apple Wallet равен идентификатору участника. После смены идентификатора ранее установленные карты станут невалидными, и клиенту нужно будет установить карту заново.

Конфликтующие данные не переносятся

Если по новому идентификатору уже есть уровень ПЛ, реферальный код или подписка, принадлежащие клиенту, который не является участником программы лояльности, то эти данные намеренно остаются нетронутыми: они не переносятся на участника и не удаляются. Это защита от сценария, в котором смена идентификатора используется для перехвата чужих данных. Сам идентификатор участника при этом меняется, а факт конфликта фиксируется в системном логе проекта.