Публикация

подписчиков: 5 Подписаться
0
Avatar

Loyalty API Продажа / Расчет скидок для продажи "Неизвестная ошибка"

Еще нашел. Расчет скидок для продажи. Получил данные на свой сервер, отдаю данные структурно как описано в документации. В кассе получаю: "Неизвестная ошибка". В логе кассы: 

  1. code:1999
  2. error:"Неизвестная ошибка"
  3. moreInfo:"https://online.moysklad.ru/api/posap/1.0/doc#обработка-ошибок-1999"
Никита

Войдите в службу, чтобы оставить комментарий.

Комментариев: 23

0
Avatar

Добрый день. 

Спасибо за обращение. Для решения вашей проблемы мне необходима пара запрос-ответ, который пришел к вам и чем вы ответили.

 

Максим Сухаренко 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Да конечно, на сервер мне приходит:

{"retailStore":{"meta":{"id":"8a04f6b8-c7ac-11e8-9ff4-34e8000f9c9d","href":"https://online.moysklad.ru/api/remap/1.1/entity/retailstore/8a04f6b8-c7ac-11e8-9ff4-34e8000f9c9d"},"name":"###"},"agent":{"meta":{"id":"26099bc8-e4bd-11e7-6b01-4b1d00047daa","href":"https://online.moysklad.ru/api/remap/1.1/entity/counterparty/syncid/26099bc8-e4bd-11e7-6b01-4b1d00047daa"},"name":"Никита","discountCardNumber":null,"phone":"#####","email":null},"positions":[{"assortment":{"meta":{"id":"81789b93-c7ad-11e8-9ff4-3150002f19fc","href":"https://online.moysklad.ru/api/remap/1.1/entity/product/81789b93-c7ad-11e8-9ff4-3150002f19fc"}},"price":130.0,"quantity":1.0,"sn":[]},{"assortment":{"meta":{"id":"b6ea5300-c7ad-11e8-9ff4-3150002f6625","href":"https://online.moysklad.ru/api/remap/1.1/entity/product/b6ea5300-c7ad-11e8-9ff4-3150002f6625"}},"price":1100.0,"quantity":1.0,"sn":[]},{"assortment":{"meta":{"id":"c1f50812-c7ad-11e8-9ff4-3150002f7103","href":"https://online.moysklad.ru/api/remap/1.1/entity/product/c1f50812-c7ad-11e8-9ff4-3150002f7103"}},"price":15.0,"quantity":0.5,"sn":[]},{"assortment":{"meta":{"id":"cfa0ffa6-c7ad-11e8-9ff4-3150002f8d8a","href":"https://online.moysklad.ru/api/remap/1.1/entity/product/cfa0ffa6-c7ad-11e8-9ff4-3150002f8d8a"}},"price":300.0,"quantity":1.0,"sn":[]}],"bonusProgram":{"transactionType":"EARNING"}}

 

 

Отвечаю:

{
"agent": {
"meta": {
"id": "26099bc8-e4bd-11e7-6b01-4b1d00047daa",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/counterparty/syncid/26099bc8-e4bd-11e7-6b01-4b1d00047daa"
},
"name": "Никита",
"discountCardNumber": null,
"phone": "####",
"email": null
},
"positions": [
{
"assortment": {
"meta": {
"id": "81789b93-c7ad-11e8-9ff4-3150002f19fc",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/product/81789b93-c7ad-11e8-9ff4-3150002f19fc"
}
},
"price": 130,
"quantity": 1,
"sn": []
},
{
"assortment": {
"meta": {
"id": "b6ea5300-c7ad-11e8-9ff4-3150002f6625",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/product/b6ea5300-c7ad-11e8-9ff4-3150002f6625"
}
},
"price": 1100,
"quantity": 1,
"sn": []
},
{
"assortment": {
"meta": {
"id": "c1f50812-c7ad-11e8-9ff4-3150002f7103",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/product/c1f50812-c7ad-11e8-9ff4-3150002f7103"
}
},
"price": 15,
"quantity": 0.5,
"sn": []
},
{
"assortment": {
"meta": {
"id": "cfa0ffa6-c7ad-11e8-9ff4-3150002f8d8a",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/product/cfa0ffa6-c7ad-11e8-9ff4-3150002f8d8a"
}
},
"price": 300,
"quantity": 1,
"sn": []
}
],
"bonusProgram": {
"transactionType": "EARNING",
"agentBonusBalance": "10",
"bonusValueToSpend": "10",
"bonusValueToEarn": "20",
"agentBonusBalanceAfter": "30",
"receiptExtraInfo": "Спасмбо!"
}
}

 

