Appearance
Смена идентификатора участника программы лояльности
Метод меняет идентификатор участника программы лояльности на новый. Старый идентификатор подменяется новым не только в карточке участника, но и во всех связанных ресурсах ПЛ: бонусных транзакциях, заказах ПЛ, стикерах, сертификатах, подписках, реферальных кодах и токенах 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 считаются одним и тем же идентификатором.
Логика работы
- Если любой из идентификаторов пустой или не является корректным номером телефона — ошибка запроса.
- Если участника с идентификатором
identifierне существует — ошибка 404. - Если
new_identifierуже принадлежит другому участнику ПЛ — запрос отклоняется. - Если
new_identifierравенidentifier— ничего не делается, возвращается успешный ответ. - Если всё валидно, идентификатор меняется во всех ресурсах ПЛ в рамках одной транзакции.
Каждая смена идентификатора записывается в системный лог проекта.
Запрос
Пример запроса:
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"
}
}Возможные ошибки:
| Код | Сообщение | Причина |
|---|---|---|
| 400 | Incorrect member identifier | Параметр identifier пустой или невалидный |
| 400 | Incorrect new member identifier | Параметр new_identifier пустой или невалидный |
| 400 | New identifier already belongs to another member | Новый идентификатор уже занят другим участником ПЛ |
| 400 | Failed to change member identifier | Не удалось выполнить смену, изменения откачены |
| 402 | Loyalty program service is not enabled for this project | Нет активной подписки на программу лояльности |
| 403 | Shop not found by secret key | Неверный или отсутствующий секретный ключ |
| 404 | Loyalty program is not configured for this project | Программа лояльности не настроена в проекте |
| 404 | Member is not found | Участника с текущим идентификатором не существует |
Ограничения
Телефон профиля не меняется
Метод меняет только идентификатор участника программы лояльности. Номер телефона самого профиля в CDP остается прежним. Чтобы сменить его, используйте отдельный метод принудительной смены phone в профиле.
Если этого не сделать, то при следующем вызове регистрации участника участник будет заново создан со старым идентификатором, так как регистрация берет идентификатор из профиля клиента.
Wallet-карты нужно переустановить
Серийный номер карты в Apple Wallet равен идентификатору участника. После смены идентификатора ранее установленные карты станут невалидными, и клиенту нужно будет установить карту заново.
Конфликтующие данные не переносятся
Если по новому идентификатору уже есть уровень ПЛ, реферальный код или подписка, принадлежащие клиенту, который не является участником программы лояльности, то эти данные намеренно остаются нетронутыми: они не переносятся на участника и не удаляются. Это защита от сценария, в котором смена идентификатора используется для перехвата чужих данных. Сам идентификатор участника при этом меняется, а факт конфликта фиксируется в системном логе проекта.