RetailCRM API
API wrapper для RetailCRM API v5
Оглавление
- Установка
- Использование Rails
- Использование Ruby
- Debug Logging
- Custom logger
- Расходы
- Получение списка расходов, удовлетворяющих заданному фильтру
- Создание расхода
- Пакетное удаление расходов
- Пакетная загрузка расходов
- Получение информации о расходе
- Редактирование расхода
- Удаление расхода
- Пользовательские поля
- Получение списка пользовательских полей, удовлетворяющих заданному фильтру
- Получение списка справочников, удовлетворяющих заданному фильтру
- Создание справочника
- Получение информации о справочнике
- Редактирование справочика
- Создание пользовательского поля
- Получение информации о пользовательском поле
- Редактирование пользовательского поля
- Клиенты
- Получение списка клиентов, удовлетворяющих заданному фильтру
- Объединение клиентов
- Создание клиента
- Массовая запись внешних ID клиентов
- Получение истории изменения клиентов
- Получение заметок
- Создание заметки
- Удаление заметки
- Пакетная загрузка клиентов
- Получение информации о клиенте
- Редактирование клиента
- Корпоративные клиенты
- Получение списка корпоративных клиентов, удовлетворяющих заданному фильтру
- Объединение корпоративных клиентов
- Создание корпоративного клиента
- Массовая запись внешних ID корпоративных клиентов
- Получение истории изменения корпоративных клиентов
- Получение заметок
- Создание заметки
- Удаление заметки
- Пакетная загрузка корпоративных клиентов
- Получение информации о корпоративном клиенте
- Список адресов корпоративного клиента
- Создание адреса для корпоративного клиента
- Редактирование адреса корпоративного клиента
- Список компаний корпоративного клиента
- Создание компании для корпоративного клиента
- Редактирование компании корпоративного клиента
- Список контактных лиц корпоративного клиента
- Создание связи корпоративного клиента с контактным лицом
- Редактирование связи корпоративного клиента с контактным лицом
- Редактирование корпоративного клиента
- Доставки
- Расчёт стоимости доставки
- Обновление статусов доставки
- Получение списка отгрузок в службы доставки
- Создание отгрузки
- Получение информации об отгрузке
- Редактироване отгрузки
- Запрос на получение данных для автокомплит поля
- Расчет стоимости доставки
- Удаление заявки на доставку
- Получение данных доставки
- Печатные формы службы доставки
- Создание и редактирование доставки
- Удаление заявки на отгрузку
- Список терминалов приема посылок
- Создание и редактирование отгрузки
- Список тарифов
- Файлы
- Получение списка файлов, удовлетворяющих заданному фильтру
- Загрузка файла на сервер
- Получение информации о файле
- Удаление файла
- Скачивание файла
- Редактирование файла
- Интеграция
- Получение интеграционного модуля
- Создание/редактирование интеграционного модуля
- Уведомление об изменении статуса активности или заморозки модуля
- Лояльность
- Добавление клиента в программу лояльности
- Получение информации об участии в программе лояльности
- Активация участия в программе лояльности
- Начисление бонусов участию в программе лояльности
- История бонусного счета
- Редактирование участия в программе лояльности
- Список участий в программе лояльности
- Расчёт максимальной скидки
- Список программ лояльности
- Получение информации о программе лояльности
- Заказы
- Получение списка заказов, удовлетворяющих заданному фильтру
- Объединение заказов
- Создание заказа
- Массовая запись внешних ID заказов
- Получение истории изменений заказов
- Создание связи между заказами
- Применение бонусов по программе лояльности
- Отмена бонусных операций по программе лояльности
- Добавление платежа
- Удаление платежа
- Редактирование платежа
- Получение списка статусов заказов
- Пакетная загрузка заказов
- Получение информации о заказе
- Редактирование заказа
- Комплектация заказов
- Получение списка паков, удовлетворяющих заданному фильтру
- Создание пака
- Получение истории комплектации заказа
- Получение информации о паке
- Удаление пака
- Редактирование пака
- Платежи
- Проверка инвойса
- Создание инвойса
- Изменение инвойса
- Подтверждение оплаты
- Отмена оплаты
- Создание оплаты
- Возврат
- Рекомендации
- Запрос рекомендуемых товаров
- Справочники
- Получение списка групп расходов
- Редактирование группы расходов
- Получение списка статей расходов
- Редактирование статьи расходов
- Получение списка кодов доступных стран
- Получение списка курьеров
- Создание курьера
- Редактирование курьера
- Получение списка служб доставки
- Создание/редактирование службы доставки
- Получение списка типов доставки
- Создание/редактирование типа доставки
- Получение списка юридических лиц
- Создание/редактирование юридического лица
- Получение списка MessageGateway каналов
- Получение списка способов оформления заказов
- Создание/редактирование способа оформления заказа
- Получение списка типов заказов
- Создание/редактирование типа заказа
- Получение списка статусов оплаты
- Создание/редактирование статусов оплаты
- Получение списка типов оплаты
- Создание/редактирование типа оплаты
- Получение списка типов цен
- Создание/редактирование типа цены
- Получение списка статусов товаров в заказе
- Создание/редактирование статуса товара в заказе
- Получение списка магазинов
- Создание/редактирование магазина
- Получение списка групп статусов заказа
- Получение списка статусов заказа
- Создание/редактирование статуса заказа
- Получение списка складов
- Создание/редактирование сведений о складе
- Получение списка единиц измерений
- Создание/редактирование единицы измерения
- Сегменты
- Получение списка пользовательских сегментов
- Настройки
- Получение настроек системы
- Склад
- Получение остатков и закупочных цен
- Обновление остатков и закупочных цен
- Обновление цен торговых предложений
- Получение списка групп товаров, удовлетворяющих заданному фильтру
- Получение списка товаров с торговыми предложениями, удовлетворяющих заданному фильтру
- Получение списка свойств товаров, удовлетворяющих заданному фильтру
- Обновление остатков и закупочных цен
- Актуализация остатков после обращения к складской системе
- Задачи
- Получение списка задач
- Создание задачи
- Получение информации о задаче
- Редактирование задачи
- Телефония
- События звонка
- Загрузка телефонных звонков
- Получение ответственного менеджера
- Оповещение о смене статуса
- Инициация звонка
- Переход в личный кабинет
- Прослушивание звонка
- Пользователи
- Получение списка групп пользователей
- Получение списка пользователей, удовлетворяющих заданному фильтру
- Получение информации о пользователе
- Смена статуса пользователя
- Верификация
- Подтверждение верификации
- Проверка статуса верификации
- Статистика
- Обновление статистики
Ruby
$ gem install retailcrm-api
Rails
добавьте в Gemfile: gem 'retailcrm-api'
и запустите bundle install
.
Затем: rails g retailcrm_api:install
Требования
Необходимо получить api key https://demo.retailcrm.ru/admin/api-keys
В файл config/retailcrm_api.yml
вставьте ваши данные
Сначала создайте экземпляр объекта RetailcrmApi::Request
:
retailcrm = RetailcrmApi::Request.new(api_key: "your_api_key")
Вы можете изменять api_key
, timeout
, open_timeout
, faraday_adapter
, proxy
, symbolize_keys
, logger
, и debug
:
RetailcrmApi::Request.api_key = "your_api_key"
RetailcrmApi::Request.timeout = 15
RetailcrmApi::Request.open_timeout = 15
RetailcrmApi::Request.symbolize_keys = true
RetailcrmApi::Request.debug = false
Либо в файле config/initializers/retailcrm_api.rb
для Rails.
Измените debug: true
чтобы включить логирование в STDOUT.
retailcrm = RetailcrmApi::Request.new(api_key: "your_api_key", debug: true)
Logger.new
используется по умолчанию, но вы можете изменить на свой:
retailcrm = RetailcrmApi::Request.new(api_key: "your_api_key", debug: true, logger: MyLogger.new)
Или:
RetailcrmApi::Request.logger = MyLogger.new
params = {
filter: {
minSumm: 0
}
}
RetailcrmApi::Request.costs.retrieve(params: params).body
# => {:success=>true, :pagination=>{:limit=>20, :totalCount=>296, :currentPage=>1, :totalPageCount=>15}, :costs=>[{:id=>296, :dateFrom=>"2021-07-29", :dateTo=>"2021-07-29", :summ=>13996, :costItem=>"products-purchase-price", :createdAt=>"2021-07-29 00:34:35", :order=>{:id=>36, :number=>"36C"}, :sites=>["b12-skillum-ru"]}]}
body = {
site: "deppa-ru",
cost: {
summ: 100,
costItem: "office-expenses",
dateFrom: (DateTime.now - 1.day).strftime("%Y-%m-%d %H:%M:%S"),
dateTo: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
}
}
RetailcrmApi::Request.costs.create(body: body).body
# => {:success=>true, :id=>297}
body = {
ids: [297]
}
RetailcrmApi::Request.costs.create(body: body, suffix: "delete").body
# => {:success=>true, :count=>1, :notRemovedIds=>[]}
body = {
costs: [
{
sites: ["deppa-ru"],
summ: 100,
costItem: "office-expenses",
dateFrom: (DateTime.now - 1.day).strftime("%Y-%m-%d %H:%M:%S"),
dateTo: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
}
]
}
RetailcrmApi::Request.costs.create(body: body, suffix: "upload").body
# => {:success=>true, :uploadedCosts=>[298]}
RetailcrmApi::Request.costs(298).retrieve.body
# => {:success=>true, :cost=>{:id=>298, :dateFrom=>"2021-08-02", :dateTo=>"2021-08-03", :summ=>100, :costItem=>"office-expenses", :createdAt=>"2021-08-03 22:12:34", :sites=>["deppa-ru"]}}
body = {
site: "deppa-ru",
cost: {
summ: 200,
costItem: "office-expenses",
dateFrom: (DateTime.now - 1.day).strftime("%Y-%m-%d %H:%M:%S"),
dateTo: DateTime.now.strftime("%Y-%m-%d %H:%M:%S")
}
}
RetailcrmApi::Request.costs(298).update(body: body).body
# => {:success=>true, :id=>298}
RetailcrmApi::Request.costs(298).delete.body
# => {:success=>true}
params = {
filter: {
type: "date"
}
}
RetailcrmApi::Request.custom_fields.retrieve(params: params).body
# =>{:success=>true, :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :customFields=>[]}
params = {
limit: 100,
filter: {
name: "test"
}
}
RetailcrmApi::Request.custom_fields.dictionaries.retrieve(params: params).body
# => {:success=>true, :pagination=>{:limit=>100, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :customDictionaries=>[]}
body = {
customDictionary: {
code: "test_custom",
name: "test custom",
elements: [
{
name: "Тест",
code: "test"
}
]
}
}
RetailcrmApi::Request.custom_fields.dictionaries.create(body: body).body
# => {:success=>true, :code=>"test_custom"}
RetailcrmApi::Request.custom_fields.dictionaries("test_custom").retrieve.body
# => {:success=>true, :customDictionary=>{:name=>"test custom", :code=>"test_custom", :elements=>[{:name=>"Тест", :code=>"test", :ordering=>50}]}}
body = {
customDictionary: {
name: "test custom update",
elements: [
{
name: "Тест update",
code: "test"
}
]
}
}
RetailcrmApi::Request.custom_fields.dictionaries("test_custom").update(body: body).body
# => {:success=>true, :code=>"test_custom"}
entity = ["order", "customer", "customer_corporate", "company"].sample
body = {
customField: {
name: "Тест",
code: "test",
type: "string"
}
}
RetailcrmApi::Request.custom_fields(entity).create(body: body).body
# => {:success=>true, :code=>"test"}
RetailcrmApi::Request.custom_fields(entity, "test").retrieve.body
# => {:success=>true, :customField=>{:name=>"Тест", :code=>"test", :required=>false, :inFilter=>true, :inList=>true, :inGroupActions=>false, :type=>"string", :entity=>"customer", :ordering=>50, :viewMode=>"editable"}}
body = {
customField: {
name: "Тест update",
code: "test",
type: "boolean"
}
}
RetailcrmApi::Request.custom_fields(entity, "test").update(body: body).body
# => {:success=>true, :code=>"test"}
params = {
limit: 100,
filter: {
sex: "male"
}
}
RetailcrmApi::Request.customers.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>100, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :customers=>[]}
body = {
resultCustomer: {
id: 58
},
customers: [
{
id: 57
}
]
}
RetailcrmApi::Request.customers.create(body: body, suffix: "combine").body
#=> {:success=>true}
Если включена функциональность корпоративных клиентов, то customer[contragent][contragentType] исключительно individual
body = {
site: "deppa-ru",
customer: {
externalId: 333,
vip: true,
firstName: "Павел",
lastName: "Осетров"
}
}
RetailcrmApi::Request.customers.create(body: body).body
#=> {:success=>true, :id=>59}
body = {
customers: [
{
id: 59,
externalId: 555
}
]
}
RetailcrmApi::Request.customers.create(body: body, suffix: "fix-external-ids").body
#=> {:success=>true}
params = {
filter: {
customerId: 59
}
}
RetailcrmApi::Request.customers.history.retrieve(params: params).body
#=> {:success=>true, :generatedAt=>"2021-08-04 13:31:04", :history=>[{:id=>276, :createdAt=>"2021-08-04 13:24:26", :created=>true, :source=>"api", :field=>"id", :apiKey=>{:current=>true}, :oldValue=>nil, :newValue=>59, :customer=>{:type=>"customer", :id=>59, :externalId=>"333", :isContact=>false, :createdAt=>"2021-08-04 13:24:26", :vip=>true, :bad=>false, :site=>"deppa-ru", :contragent=>{:contragentType=>"individual"}, :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :customFields=>[], :personalDiscount=>0, :cumulativeDiscount=>0, :segments=>[], :firstName=>"Павел", :lastName=>"Осетров", :presumableSex=>"male"}}, {:id=>277, :createdAt=>"2021-08-04 13:28:46", :source=>"api", :field=>"external_id", :apiKey=>{:current=>true}, :oldValue=>"333", :newValue=>"555", :customer=>{:id=>59, :externalId=>"555", :site=>"deppa-ru"}}], :pagination=>{:limit=>100, :totalCount=>2, :currentPage=>1, :totalPageCount=>1}}
params = {
filter: {
customerIds: [59]
}
}
RetailcrmApi::Request.customers.notes.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :notes=>[]}
body = {
site: "deppa-ru",
note: {
text: "Просит скидки",
customer: {
id: 59
}
}
}
RetailcrmApi::Request.customers.notes.create(body: body).body
#=> {:success=>true, :id=>44}
RetailcrmApi::Request.customers.notes(44).delete.body
#=> {:success=>true}
body = {
customers: [
{
externalId: 999,
vip: true,
firstName: "Юкихиро",
lastName: "Мацумото"
},
{
externalId: 666,
bad: true,
firstName: "Расмус",
lastName: "Лердорф"
}
]
}
RetailcrmApi::Request.customers.create(body: body, suffix: "upload").body
#=> {:success=>true, :uploadedCustomers=>[{:id=>60, :externalId=>"999"}, {:id=>61, :externalId=>"666"}]}
params = {
by: "id"
}
RetailcrmApi::Request.customers(60).retrieve(params: params).body
#=> {:success=>true, :customer=>{:type=>"customer", :id=>60, :externalId=>"999", :isContact=>false, :createdAt=>"2021-08-04 13:41:05", :vip=>true, :bad=>false, :site=>"deppa-ru", :contragent=>{:contragentType=>"individual"}, :tags=>[], :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :customFields=>[], :personalDiscount=>0, :segments=>[{:id=>20, :code=>"nizkiy-sredniy-chek", :name=>"Низкий средний чек", :createdAt=>"2021-07-29 00:34:14", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>31, :code=>"pol-ne-ukazan", :name=>"Пол не указан", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>26, :code=>"bez-otmen", :name=>"Без отмен", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}], :firstName=>"Юкихиро", :lastName=>"Мацумото", :presumableSex=>"female", :phones=>[]}}
body = {
site: "deppa-ru",
customer: {
isContact: true
}
}
params = {
by: "id"
}
RetailcrmApi::Request.customers(61).update(body: body, params: params).body
#=> {:success=>true, :id=>61}
params = {
limit: 100,
filter: {
vip: "1"
}
}
RetailcrmApi::Request.customers_corporate.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>100, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :customersCorporate=>[]}
body = {
resultCustomer: {
id: 63
},
customers: [
{
id: 64
}
]
}
RetailcrmApi::Request.customers_corporate.create(body: body, suffix: "combine").body
#=> {:success=>true}
body = {
customerCorporate: {
externalId: 333,
vip: true,
nickName: "dhh"
}
}
RetailcrmApi::Request.customers_corporate.create(body: body).body
#=> {:success=>true, :id=>62}
body = {
customersCorporate: [
{
id: 63,
externalId: 12
},
{
id: 62,
externalId: 13
}
]
}
RetailcrmApi::Request.customers_corporate.create(body: body, suffix: "fix-external-ids").body
#=> {:success=>true}
params = {
filter: {
customerId: 63
}
}
RetailcrmApi::Request.customers_corporate.history.retrieve(params: params).body
#=> {:success=>true, :generatedAt=>"2021-08-04 20:04:14", :history=>[{:id=>9, :createdAt=>"2021-08-04 19:58:50", :created=>true, :source=>"api", :field=>"id", :apiKey=>{:current=>true}, :oldValue=>nil, :newValue=>63, :customer=>{:type=>"customer_corporate", :id=>63, :externalId=>"44", :nickName=>"ryzhikov", :createdAt=>"2021-08-04 19:58:50", :vip=>false, :bad=>true, :site=>"deppa-ru", :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :customFields=>[], :personalDiscount=>0, :cumulativeDiscount=>0}}, {:id=>12, :createdAt=>"2021-08-04 20:03:15", :source=>"api", :field=>"external_id", :apiKey=>{:current=>true}, :oldValue=>"44", :newValue=>"12", :customer=>{:id=>63, :externalId=>"12", :site=>"deppa-ru"}}], :pagination=>{:limit=>100, :totalCount=>2, :currentPage=>1, :totalPageCount=>1}}
params = {
filter: {
customerIds: [63]
}
}
RetailcrmApi::Request.customers_corporate.notes.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :notes=>[]}
body = {
site: "deppa-ru",
note: {
text: "Very bad",
customer: {
id: 63
}
}
}
RetailcrmApi::Request.customers_corporate.notes.create(body: body).body
#=> {:success=>true, :id=>45}
RetailcrmApi::Request.customers_corporate.notes(45).delete.body
#=> {:success=>true}
body = {
customersCorporate: [
{
externalId: 44,
bad: true,
nickName: "ryzhikov"
},
{
externalId: 22,
bad: true,
nickName: "buytaert"
}
]
}
RetailcrmApi::Request.customers_corporate.create(body: body, suffix: "upload").body
#=> {:success=>true, :uploadedCustomers=>[{:id=>63, :externalId=>"44"}, {:id=>64, :externalId=>"22"}]}
params = {
by: "externalId"
}
RetailcrmApi::Request.customers_corporate(12).retrieve(params: params).body
#=> {:success=>true, :customerCorporate=>{:type=>"customer_corporate", :id=>63, :externalId=>"12", :nickName=>"ryzhikov", :createdAt=>"2021-08-04 19:58:50", :vip=>false, :bad=>true, :site=>"deppa-ru", :tags=>[], :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :customFields=>[], :personalDiscount=>0}}
params = {
by: "id"
}
RetailcrmApi::Request.customers_corporate(63).addresses.retrieve(params: params).body
#=> {:success=>true, :addresses=>[], :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}}
params = {
by: "id"
}
body = {
site: "deppa-ru",
address: {
city: "Санкт-Петербург"
}
}
RetailcrmApi::Request.customers_corporate(63).addresses.create(params: params, body: body).body
#=> {:success=>true, :id=>42}
params = {
by: "id",
entityBy: "id"
}
body = {
site: "deppa-ru",
address: {
city: "Вятка"
}
}
RetailcrmApi::Request.customers_corporate(63).addresses(42).update(params: params, body: body).body
#=> {:success=>true, :id=>42}
params = {
by: "id"
}
RetailcrmApi::Request.customers_corporate(63).companies.retrieve(params: params).body
#=> {:success=>true, :companies=>[], :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}}
params = {
by: "id"
}
body = {
site: "deppa-ru",
company: {
name: "DEPPA",
site: "https://deppa.ru"
}
}
RetailcrmApi::Request.customers_corporate(62).companies.create(params: params, body: body).body
#=> {:success=>true, :id=>16}
params = {
by: "id",
entityBy: "id"
}
body = {
site: "deppa-ru",
company: {
isMain: true
}
}
RetailcrmApi::Request.customers_corporate(62).companies(16).update(params: params, body: body).body
#=> {:success=>true, :id=>16}
params = {
by: "id"
}
RetailcrmApi::Request.customers_corporate(62).contacts.retrieve(params: params).body
#=> {:success=>true, :contacts=>[], :pagination=>{:limit=>20, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}}
params = {
by: "id"
}
body = {
site: "deppa-ru",
contact: {
isMain: true,
customer: {
externalId: "555"
}
}
}
RetailcrmApi::Request.customers_corporate(62).contacts.create(params: params, body: body).body
#=> {:success=>true, :id=>16}
params = {
by: "id",
entityBy: "externalId"
}
body = {
site: "deppa-ru",
contact: {
isMain: false
}
}
RetailcrmApi::Request.customers_corporate(62).contacts("555").update(params: params, body: body).body
#=> {:success=>true, :id=>16}
params = {
by: "id"
}
body = {
site: "deppa-ru",
customerCorporate: {
personalDiscount: 99.9
}
}
RetailcrmApi::Request.customers_corporate(62).update(params: params, body: body).body
#=> {:success=>true, :id=>62}
body = {
deliveryTypeCodes: ["courier", "self-delivery", "russian-post", ""],
order: {
weight: 1,
length: 10,
width: 10,
height: 10
}
}
RetailcrmApi::Request.delivery.create(body: body, suffix: "calculate").body
#=> {:success=>true, :calculations=>[{:code=>"courier", :available=>true, :cost=>300}, {:code=>"self-delivery", :available=>true, :cost=>0}, {:code=>"russian-post", :available=>true, :cost=>0}, {:code=>"ems", :available=>true, :cost=>0}]}
params = {
limit: 100,
filter: {
countries: ["BY","KZ","RU","UA"]
}
}
RetailcrmApi::Request.orders.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>100, :totalCount=>0, :currentPage=>1, :totalPageCount=>0}, :orders=>[]}
body = {
site: "deppa-ru",
order: {
:externalId => 171,
:number => "171",
:email => "test@example.com",
:createdAt => DateTime.now.strftime("%Y-%m-%d %H:%M:%S"),
:discountPercent => 10,
:firstName => "Юкихиро",
:lastName => "Мацумото",
:customer => {
:externalId => 999,
:firstName => "Юкихиро",
:lastName => "Мацумото",
:phones => [{ :number => "+79000000000" }],
},
:delivery => {
:code => "courier",
:cost => 500,
:address => {:text => "г. Санкт-Петербург, ул. Профессора Попова, д.376"}
},
:items => [
{
:productId => 170,
:initialPrice => 500,
:quantity => 2
},
{
:productId => 175,
:initialPrice => 1300,
:quantity => 1
}
]
}
}
RetailcrmApi::Request.orders.create(body: body).body
#=> {:success=>true, :id=>41, :order=>{:slug=>41, :bonusesCreditTotal=>0, :bonusesChargeTotal=>0, :id=>41, :number=>"171", :externalId=>"171", :orderType=>"eshop-individual", :orderMethod=>"shopping-cart", :privilegeType=>"none", :createdAt=>"2014-10-28 19:31:10", :statusUpdatedAt=>"2021-08-05 08:22:04", :summ=>2300, :totalSumm=>2800, :prepaySum=>0, :purchaseSumm=>0, :markDatetime=>"2021-08-05 08:22:04", :lastName=>"Мацумото", :firstName=>"Юкихиро", :email=>"test@example.com", :call=>false, :expired=>false, :customer=>{:type=>"customer", :id=>60, :externalId=>"999", :isContact=>false, :createdAt=>"2021-08-04 13:41:05", :vip=>true, :bad=>false, :site=>"deppa-ru", :contragent=>{:contragentType=>"individual"}, :tags=>[], :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :costSumm=>0, :customFields=>[], :personalDiscount=>0, :address=>{:id=>43, :text=>"г. Санкт-Петербург, ул. Профессора Попова, д.376"}, :segments=>[{:id=>20, :code=>"nizkiy-sredniy-chek", :name=>"Низкий средний чек", :createdAt=>"2021-07-29 00:34:14", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>31, :code=>"pol-ne-ukazan", :name=>"Пол не указан", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>26, :code=>"bez-otmen", :name=>"Без отмен", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}], :firstName=>"Юкихиро", :lastName=>"Мацумото", :presumableSex=>"female", :email=>"test@example.com", :phones=>[]}, :contact=>{:type=>"customer", :id=>60, :externalId=>"999", :isContact=>false, :createdAt=>"2021-08-04 13:41:05", :vip=>true, :bad=>false, :site=>"deppa-ru", :contragent=>{:contragentType=>"individual"}, :tags=>[], :marginSumm=>0, :totalSumm=>0, :averageSumm=>0, :ordersCount=>0, :costSumm=>0, :customFields=>[], :personalDiscount=>0, :address=>{:id=>43, :text=>"г. Санкт-Петербург, ул. Профессора Попова, д.376"}, :segments=>[{:id=>20, :code=>"nizkiy-sredniy-chek", :name=>"Низкий средний чек", :createdAt=>"2021-07-29 00:34:14", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>31, :code=>"pol-ne-ukazan", :name=>"Пол не указан", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}, {:id=>26, :code=>"bez-otmen", :name=>"Без отмен", :createdAt=>"2021-07-29 00:34:15", :isDynamic=>true, :customersCount=>4, :active=>true}], :firstName=>"Юкихиро", :lastName=>"Мацумото", :presumableSex=>"female", :email=>"test@example.com", :phones=>[]}, :contragent=>{:contragentType=>"individual"}, :delivery=>{:code=>"courier", :cost=>500, :netCost=>0, :address=>{:text=>"г. Санкт-Петербург, ул. Профессора Попова, д.376"}}, :site=>"deppa-ru", :status=>"new", :items=>[{:bonusesChargeTotal=>0, :bonusesCreditTotal=>0, :markingCodes=>[], :discounts=>[], :id=>109, :initialPrice=>500, :discountTotal=>0, :prices=>[{:price=>500, :quantity=>2}], :createdAt=>"2014-10-28 19:31:10", :quantity=>2, :status=>"new", :offer=>{:displayName=>"noname", :id=>76, :xmlId=>"4f9c8bc6-7e40-47ee-a90b-c8936ffbf7fb", :name=>"noname", :unit=>{:code=>"pc", :name=>"Штука", :sym=>"шт."}}, :properties=>[], :purchasePrice=>0}, {:bonusesChargeTotal=>0, :bonusesCreditTotal=>0, :markingCodes=>[], :discounts=>[], :id=>110, :initialPrice=>1300, :discountTotal=>0, :prices=>[{:price=>1300, :quantity=>1}], :createdAt=>"2014-10-28 19:31:10", :quantity=>1, :status=>"new", :offer=>{:displayName=>"noname", :id=>77, :xmlId=>"d9b45af3-2f24-49f5-b2b9-e7f5c7362ca9", :name=>"noname", :unit=>{:code=>"pc", :name=>"Штука", :sym=>"шт."}}, :properties=>[], :purchasePrice=>0}], :payments=>[], :fromApi=>true, :shipped=>false, :customFields=>[]}}
params = {
externalIds: [171]
}
RetailcrmApi::Request.orders.statuses.retrieve(params: params).body
#=> {:success=>true, :orders=>[{:id=>41, :externalId=>"171", :status=>"delivering", :group=>"delivery"}]}
RetailcrmApi::Request.reference.delivery_types.retrieve.body
#=> {:success=>true, :deliveryTypes=>{:courier=>{:isDynamicCostCalculation=>false, :isAutoCostCalculation=>false, :isAutoNetCostCalculation=>false, :isCostDependsOnRegionAndWeightAndSum=>false, :isCostDependsOnDateTime=>false, :name=>"Доставка курьером", :code=>"courier", :active=>true, :defaultCost=>300, :defaultNetCost=>0, :paymentTypes=>["cash", "bank-card", "bank-transfer", "e-money", "credit"], :deliveryServices=>[], :defaultForCrm=>false}, :"self-delivery"=>{:isDynamicCostCalculation=>false, :isAutoCostCalculation=>false, :isAutoNetCostCalculation=>false, :isCostDependsOnRegionAndWeightAndSum=>false, :isCostDependsOnDateTime=>false, :name=>"Самовывоз", :code=>"self-delivery", :active=>true, :defaultCost=>0, :defaultNetCost=>0, :paymentTypes=>["cash", "bank-card", "bank-transfer", "e-money", "credit"], :deliveryServices=>[], :defaultForCrm=>false}, :"russian-post"=>{:isDynamicCostCalculation=>false, :isAutoCostCalculation=>false, :isAutoNetCostCalculation=>false, :isCostDependsOnRegionAndWeightAndSum=>false, :isCostDependsOnDateTime=>false, :name=>"Почта России", :code=>"russian-post", :active=>true, :defaultCost=>0, :defaultNetCost=>0, :paymentTypes=>["bank-card", "bank-transfer", "e-money", "credit"], :deliveryServices=>[], :defaultForCrm=>false}, :ems=>{:isDynamicCostCalculation=>false, :isAutoCostCalculation=>false, :isAutoNetCostCalculation=>false, :isCostDependsOnRegionAndWeightAndSum=>false, :isCostDependsOnDateTime=>false, :name=>"EMS Почта России", :code=>"ems", :active=>true, :defaultCost=>0, :defaultNetCost=>0, :paymentTypes=>["bank-card", "bank-transfer", "e-money", "credit"], :deliveryServices=>[], :defaultForCrm=>false}}}
body = {
deliveryType: {
name: "Ozon.Logistics",
code: "ozon",
defaultCost: 125.0,
active: true
}
}
RetailcrmApi::Request.reference.delivery_types("ozon").update(body: body).body
#=> {:success=>true, :id=>5}
RetailcrmApi::Request.reference.payment_statuses.retrieve.body
# => {:success=>true, :paymentStatuses=>{:"not-paid"=>{:name=>"Не оплачен", :code=>"not-paid", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>10, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :invoice=>{:name=>"Выставлен счет", :code=>"invoice", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>20, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :"wait-approved"=>{:name=>"Ожидает подтверждения", :code=>"wait-approved", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>25, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :"payment-start"=>{:name=>"Платеж проведен", :code=>"payment-start", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>30, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :canceled=>{:name=>"Отменен", :code=>"canceled", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>30, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :"credit-check"=>{:name=>"Проверка документов на кредит", :code=>"credit-check", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>40, :paymentTypes=>["credit"]}, :"credit-approved"=>{:name=>"Кредит одобрен", :code=>"credit-approved", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>50, :paymentTypes=>["credit"]}, :fail=>{:name=>"Ошибка", :code=>"fail", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>55, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :paid=>{:name=>"Оплачен", :code=>"paid", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>true, :ordering=>60, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}, :returned=>{:name=>"Возвращен", :code=>"returned", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :paymentComplete=>false, :ordering=>70, :paymentTypes=>["bank-card", "bank-transfer", "credit", "cash", "e-money"]}}}
RetailcrmApi::Request.reference.payment_types.retrieve.body
#=> {:success=>true, :paymentTypes=>{:cash=>{:name=>"Наличные", :code=>"cash", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>["courier", "self-delivery"], :paymentStatuses=>["not-paid", "invoice", "wait-approved", "payment-start", "canceled", "fail", "paid", "returned"]}, :"bank-card"=>{:name=>"Банковская карта", :code=>"bank-card", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>["courier", "self-delivery", "russian-post", "ems"], :paymentStatuses=>["not-paid", "invoice", "wait-approved", "payment-start", "canceled", "fail", "paid", "returned"]}, :"e-money"=>{:name=>"Электронные деньги", :code=>"e-money", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>["courier", "self-delivery", "russian-post", "ems"], :paymentStatuses=>["not-paid", "invoice", "wait-approved", "payment-start", "canceled", "fail", "paid", "returned"]}, :"bank-transfer"=>{:name=>"Банковский перевод", :code=>"bank-transfer", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>["courier", "self-delivery", "russian-post", "ems"], :paymentStatuses=>["not-paid", "invoice", "wait-approved", "payment-start", "canceled", "fail", "paid", "returned"]}, :credit=>{:name=>"Кредит", :code=>"credit", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>["courier", "self-delivery", "russian-post", "ems"], :paymentStatuses=>["not-paid", "invoice", "wait-approved", "payment-start", "canceled", "credit-check", "credit-approved", "fail", "paid", "returned"]}, :"apple-pay"=>{:name=>"Apple pay", :code=>"apple-pay", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :empty=>{:name=>"При получении", :code=>"empty", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-sberbank"=>{:name=>"Сбербанк Онлайн", :code=>"yandex-kassa-sberbank", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-alfabank"=>{:name=>"Альфа-Клик", :code=>"yandex-kassa-alfabank", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-qiwi"=>{:name=>"QIWI Кошелек", :code=>"yandex-kassa-qiwi", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-webmoney"=>{:name=>"Webmoney", :code=>"yandex-kassa-webmoney", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-b2b-sberbank"=>{:name=>"Сбербанк Бизнес Онлайн", :code=>"yandex-kassa-b2b-sberbank", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"empty-1"=>{:name=>"PayPal", :code=>"empty-1", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-apple-pay"=>{:name=>"Apple Pay", :code=>"yandex-kassa-apple-pay", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-cash"=>{:name=>"Наличные", :code=>"yandex-kassa-cash", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-installments"=>{:name=>"Заплатить по частям", :code=>"yandex-kassa-installments", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-mobile-balance"=>{:name=>"Баланс телефона\n", :code=>"yandex-kassa-mobile-balance", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-wechat"=>{:name=>"WeChat", :code=>"yandex-kassa-wechat", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :invoice=>{:name=>"Счет для юр. лиц", :code=>"invoice", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :paykeeper=>{:name=>"Картой на сайте", :code=>"paykeeper", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-google-pay"=>{:name=>"Google Pay", :code=>"yandex-kassa-google-pay", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-yandex-money"=>{:name=>"ЮMoney", :code=>"yandex-kassa-yandex-money", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-tinkoff-bank"=>{:name=>"Тинькофф", :code=>"yandex-kassa-tinkoff-bank", :active=>true, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}, :"yandex-kassa-bank-card"=>{:name=>"Картой на сайте Yandex", :code=>"yandex-kassa-bank-card", :active=>false, :defaultForCrm=>false, :defaultForApi=>false, :deliveryTypes=>[], :paymentStatuses=>[]}}}
body = {
paymentType: {
name: "Apple pay",
code: "apple_pay",
active: true
}
}
RetailcrmApi::Request.reference.payment_types("apple_pay").update(body: body).body
#=> {:success=>true, :id=>6}
RetailcrmApi::Request.reference.price_types.retrieve.body
#=> {:success=>true, :priceTypes=>[{:id=>1, :code=>"base", :name=>"Базовая", :active=>true, :default=>true, :geo=>[], :groups=>[], :ordering=>991}]}
RetailcrmApi::Request.reference.status_groups.retrieve.body
#=> {:success=>true, :statusGroups=>{:new=>{:name=>"Новый", :code=>"new", :active=>true, :ordering=>10, :process=>false, :statuses=>["new"]}, :approval=>{:name=>"Согласование", :code=>"approval", :active=>true, :ordering=>20, :process=>true, :statuses=>["availability-confirmed", "offer-analog", "client-confirmed", "prepayed"]}, :assembling=>{:name=>"Комплектация", :code=>"assembling", :active=>true, :ordering=>30, :process=>true, :statuses=>["send-to-assembling", "assembling", "assembling-complete"]}, :delivery=>{:name=>"Доставка", :code=>"delivery", :active=>true, :ordering=>40, :process=>true, :statuses=>["send-to-delivery", "delivering", "redirect"]}, :complete=>{:name=>"Выполнен", :code=>"complete", :active=>true, :ordering=>50, :process=>false, :statuses=>["complete", "pickpoint"]}, :cancel=>{:name=>"Отменен", :code=>"cancel", :active=>true, :ordering=>60, :process=>false, :statuses=>["no-call", "no-product", "already-buyed", "delyvery-did-not-suit", "prices-did-not-suit", "cancel-other"]}}}
RetailcrmApi::Request.reference.statuses.retrieve.body
#=> {:success=>true, :statuses=>{:new=>{:name=>"Новый", :code=>"new", :active=>true, :ordering=>10, :group=>"new"}, :complete=>{:name=>"Выполнен", :code=>"complete", :active=>true, :ordering=>10, :group=>"complete"}, :"availability-confirmed"=>{:name=>"Наличие подтверждено", :code=>"availability-confirmed", :active=>true, :ordering=>10, :group=>"approval"}, :"offer-analog"=>{:name=>"Предложить замену", :code=>"offer-analog", :active=>true, :ordering=>20, :group=>"approval"}, :"client-confirmed"=>{:name=>"Согласовано с клиентом", :code=>"client-confirmed", :active=>true, :ordering=>30, :group=>"approval"}, :prepayed=>{:name=>"Предоплата поступила", :code=>"prepayed", :active=>true, :ordering=>40, :group=>"approval"}, :"send-to-assembling"=>{:name=>"Передано в комплектацию", :code=>"send-to-assembling", :active=>true, :ordering=>10, :group=>"assembling"}, :assembling=>{:name=>"Комплектуется", :code=>"assembling", :active=>true, :ordering=>20, :group=>"assembling"}, :"assembling-complete"=>{:name=>"Укомплектован", :code=>"assembling-complete", :active=>true, :ordering=>30, :group=>"assembling"}, :"send-to-delivery"=>{:name=>"Передан в доставку", :code=>"send-to-delivery", :active=>true, :ordering=>10, :group=>"delivery"}, :delivering=>{:name=>"Доставляется", :code=>"delivering", :active=>true, :ordering=>20, :group=>"delivery"}, :redirect=>{:name=>"Доставка перенесена", :code=>"redirect", :active=>true, :ordering=>30, :group=>"delivery"}, :"no-call"=>{:name=>"Недозвон", :code=>"no-call", :active=>true, :ordering=>10, :group=>"cancel"}, :"no-product"=>{:name=>"Нет в наличии", :code=>"no-product", :active=>true, :ordering=>20, :group=>"cancel"}, :"already-buyed"=>{:name=>"Купил в другом месте", :code=>"already-buyed", :active=>true, :ordering=>30, :group=>"cancel"}, :"delyvery-did-not-suit"=>{:name=>"Не устроила доставка", :code=>"delyvery-did-not-suit", :active=>true, :ordering=>40, :group=>"cancel"}, :"prices-did-not-suit"=>{:name=>"Не устроила цена", :code=>"prices-did-not-suit", :active=>true, :ordering=>50, :group=>"cancel"}, :"cancel-other"=>{:name=>"Отменен", :code=>"cancel-other", :active=>true, :ordering=>60, :group=>"cancel"}}}
body = {
status: {
name: "Прибыл в пункт выдачи",
code: "pickpoint",
active: true,
group: "complete"
}
}
RetailcrmApi::Request.reference.statuses("pickpoint").update(body: body).body
#=> {:success=>true, :id=>19}
params = {
filter: {
active: 1
}
}
RetailcrmApi::Request.store.products.retrieve(params: params).body
#=> {:success=>true, :pagination=>{:limit=>20, :totalCount=>1, :currentPage=>1, :totalPageCount=>1}, :products=>[{:minPrice=>100, :maxPrice=>100, :id=>63, :article=>"test article", :name=>"test name", :url=>"https://deppa.ru/products/test", :imageUrl=>"https://s3-s1.retailcrm.tech/eu-central-1/retailcrm/deppa-3870e9becb1f4449232b394505b0c283/product/610e37b7b8a4b-lqe8zj9nmbk21.png", :popular=>true, :novelty=>true, :groups=>[], :manufacturer=>"Deppa", :offers=>[{:name=>"test", :price=>100, :images=>["https://s3-s1.retailcrm.tech/eu-central-1/retailcrm/deppa-3870e9becb1f4449232b394505b0c283/product/610e37b7b8a4b-lqe8zj9nmbk21.png"], :id=>78, :externalId=>"1", :article=>"test a", :prices=>[{:priceType=>"base", :price=>100, :ordering=>991}], :quantity=>0, :weight=>1, :length=>1, :width=>1, :height=>1, :active=>true, :unit=>{:code=>"pc", :name=>"Штука", :sym=>"шт."}, :barcode=>"11111"}], :updatedAt=>"2021-08-07 10:35:26", :active=>true, :quantity=>0, :markable=>false}]}
RetailcrmApi::Request.statistic("update").retrieve.body
#=> {:success=>true}