Личные данные закрыл ###.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Так же в логе в моемскладе появляется POST запрос на создание покупателя при выборе покупателя в продаже. Не совсем понятно для чего это.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Добрый день.

С нашей стороны допущена ошибка в документации, внесём исправление.

Поле discountedPrice, объекта positions обязательно к заполнению. Соответственно, вам необходимо указывать его в ответе, для корректной работы.

По поводу запроса создания покупателя: у нашей системы есть 2 режима работы - когда мы являемся мастер системой по хранению данных пользователей, или такой системой является система лояльности. Режим работы определяется в помощью чекбокса в настройках подключения интеграции. Для разных режимов, отличается поведение в поиске/получения детальной информации и создании контргаентов(покупателей). Для поддержания консистентности данных мы либо посылаем запросы на создание контрагентов, либо создаем их у себя по данным от системы лояльности.

 

Максим Сухаренко 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Хорошо, теперь мой сервер отвечает: 

 

{
"retailStore": {
"meta": {
"id": "8a04f6b8-c7ac-11e8-9ff4-34e8000f9c9d",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/retailstore/8a04f6b8-c7ac-11e8-9ff4-34e8000f9c9d"
},
"name": "*****"
},
"agent": {
"meta": {
"id": "5e99af36-cadb-11e8-9ff4-3150002165a6",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/counterparty/syncid/5e99af36-cadb-11e8-9ff4-3150002165a6"
},
"name": "??????",
"discountCardNumber": "320",
"phone": "+7 (****",
"email": null
},
"positions": [
{
"assortment": {
"meta": {
"id": "818a8ca5-c7ad-11e8-9ff4-3150002f1a10",
"href": "https://online.moysklad.ru/api/remap/1.1/entity/product/818a8ca5-c7ad-11e8-9ff4-3150002f1a10"
}
},
"price": "130.00",
"quantity": "1.000",
"sn": [],
"discountedPrice": "130.00"
}
],
"bonusProgram": {
"transactionType": "EARNING",
"agentBonusBalance": "10",
"bonusValueToSpend": "10",
"bonusValueToEarn": "20",
"agentBonusBalanceAfter": "30",
"receiptExtraInfo": "Спасмбо!"
}
}

Но по прежнему неизвестная ошибка.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Тыркал тип данных у price, quantity. К сожалению только 500-ая ошибка. К сожалению API для систем лояльности до сих пор не работоспособна. Так же ошибка: https://support.moysklad.ru/hc/ru/community/posts/360017382553-LoyaltyAPI-%D0%9F%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B0-%D0%A0%D0%B0%D1%81%D1%87%D0%B5%D1%82-%D1%81%D0%BA%D0%B8%D0%B4%D0%BE%D0%BA-%D0%B4%D0%BB%D1%8F-%D0%BF%D1%80%D0%BE%D0%B4%D0%B0%D0%B6%D0%B8-%D0%B1%D0%B0%D0%B3%D0%B0

 

остается не пофикшена. А дальше еще даже не продвинулся.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Добрый день.

Вы пробовали менять тип у элементов в bonusProgram? Там тоже должны быть number (поля agentBonusBalance, bonusValueToSpend, bonusValueToEarn, agentBonusBalanceAfter)

 

Максим Сухаренко 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Никита, добрый день, вам недостает  "discountPercent" в ответе с сервера. Блок с retailStore в ответе не нужен. Сам фикс, в сегодняшний релиз, к сожалению, ещё не вышел на продакшен-сервер. Нужно ещё некоторое время ожидать правок. Спасибо вам за обращение.

Виктор 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Спасибо, добавил discountPercent, заработало. Добавьте все это в документацию? Об этих полях там не слова.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Обновилась документация. Появилось поле paidByBonusPoints при расчете скидок. С этим полем получаем 500-ую ошибку. Без него работает.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Ловите еще баг. База клиентов на моем сервере и МС идентична, я храню ID клиентов в МС из REST API.

При выборе клиента в кассе, в логе вижу что МС отправляет запрос на создание НОВОГО пользователя, хотя в базе МС и в моей базе этот пользователь ЕСТЬ.

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

Я конечно могу у себя на сервере проверять есть ли такой пользователь и создавать/не создавать нового. Но что делать с базой контрагентов в МС?

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Этот пользователь с ID 

 
5e99af36-cadb-11e8-9ff4-3150002165a6

существует и в базе МС и в моей базе. Соответственно МС создает второго такого же пользователя уже с другим ID.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Никита, добрый день, не могли бы вы написать на vnaumov@moysklad.ru? Прикрепленные скрины трудно разобрать.

Про paidByBonusPoints  - совершенно верно, формат ещё не зафиксирован жестко, фикс для обработки этого поля появится на продакшн сервере в ближайшем релизе, я думаю.

Запрос на создание нового пользователя действительно отправляется. И для сохранения работоспособности следует на вашем сервере проверять есть он уже или нет и нужно ли что-то в его данных обновлять. 

Про документацию и discountPercent - а откуда вы берете информацию для работы? 

Виктор 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Никита, добрый день.

Особенность заключается в том, что вы должны возвращать не ID пользователя, а SyncId этого пользоватея.

Не могли бы вы так же подсказать установлена ли галка "Поиск покупателей в системе лояльности" в настройках подключения LoyaltyAPI?

Максим Сухаренко 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Работаю только с документацией: https://msloyaltyapi.docs.apiary.io/#reference и никакой другой.

 

Хорошо, я так понимаю что при поиске на моем сервере, я должен отдавать не ID пользователя, а его syncID, хорошо, тогда вопрос - как получить из Remap API syncId по ID? 

Галка Поиск покупателей в системе лояльности - стоит, делаю я это для того что бы кассир не мог "слить" всю базу клиентов по запросу "+7", ищу по своей базе только по полному номеру телефона.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Виктор, действительно в новой версии док-тации появилось discountPercent в примере.

Теперь вопрос про ID и syncId:

как мне получить syncId для уже существующих контрагентов?

/entity/counterparty/{id} - не возвращает его.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Даа.. изучил я документацию. syncId создается только при создании контрагента через api. Ооох как же все мудрено получается то... Получается, что бы не создавались дубли контрагентов в МС, это надо пересоздать всех контрагентов через API уже с syncId, пройти все документы и указать "нового" контрагента. Очень не продумано, отсюда вытекают только "костыли" для внешней системы лояльности. Было бы гораздо проще если бы поиск работал и по ID пользователя и по syncId. Причем стандартно, без лоялти API касса ищет по id пользователей...

Вы писали: Для поиска  пользователя у нас используется suncId (type = sync), а не ID (type = native).

а что делать если нету syncId, если контрагент создается в МС и вебхуками отправляется в систему лояльности - она рассчитывает скидки/бонусы, отправляя обратно в мс данные о продажах. 

Прям ступор какой то... Причем в документации про ID и syncID не слова, узнается все это в последствии вопрос-ответ тут.

 

Да, вы напишите что пользуйтесь поиском из базы МС - но это не подходит, так можно "слить" базу всех покупателей кассиру, нужна жесткая привязка к карте или номеру телефона, без показа лишних контрагентов, это реализуется только поиском на внешней системе.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Никита, добрый день.

Проблемы возникают, потому что вы неправильно пытаетесь использовать систему.

В вашем случае мастер системой по хранению клиентов (именно клиентов, а не их бонусных счетов) является МойСклад. 

Таким образом поиск будет происходить по базе МС, а получать значения бонусных балов уже в вашей системе.

Максим Сухаренко 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Хорошо, я вас понял. Поменял модель.

Пока работал над syncId видимо было обновление?

Чекбокс поиска покупателей в системе лояльности СТОИТ.

На поиск мой сервер отвечает:

{
"rows": [
{
"id": "7c6afd3d-2a70-48f2-959f-98da52dd207c",
"name": "Евгения",
"phone": "+7 (***) *****"
}
]
}

 

Либо:

{
"rows": [
{
"id": "7c6afd3d-2a70-48f2-959f-98da52dd207c",
"name": "Евгения",
"phone": "+7 (***) ****",
"discountCardNumber": null,
"email": null
}
]
}

 

Формат точно такой же как описано в документации: https://msloyaltyapi.docs.apiary.io/#reference/0/0/1

 

Получаю ошибку в кассе: 

  1. code:1999
  2. error:"Неизвестная ошибка"
  3. moreInfo:"https://online.moysklad.ru/api/posap/1.0/doc#обработка-ошибок-1999"
Никита 0 проголосовали
Действия с комментариями Постоянная ссылка
0
Avatar

Отключил чекбокс поиска на своем сервере клиентов. Выбрал клиента, в логе вообще нету запроса на получение бонусных балов клиента. В кассе: Неизвестная ошибка.

Никита 0 проголосовали
Действия с комментариями Постоянная ссылка