API — различия между версиями

Материал из PODS Wiki
Перейти к: навигация, поиск
(Получения списка тематических дизайн-макетов)
(Получения списка тематических дизайн-макетов)
 
(не показано 57 промежуточных версий этого же участника)
Строка 11: Строка 11:
 
* albumix_ID (optional) - внутренний идентификатор партнёра в системе Avantnet
 
* albumix_ID (optional) - внутренний идентификатор партнёра в системе Avantnet
 
* partner_order_ID (required) - ID заказа в системе партнёра
 
* partner_order_ID (required) - ID заказа в системе партнёра
 +
* isOC=true (optional) - позволяет использовать одинаковый partner_order_ID для нескольких заказов, чтобы обеспечить заказы из корзины.
 
* status_order (optional, required если set_status) - статус заказа:
 
* status_order (optional, required если set_status) - статус заказа:
 
** 1 - принят (по умолчанию);
 
** 1 - принят (по умолчанию);
Строка 19: Строка 20:
 
* count (optional) - Количество продукции, если не указано, считается = 1
 
* count (optional) - Количество продукции, если не указано, считается = 1
 
* project_id (required, если new) - ID проекта в PODS
 
* project_id (required, если new) - ID проекта в PODS
* paper_id (optioanl) - ID типа бумаги
+
* paper_id (optional) - ID типа бумаги
 
* total_amount (optional, required если new) - Стоимость заказа
 
* total_amount (optional, required если new) - Стоимость заказа
* delivery_point (optional) = 0 (на адрес клиента) 1 (на адреса самовывоза партнера-печатника)
+
* delivery_point (optional, required for photo&wideforamt) = 0 (на адрес клиента) 1 (на адреса самовывоза партнера-печатника)
* delivery_address (optional) адрес доставки  
+
* delivery_address (optional, required for photo&wideforamt) адрес доставки  
* send_to_print (optional) - если "1", заказ после создания отправляется на ftp. если "auto" - будут использовать настройки из панели управления PODS
+
* send_to_print (optional, required for photo&wideforamt) - если "1", заказ после создания отправляется на ftp. если "auto" - будут использовать настройки из панели управления PODS
 
* stamp (optional) - метка времени в формате Unix timestamp
 
* stamp (optional) - метка времени в формате Unix timestamp
 
* comment (optional) - комментарий к заказу
 
* comment (optional) - комментарий к заказу
 
* printmatic (optional) - цветокоррекция 1(вкл) 0(выкл). Если не задано, по умолчанию передается 1. Опция для совместимости с Avantnet.
 
* printmatic (optional) - цветокоррекция 1(вкл) 0(выкл). Если не задано, по умолчанию передается 1. Опция для совместимости с Avantnet.
 +
* product_type - тип продукта. необязательный. по умолчанию - book
 +
** book
 +
** photo
 +
** wideformat
 +
** souvenir
 
* token - контрольная сумма
 
* token - контрольная сумма
  
Строка 33: Строка 39:
 
* для new и edit как MD5 от конкатенации секретного ключа, задаваемого в настройках WL (параметр "Секретный ключ API (входящие запросы)") и всех параметров запроса:
 
* для new и edit как MD5 от конкатенации секретного ключа, задаваемого в настройках WL (параметр "Секретный ключ API (входящие запросы)") и всех параметров запроса:
 
   <pre>
 
   <pre>
     md5( albumix_ID + partner_order_ID + status_order + count + project_id + paper_id + total_amount + delivery_point + delivery_address + send_to_print + stamp + sekret)
+
     md5( albumix_ID + partner_order_ID + status_order + count + project_id + paper_id + total_amount + delivery_point + delivery_address + send_to_print + product_type + stamp + sekret)
 
   </pre>
 
   </pre>
  
Строка 66: Строка 72:
  
 
Параметры запроса (POST DATA):
 
Параметры запроса (POST DATA):
* order_id - ID заказа (наш)
+
* order_id - ID заказа PODS
* ftp-resend - "0" - отправит в печать, "1" - перезалить
+
* ftp-resend - "0" - отправить в печать, "1" - перезалить
 
* token - контрольная сумма
 
* token - контрольная сумма
  
Строка 74: Строка 80:
  
 
Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа.
 
Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа.
 
  
 
=== API получения списка проектов пользователя ===
 
=== API получения списка проектов пользователя ===
Строка 94: Строка 99:
 
необязательные параметры:
 
необязательные параметры:
  
* {pid} - ID проекта
+
* {pid} - ID проекта, используется вместе с {type}
 
* {type} - тип проекта (Book, Photo, WideFormat, Souvenir)
 
* {type} - тип проекта (Book, Photo, WideFormat, Souvenir)
  
Строка 114: Строка 119:
 
* created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 +
* is_show_button_do_not_delete - включена или нет кнопка "Не удалять этот проект" (см. раздел [[Управление_хранилищем]])
 +
* preparing_to_delete_date - дата планируемого удаления проекта (см. раздел [[Управление_хранилищем]])
 
* project_parts - все продукты, входящие в проект. массив объектов с полями:
 
* project_parts - все продукты, входящие в проект. массив объектов с полями:
 
*** type - тип продукта
 
*** type - тип продукта
Строка 130: Строка 137:
 
* token - контрольная сумма
 
* token - контрольная сумма
 
* format_id - ID формата (опционно)
 
* format_id - ID формата (опционно)
 +
* force=1 (опционно) для копирования проекта в другой вид книг, который возможно не совместим с исходным
  
значение token вычисляется как MD5 от конкатенации секретного ключа и всех параметров запроса
+
значение token вычисляется как MD5 от конкатенации секретного ключа и идентификатора проекта
 
<pre>md5( project_id + sekret) </pre>
 
<pre>md5( project_id + sekret) </pre>
  
Строка 189: Строка 197:
 
* https://yourdomain.printondemandsolution.ru/api/edit_project_name - переименование проекта
 
* https://yourdomain.printondemandsolution.ru/api/edit_project_name - переименование проекта
 
* https://yourdomain.printondemandsolution.ru/api/delete_project - удаление проекта
 
* https://yourdomain.printondemandsolution.ru/api/delete_project - удаление проекта
 +
* https://yourdomain.printondemandsolution.ru/api/do_not_delete_project - не удалять проект, отмеченный к удалению (см. [[Управление хранилищем]])
 +
  
 
Параметры запроса:
 
Параметры запроса:
Строка 194: Строка 204:
 
* project_new_name - новое название проекта (для удаления не нужно)
 
* project_new_name - новое название проекта (для удаления не нужно)
 
* token - контрольная сумма
 
* token - контрольная сумма
 +
* never=1 никогда не удалять проект (для метода api/do_not_delete_project)
 +
* delete_date={dd.mm.yyyy} установить дату удаления проекта (для метода api/do_not_delete_project)
 +
 +
 +
 +
 +
Значение token вычисляется как MD5 от конкатенации секретного ключа и всех параметров запроса.
 +
 +
* md5(project_id + project_new_name + sekret) - для переименования
 +
* md5(project_id + sekret) - для удаления проекта/для снятия отметки к удалению
 +
* md5(project_id + 1 + secret_key) - для never=1 никогда не удалять проект
 +
* md5(project_id + delete_date + secret_key) - для установки новой даты удаления проекта
  
значение token вычисляется как MD5 от конкатенации секретного ключа и всех параметров запроса
 
* md5( project_id + project_new_name + sekret) - для переименования
 
* md5( project_id + sekret) - для удаления
 
  
 
Ответ:
 
Ответ:
Строка 203: Строка 222:
 
либо
 
либо
 
* error - сообщение об ошибке (если есть)
 
* error - сообщение об ошибке (если есть)
 
  
 
=== API управления блокировкой проекта ===
 
=== API управления блокировкой проекта ===
Строка 273: Строка 291:
 
</pre>
 
</pre>
  
 +
=== API изменения данных профиля пользователя ===
  
 +
Данный метод используется для изменения данных пользователя в PODS и ветке развития Opencart
 +
 +
Метод:
 +
 +
https://yourdomain.printondemandsolution.ru/api/SetProfile
 +
 +
Параметры запроса (POST DATA):
 +
 +
userId - идентификатор пользователя PODS
 +
user_data - формат JSON
 +
hash - контрольная сумма
 +
 +
все параметры обязательные
 +
 +
JSON user_data:
 +
 +
{
 +
  "Name": "name1", //обязательно
 +
  "Surname": "surname1", //обязательно
 +
  "Patronymic": "patr1" //не обязательно
 +
  "Email": "aaa@aaa.com" //обязательно
 +
  "Phone": "+33333" //не обязательно
 +
  "Sex": "M" //не обязательно, M -> муж, F -> жен., не указан -> null
 +
  "Birthday": "12.12.2019" //не обязательно, формат dd.MM.yyyy
 +
}
 +
 +
Вычисление контрольной суммы:
 +
MD5 ([userid]|[secret])
 +
 +
 +
=== API изменения пароля пользователя ===
 +
 +
Данный метод используется для изменения данных пользователя в PODS и ветке развития Opencart
 +
 +
 +
https://yourdomain.printondemandsolution.ru/api/SetPassword
 +
 +
Параметры запроса (POST DATA):
 +
 +
userId - //обязательно
 +
old_password - //не обязательно при by_admin - 1, иначе обязательный параметр
 +
new_password - //обязательно
 +
hash - контрольная сумма
 +
by_admin - 1/null //не обязательно
 +
 +
by_admin = 1
 +
old_password не нужно.
 +
 +
Вычисление контрольной суммы:
 +
MD5 ([userid]|old_password|new_password||[secret])
 +
 +
при by_admin = 1
 +
MD5 ([userid]||new_password|1|[secret])
  
 
=== API получения изображения-превью проекта ===
 
=== API получения изображения-превью проекта ===
Строка 279: Строка 351:
 
Метод:
 
Метод:
  
GET https://yourdomain.printondemandsolution.ru/api/project_preview?id={id}&token={token}
+
GET https://yourdomain.printondemandsolution.ru/api/project_preview?id={id}&token={token}&w={w}&h={h}
  
 
Параметры:
 
Параметры:
Строка 286: Строка 358:
  
 
token = md5 (id + sekret)
 
token = md5 (id + sekret)
 +
 +
w - width в пикселях //не обязательно
 +
 +
h - height в пикселях //не обязательно
 +
 +
=== API привязка пользователя к проекту ===
 +
 +
POST https://yourdomain.printondemandsolution.ru/api/session_save_project
 +
 +
Параметры:
 +
 +
pid - ID проекта в PODS
 +
 +
userId - customerId
 +
 +
type - photo, book, souvenir, wideformat
 +
 +
liteId - не обязательно
 +
 +
token = md5 (pid + type + userId + sekret_key)
 +
 +
если указано liteId
 +
 +
token = md5 (pid + type + userId + lite_secret_key)
  
 
=== API получения каталога продукции ===
 
=== API получения каталога продукции ===
  
==== Получение иерархии для фотокниг ====
+
 
 +
==== Получение списка всех продуктов ====
 +
 
 +
http://yourdomain.printondemandsolution.ru/api/allproducts
 +
 
 +
get параметры:
 +
 
 +
* version=2 - выдает данные для Opencart версии 1.6.2 или выше (необязательный параметр)
 +
 
 +
ответ:
 +
 
 +
<pre>
 +
 
 +
//список продуктов
 +
{
 +
  "type": "book", //тип продукта, book - фотокнига
 +
  "id": "402", // PODS-ID продукта
 +
  "name": "prisma-книга 10x10",
 +
  "real_name": null,
 +
  "product_id": null,
 +
  "price": 399.00, //цена продукта
 +
  "is_hide": false //указывает, скрыт продукт в админке PODS или нет
 +
  "normal_sheets": 10 //количество разворотов установленное в админке по-умолчанию
 +
  "min_sheets": 5 //технический минимум разворотов установленный в админке
 +
  "max_sheets": 25 //технический максимум разворотов установленный в админке
 +
 
 +
 
 +
},
 +
{
 +
    "type": "cover", //тип продукта, обложка
 +
    "id": "1123", // PODS-ID продукта
 +
    "name": "prisma-книга 10x10, Фотообложка", //полное название {фотокнига}, {обложка}
 +
    "real_name": "Фотообложка", //название обложки
 +
    "product_id": "402", // ID фотокниги
 +
    "price": 0.00, //цена продукта
 +
    "is_hide": false //указывает, скрыт продукт в админке PODS или нет
 +
},
 +
 
 +
</pre>
 +
 
 +
==== Получение иерархии фотокниг ====
  
 
http://yourdomain.printondemandsolution.ru/api/getBookProducts
 
http://yourdomain.printondemandsolution.ru/api/getBookProducts
Строка 295: Строка 431:
 
<pre>
 
<pre>
 
[
 
[
  // массив типов книг
+
// массив типов книг
   {
+
   {"Id": 1,"Name": "Фотокнига премиум",
    Id: 1,
+
    //список форматов
    Name: 'Фотокнига премиум',
+
    "Formats":  
    //список форматов
+
    [
    formats: [
+
      {"Id": 1, Name: "20x20",  
      {Id: 1, Name: "20x20", Covers: [{"Id":13,"Name":"Мягкая фотообложка"},{"Id":245,"Name":"Обложка кожа"}]},
+
        //список обложек     
 +
        "Covers":  
 +
        [
 +
          {"Id": 1776, "Name": "Номер 1", "Type": null,
 +
            //список текстурных зон у обложки
 +
            "TextureZones":
 +
            [
 +
              {"Id": 0, "Name": "1",
 +
              // список текстур для этой зоны
 +
                "Textures":
 +
                  [
 +
                    {"Id": 903,
 +
                    "Name": "01_белый",
 +
                    "PreviewUrl": "https://podsdata.blob.core.windows.net/covertexture-16/2V476NO9B7D-100-100.jpg"}]}]},         
 +
 
 +
          {"Id":13,"Name":"Мягкая фотообложка"},{"Id":245,"Name":"Обложка кожа"}]},
 
       {Id: 2, Name: "20x30"},
 
       {Id: 2, Name: "20x30"},
 
       {Id: 3, Name: "30x20"},
 
       {Id: 3, Name: "30x20"},
    ]
+
      }
 +
    ]
 
   }
 
   }
 
]
 
]
 
</pre>
 
</pre>
  
==== Получение иерархии для сувенирной продукции ====
+
==== Получение иерархии сувенирной продукции ====
  
 
http://yourdomain.printondemandsolution.ru/api/getSouvenirProducts
 
http://yourdomain.printondemandsolution.ru/api/getSouvenirProducts
Строка 403: Строка 555:
  
 
==== Получения списка тематических дизайн-макетов ====
 
==== Получения списка тематических дизайн-макетов ====
 +
 +
Выдается список тематических дизайн макетов включенных в панели управления pods. Если в панели управления pods тематический дизайн отключен, то выдан не будет.
  
 
http://yourdomain.printondemandsolution.ru/api/getThemeList
 
http://yourdomain.printondemandsolution.ru/api/getThemeList
  
параметры:
+
Get-параметры:
type: "book" или "souvenir-{ID}", где {ID} - id вида сувенирки. обязательное поле
+
  
* width: максимальная ширина превью темы (необязательно)
+
* type=book или souvenir-{ID}, где {ID} - id вида сувенирки. обязательное поле
* height: максимальная высота превью темы (необязательно)
+
* width=максимальная ширина превью темы в пикселях (необязательно)
 +
* height=максимальная высота превью темы в пикселях (необязательно)
  
 
ответ:
 
ответ:
Строка 419: Строка 573:
 
   {
 
   {
 
     Id: 1,  
 
     Id: 1,  
     Name: 'Свадебная',  
+
     Name: "Свадебная",  
     PreviewUrl: 'URL превью темы',
+
     PreviewUrl: "URL превью темы",
 
     Formats: [1,2,3] // для фотокниг - ID совместимых форматов
 
     Formats: [1,2,3] // для фотокниг - ID совместимых форматов
 
     SouvenirSizes: [1,2,3] // для сувенирки - ID совместимых размеров сувенирки
 
     SouvenirSizes: [1,2,3] // для сувенирки - ID совместимых размеров сувенирки
 +
    Tag: "Детские, Семейные" - тэги, установленные в настройках этой темы
 
   }
 
   }
 
]
 
]
 
</pre>
 
</pre>
 +
 +
==== Получения списка миниатюр изображений тематических дизайн-макетов ====
 +
http://yourdomain.printondemandsolution.ru/Book/PreviewXml/%Theme_ID%
 +
 +
* %Theme_ID% - идентификатор тематического дизайн-макета
  
 
== Уведомления (передача данных из PODS в систему партнёра ) ==
 
== Уведомления (передача данных из PODS в систему партнёра ) ==
 
URL для всех уведомлений указывается в разделе [[Настройки]] - [[Интеграция]]
 
URL для всех уведомлений указывается в разделе [[Настройки]] - [[Интеграция]]
 +
 +
Метод  POST
  
 
=== Уведомление об успешной выгрузке заказа ===
 
=== Уведомление об успешной выгрузке заказа ===
Строка 450: Строка 612:
 
*comment = комментарий клиента
 
*comment = комментарий клиента
 
*theme_id - ID темы
 
*theme_id - ID темы
 +
*discount_coupon - Код скидочного купона
 +
*printer_order_id - ID заказ в системе принтера
 +
*printer_order_number - номер заказ в системе принтера
 +
*delivery_price - передавать стоимость доставки, в расчете контрольной суммы переменная не участвует.
 +
*mobile_app - 0/1 признак оформления заказа через мобильное приложение
 +
  
 
форматы и термины адреса должны быть совместимыми с EMS-POST
 
форматы и термины адреса должны быть совместимыми с EMS-POST
Строка 532: Строка 700:
 
*error_message = сообщение об ошибке
 
*error_message = сообщение об ошибке
 
*sign - контрольная сумма. считается как md5 от конкатенации всех параметров и секретного ключа
 
*sign - контрольная сумма. считается как md5 от конкатенации всех параметров и секретного ключа
 +
 +
 +
=== Уведомление о завершении рендеринга проекта (для выгрузки из Blob Azure) ===
 +
 +
 +
Вызывается когда рендеринг проекта завершен и проект готов к загрузке из blob storage.
 +
Вызывается только в случае, если используется [[Кросс-платформенное решение для прямой выгрузки заказов из облачного хранилища Azure]] и в справочнике FTP указан тип выгрузки из AzureBlob.
 +
 +
 +
Параметры:
 +
 +
*order_id - ID заказа в PODS
 +
*token = md5(order_id + Секретный ключ API (исходящие запросы))
  
 
=== Уведомление о создании/редактировании проекта ===
 
=== Уведомление о создании/редактировании проекта ===
Строка 598: Строка 779:
  
 
=== Сквозная авторизация ===
 
=== Сквозная авторизация ===
 +
 +
'''Внимание!
 +
Для корректной работы сквозной авторизации в браузерах на основе Chromium (Chrome, Opera, Yandex, new EDGE etc...) необходимо установить атрибуты cookies  SameSite=None; Secure;
 +
'''
 +
  
 
Для проверки авторизации на площадке партнёра осуществляется JSONP-запрос на площадку партнёра по ссылке, указанной в "URL API сквозной авторизации" в системе администрирования. В ответ должен вернуться корректный Javascript-код, содержащий  
 
Для проверки авторизации на площадке партнёра осуществляется JSONP-запрос на площадку партнёра по ссылке, указанной в "URL API сквозной авторизации" в системе администрирования. В ответ должен вернуться корректный Javascript-код, содержащий  
Строка 605: Строка 791:
 
</pre>
 
</pre>
 
дополнительно может быть указан параметр pods_id - ID пользователя в системе PODS
 
дополнительно может быть указан параметр pods_id - ID пользователя в системе PODS
 +
 +
 
hash вычисляется как md5 от конкатенации id, name, pods_id (если есть) и секретного ключа сквозной авторизации, который задаётся в системе администрирования
 
hash вычисляется как md5 от конкатенации id, name, pods_id (если есть) и секретного ключа сквозной авторизации, который задаётся в системе администрирования
 
* вызов функции api_externalNoauth параметрами без параметров, если пользователь не авторизован (для отслеживания logout на сайте партнёра)
 
* вызов функции api_externalNoauth параметрами без параметров, если пользователь не авторизован (для отслеживания logout на сайте партнёра)
Строка 617: Строка 805:
 
=== IFrame-авторизация ===
 
=== IFrame-авторизация ===
  
Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "back", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET):
+
Прямая или iframe авторизация.
 +
 
 +
Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "returnUrl", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET):
 
* id
 
* id
 
* name
 
* name
Строка 680: Строка 870:
 
header('Content-type: application/javascript; charset=urf-8');
 
header('Content-type: application/javascript; charset=urf-8');
 
session_start();
 
session_start();
 +
 +
$sessId = session_id();
 +
//если сессия не пустая, тогда ставить
 +
if ($sessId != "")
 +
    header("Set-Cookie: PHPSESSID=$sessId; path=/; HttpOnly; SameSite=None; Secure");
  
 
$sekret = 'fLgjlGJlbkl';
 
$sekret = 'fLgjlGJlbkl';
Строка 687: Строка 882:
 
       'id' => $_SESSION['user_id'],
 
       'id' => $_SESSION['user_id'],
 
       'name' => $_SESSION['user_name'],
 
       'name' => $_SESSION['user_name'],
  'hash' => md5($_SESSION['user_id'].$_SESSION['user_name'].$sekret),
+
    'hash' => md5($_SESSION['user_id'].$_SESSION['user_name'].$sekret),
 
   ]));
 
   ]));
 
} else {
 
} else {
Строка 694: Строка 889:
  
 
</nowiki>
 
</nowiki>
 
  
 
==== Pass-through-form.php ====
 
==== Pass-through-form.php ====
Строка 753: Строка 947:
 
*formatid - ID формата
 
*formatid - ID формата
 
*coverid - ID обложки
 
*coverid - ID обложки
 +
*partner_cover_description - описание обложки, переданное в get-параметре partner_cover_description при входе в конструктор
 
*sheets - число разворотов
 
*sheets - число разворотов
 
*pic_token - token для формирования URL картинки
 
*pic_token - token для формирования URL картинки
Строка 760: Строка 955:
 
*paper_id - идентификатор вида бумаги фотокниг, указанный при входе в конструктор
 
*paper_id - идентификатор вида бумаги фотокниг, указанный при входе в конструктор
 
*sign - контрольная сумма, считается как md5 от конкатенации некоторых параметров и секретного ключа (Секретный ключ API (исходящие запросы))
 
*sign - контрольная сумма, считается как md5 от конкатенации некоторых параметров и секретного ключа (Секретный ключ API (исходящие запросы))
 +
*type - тип продукта, - book, photo, wideformat, souvenir
 
*price - цена
 
*price - цена
  
<pre>sign = md5(uid + pid + ppid + title + formatid + coverid + sheets + pic_teken + sekret)</pre>
 
  
== Вход в конструктор ==
 
  
 +
<pre>sign = md5(uid + pid + ppid + title + formatid + coverid + sheets + pic_token + sekret)</pre>
 +
 +
== Get-параметры для управления входом в конструкторы ==
 +
 +
=== Фотокниги ===
 
;Для входа в конструктор фотокниг используется ссылка:
 
;Для входа в конструктор фотокниг используется ссылка:
  
Строка 785: Строка 984:
 
* bookFormatID - ID формата  
 
* bookFormatID - ID формата  
 
* coverID - ID обложки
 
* coverID - ID обложки
 
+
* couponCode - передает имя купона заведенного в CRM. Этот купон имеет приоритет над купоном по умолчанию, заполняет поле ''купон'' в заказе, заполняет поле ''купон'', в селекторе форматов книжки, работает на всех продуктах photoprint, books/create, souvenir/create, wideformat
 
+
  
 
* activeTab - передается вкладка репозитория, которую нужно открыть по-умолчанию:
 
* activeTab - передается вкладка репозитория, которую нужно открыть по-умолчанию:
Строка 793: Строка 991:
 
** Decors - Декоры
 
** Decors - Декоры
 
** Background - Фон
 
** Background - Фон
 +
** Collages - Коллажи
  
 
Дополнительные параметры для сложной обложки
 
Дополнительные параметры для сложной обложки
Строка 802: Строка 1001:
 
* customCoverUrl - URL на внешнее изображение текстуры обложки
 
* customCoverUrl - URL на внешнее изображение текстуры обложки
  
 +
=== Сувениры ===
  
 
;Для входа в конструктор сувенирной продукции используется ссылка
 
;Для входа в конструктор сувенирной продукции используется ссылка
  
  
* http://yourdomain.printondemandsolution.ru/souvenir/create/[разновидность_продукта]/[ID_продукта]/[ID_темы]?[activeTab=Templates]
 
  
* [ID_продукта] и [ID_темы] не обзательно
+
* http://ваш_домен.printondemandsolution.ru/souvenir/create/[идентификатор_вида_сувенирного_продукта]/[идентификатор_продукта]/[идентификатор_темы]?[activeTab=Templates]
 +
 
 +
* [ID_продукта] и [ID_темы] не обязательные параметры
  
 
Get-параметры
 
Get-параметры
Строка 817: Строка 1018:
 
** Decors - Декоры
 
** Decors - Декоры
  
 +
 +
[[Файл:Souvenir_interface_7.jpg|x500px|центр|Идентификатор вида сувенирного продукта]]
 +
 +
Переход в редактор кружек -  http://ваш_домен.printondemandsolution.ru/souvenir/create/1
 +
 +
[[Файл:Souvenir_interface_8.jpg|x500px|центр|Идентификатор вида сувенирного продукта]]
 +
 +
Переход в редактор кружек, на конкретную кружку -  http://ваш_домен.printondemandsolution.ru/souvenir/create/1/23
 +
 +
=== Широкоформатная печать ===
  
 
;Для входа в конструктор широкоформатной печати используется ссылка
 
;Для входа в конструктор широкоформатной печати используется ссылка
  
http://yourdomain.printondemandsolution.ru/wideformat?[size=size]&[materialId=materialId]&[uploader=photo|picture]&[options=options]
+
http://yourdomain.printondemandsolution.ru/wideformat?[size=size]&[materialId=materialId]&[uploader=photo|picture]&[options=options]&[multi=true|id]
  
 
GET-параметры необязательны
 
GET-параметры необязательны
Строка 828: Строка 1039:
 
* uploader - позволяет сразу открыть окно загрузчика файлов. если указано "photo", открывается на вкладке загрузки фото с диска, "picture" - выбор картины
 
* uploader - позволяет сразу открыть окно загрузчика файлов. если указано "photo", открывается на вкладке загрузки фото с диска, "picture" - выбор картины
 
* options - набор предустановленных опций. можно указать несколько ID опций через запятую
 
* options - набор предустановленных опций. можно указать несколько ID опций через запятую
 +
* multi - открытие с режимом модульной картины по-умолчанию. может быть передано значение "true" или ID конкретной модульной картины
 +
* showMaterialIds - отображать в интерфейсе только указанные ID материалов
 +
* showOptionIds - отображать в интерфейсе только указанные ID операций
 +
* hideIncompatible - скрывать несовместимые с выбранными операции - "true"
  
 
== Витрина тематических макетов ==
 
== Витрина тематических макетов ==

Текущая версия на 17:10, 16 августа 2021

Содержание

Основной функционал API

API создания/изменения заказа

Для изменения заказа необходимо сделать POST-запрос по адресу:

Параметры запроса (POST DATA):

  • albumix_ID (optional) - внутренний идентификатор партнёра в системе Avantnet
  • partner_order_ID (required) - ID заказа в системе партнёра
  • isOC=true (optional) - позволяет использовать одинаковый partner_order_ID для нескольких заказов, чтобы обеспечить заказы из корзины.
  • status_order (optional, required если set_status) - статус заказа:
    • 1 - принят (по умолчанию);
    • 2 - напечатан и передан в доставку;
    • 3 - доставлен
    • 4 - выдан
    • 9 - отменён
  • count (optional) - Количество продукции, если не указано, считается = 1
  • project_id (required, если new) - ID проекта в PODS
  • paper_id (optional) - ID типа бумаги
  • total_amount (optional, required если new) - Стоимость заказа
  • delivery_point (optional, required for photo&wideforamt) = 0 (на адрес клиента) 1 (на адреса самовывоза партнера-печатника)
  • delivery_address (optional, required for photo&wideforamt) адрес доставки
  • send_to_print (optional, required for photo&wideforamt) - если "1", заказ после создания отправляется на ftp. если "auto" - будут использовать настройки из панели управления PODS
  • stamp (optional) - метка времени в формате Unix timestamp
  • comment (optional) - комментарий к заказу
  • printmatic (optional) - цветокоррекция 1(вкл) 0(выкл). Если не задано, по умолчанию передается 1. Опция для совместимости с Avantnet.
  • product_type - тип продукта. необязательный. по умолчанию - book
    • book
    • photo
    • wideformat
    • souvenir
  • token - контрольная сумма

Значение token вычисляется по разному в зависимости от типа запроса:

  • для new и edit как MD5 от конкатенации секретного ключа, задаваемого в настройках WL (параметр "Секретный ключ API (входящие запросы)") и всех параметров запроса:
    md5( albumix_ID + partner_order_ID + status_order + count + project_id + paper_id + total_amount + delivery_point + delivery_address + send_to_print + product_type + stamp + sekret)
  
  • для set_status вычисляется как MD5 от конкатенации секретного ключа, задаваемого в настройках WL (параметр "Секретный ключ API (входящие запросы)"), "albumix_ID", "partner_order_ID", "status_order" и "stamp", соединённых через знак тире ("-")


Пример вычисления на PHP:

$key = 'SEKRET_KEY';
$fields = array('albumix_ID', 'partner_order_ID', 'status_order', 'stamp');
$values = array($key);
foreach($fields as $field) {
    $values[] = $_POST[$field];
}
$token = md5(implode('-', $values));

Ответ:

  • При успешной обработке запроса возвращается строка
 id={ID} 

{ID} - номер заказа в PODS

  • В случае ошибки возвращается
 error={Error descriptiom} 
  • При использовании set_status в случае успеха возвращается строка "OK" (сохранено для совместимости с Avantnet)

Используется кодировка указанная в панели управления, в разделе Настройки - Интеграция

API отправки заказа в печать

Параметры запроса (POST DATA):

  • order_id - ID заказа PODS
  • ftp-resend - "0" - отправить в печать, "1" - перезалить
  • token - контрольная сумма

Вычисление контрольной суммы:

MD5  ([order_id][ftp-resend][secret])

Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа.

API получения списка проектов пользователя

Для получения делается запрос по адресу

https://yourdomain.printondemandsolution.ru/api/user_projects?userid={user_id}&podsid={pods_user_id}&token={token}

либо

https://yourdomain.printondemandsolution.ru/api/user_projects/{user id}&token={token}

По первому адресу передавать нужно только один из параметров, либо {userId}, либо {podsId}.

  • {user_id} - ID пользователя в БД WL
  • {pods_user_id} - ID пользователя в БД PODS
  • {token} - контрольная сумма, считается как md5 от конкатенации {user id} (либо {pods user id}) и секретного ключа

необязательные параметры:

  • {pid} - ID проекта, используется вместе с {type}
  • {type} - тип проекта (Book, Photo, WideFormat, Souvenir)


Результат вовзвращается в виде JSON, содержащего массив проектов со следующими полями:

  • pid - ID проекта в PODS
  • partner_pid - ID проекта у партнёра, если есть
  • title - название проекта
  • book_type = тип книги
  • book_type_id = ID типа книги
  • book_format = формат книги
  • book_format_id = ID формата книги
  • paper_type = тип листа
  • paper_type_id = ID типа листа
  • cover_id = ID обложки
  • sheets = количество разворотов
  • pic_token - token для формирования URL картинки
  • created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
  • edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
  • is_show_button_do_not_delete - включена или нет кнопка "Не удалять этот проект" (см. раздел Управление_хранилищем)
  • preparing_to_delete_date - дата планируемого удаления проекта (см. раздел Управление_хранилищем)
  • project_parts - все продукты, входящие в проект. массив объектов с полями:
      • type - тип продукта
      • id - ID продукта
      • count - количество
      • name - название продукта
      • price - цена

API создания копии проекта

Для создания копии проекта необходимо сделать POST-запрос по адресу: https://yourdomain.printondemandsolution.ru/api/copy_project

Параметры запроса POST (DATA):

  • project_id - ID проекта
  • token - контрольная сумма
  • format_id - ID формата (опционно)
  • force=1 (опционно) для копирования проекта в другой вид книг, который возможно не совместим с исходным

значение token вычисляется как MD5 от конкатенации секретного ключа и идентификатора проекта

md5( project_id + sekret) 

Ответ:

  • Идентификатор созданного проекта при успехе

или

  • error - сообщение об ошибке (если есть)

API управления общим доступом к проекту

https://yourdomain.printondemandsolution.ru/api/share_project

Параметры запроса (POST/GET):

  • project_id - ID проекта
  • action - "share" - открыть общий доступ, "unshare" - отключить общий доступ
  • token - контрольная сумма

Вычисление контрольной суммы:

MD5 ([project_id][action][secret])

Возвращаемые значения:

  • error - при ошибке
  • при action=share

ссылка на проект для общего доступа - при успехе

  • при action=unshare

unshared - при успехе

API получения списка заказов пользователя

Для получения делается запрос по адресу https://yourdomain.printondemandsolution.ru/api/user_orders?userid={user_id}&podsid={pods_user_id}&token={token}

  • {user_id} - ID пользователя в БД WL
  • {pods_user_id} - ID пользователя в БД PODS
  • {token} - контрольная сумма, считается как md5 от конкатенации {user_id} (либо {pods_user_id}) и секретного ключа

Передавать нужно один из параметров, либо userid, либо podsid.

Результат вовзвращается в виде JSON, содержащего массив проектов со всеми полями из проектов плюс:

  • oid - номер заказа в PODS
  • partner_oid - номер заказа у партнёра, если есть
  • qty (integer) = количество экземпляров
  • printmatic = 0 выключен, 1 включен.
  • delivery_point = 0 (на адрес клиента) 1 (на адреса самовывоза партнера-печатника)
  • delivery_address
  • city =
  • street =
  • building =
  • appt =
  • order_time - дата и время заказа, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
  • status - статус заказа (как в API создания/изменения заказа)

API удаления/переименования проектов

Для удаления/переименования проекта необходимо сделать POST-запрос по адресу:


Параметры запроса:

  • project_id - ID проекта
  • project_new_name - новое название проекта (для удаления не нужно)
  • token - контрольная сумма
  • never=1 никогда не удалять проект (для метода api/do_not_delete_project)
  • delete_date={dd.mm.yyyy} установить дату удаления проекта (для метода api/do_not_delete_project)



Значение token вычисляется как MD5 от конкатенации секретного ключа и всех параметров запроса.

  • md5(project_id + project_new_name + sekret) - для переименования
  • md5(project_id + sekret) - для удаления проекта/для снятия отметки к удалению
  • md5(project_id + 1 + secret_key) - для never=1 никогда не удалять проект
  • md5(project_id + delete_date + secret_key) - для установки новой даты удаления проекта


Ответ:

  • OK - при успехе

либо

  • error - сообщение об ошибке (если есть)

API управления блокировкой проекта

Параметры запроса (POST DATA):

  • project_id - ID проекта
  • action - "lock" - блокировать проект, "unlock" - снять блокировку с проекта, "status" - получить текущий статус блокировки проекта
  • token - контрольная сумма

Вычисление контрольной суммы:

MD5 ([project_id][action][secret])


Возвращаемые значения:

  • error - при ошибке

при action=lock и action=unlock

  • ОК - при успехе

при action=status

  • locked - если проект заблокирован
  • unlocked - если проект не заблокирован

API получения статуса выгрузки заказа

Параметры запроса:

  • order_id - ID заказа
  • token - контрольная сумма, считается как md5 от конкатенации order_id и секретного ключа

Результат вовзвращается в виде JSON, содержащего:

  • error - сообщение об ошибке при запросе (если оно есть)

либо

  • status - статус заказа:
    • 0 - не было выгрузки
    • 1 - идёт выгрузка
    • 2 - ошибка
    • 3 - выгружено
    • 4 - отменено
  • delivery_provider = 0 (партнер), 1 (EMS), 2 (еще кто-то) ...
  • delivery_provider_orderid - ID заказа в системе Ddelivery, если используется другая система, то пусто

API сверки идентификаторов пользователя

Метод:

GET https://yourdomain.printondemandsolution.ru/api/get_user

Параметры:

  • pid - партнёрский ID пользователя
  • pods_id - ID пользователя в PODS
  • hash = md5 ({pid или pods_id } + sekret)

Ответ:

{
   pid: партнёрский ID пользователя,
   pods_id: ID пользователя в PODS
}

API изменения данных профиля пользователя

Данный метод используется для изменения данных пользователя в PODS и ветке развития Opencart

Метод:

https://yourdomain.printondemandsolution.ru/api/SetProfile

Параметры запроса (POST DATA):

userId - идентификатор пользователя PODS user_data - формат JSON hash - контрольная сумма

все параметры обязательные

JSON user_data:

{

 "Name": "name1", //обязательно
 "Surname": "surname1", //обязательно
 "Patronymic": "patr1" //не обязательно
 "Email": "aaa@aaa.com" //обязательно
 "Phone": "+33333" //не обязательно
 "Sex": "M" //не обязательно, M -> муж, F -> жен., не указан -> null
 "Birthday": "12.12.2019" //не обязательно, формат dd.MM.yyyy

}

Вычисление контрольной суммы: MD5 ([userid]|[secret])


API изменения пароля пользователя

Данный метод используется для изменения данных пользователя в PODS и ветке развития Opencart


https://yourdomain.printondemandsolution.ru/api/SetPassword

Параметры запроса (POST DATA):

userId - //обязательно old_password - //не обязательно при by_admin - 1, иначе обязательный параметр new_password - //обязательно hash - контрольная сумма by_admin - 1/null //не обязательно

by_admin = 1 old_password не нужно.

Вычисление контрольной суммы: MD5 ([userid]|old_password|new_password||[secret])

при by_admin = 1 MD5 ([userid]||new_password|1|[secret])

API получения изображения-превью проекта

Метод:

GET https://yourdomain.printondemandsolution.ru/api/project_preview?id={id}&token={token}&w={w}&h={h}

Параметры:

id - ID проекта в PODS

token = md5 (id + sekret)

w - width в пикселях //не обязательно

h - height в пикселях //не обязательно

API привязка пользователя к проекту

POST https://yourdomain.printondemandsolution.ru/api/session_save_project

Параметры:

pid - ID проекта в PODS

userId - customerId

type - photo, book, souvenir, wideformat

liteId - не обязательно

token = md5 (pid + type + userId + sekret_key)

если указано liteId

token = md5 (pid + type + userId + lite_secret_key)

API получения каталога продукции

Получение списка всех продуктов

http://yourdomain.printondemandsolution.ru/api/allproducts

get параметры:

  • version=2 - выдает данные для Opencart версии 1.6.2 или выше (необязательный параметр)

ответ:


//список продуктов
{
   "type": "book", //тип продукта, book - фотокнига
   "id": "402", // PODS-ID продукта
   "name": "prisma-книга 10x10",
   "real_name": null,
   "product_id": null,
   "price": 399.00, //цена продукта
   "is_hide": false //указывает, скрыт продукт в админке PODS или нет 
   "normal_sheets": 10 //количество разворотов установленное в админке по-умолчанию
   "min_sheets": 5 //технический минимум разворотов установленный в админке 
   "max_sheets": 25 //технический максимум разворотов установленный в админке 


},
{
    "type": "cover", //тип продукта, обложка
    "id": "1123", // PODS-ID продукта
    "name": "prisma-книга 10x10, Фотообложка", //полное название {фотокнига}, {обложка}
    "real_name": "Фотообложка", //название обложки
    "product_id": "402", // ID фотокниги
    "price": 0.00, //цена продукта
    "is_hide": false //указывает, скрыт продукт в админке PODS или нет 
},

Получение иерархии фотокниг

http://yourdomain.printondemandsolution.ru/api/getBookProducts

[
// массив типов книг
  {"Id": 1,"Name": "Фотокнига премиум",
    //список форматов
    "Formats": 
    [
      {"Id": 1, Name: "20x20", 
         //список обложек      
         "Covers": 
         [
           {"Id": 1776, "Name": "Номер 1", "Type": null, 
             //список текстурных зон у обложки
             "TextureZones": 
             [ 
               {"Id": 0, "Name": "1",
               // список текстур для этой зоны
                 "Textures": 
                  [
                    {"Id": 903,
                     "Name": "01_белый",
                     "PreviewUrl": "https://podsdata.blob.core.windows.net/covertexture-16/2V476NO9B7D-100-100.jpg"}]}]},           

           {"Id":13,"Name":"Мягкая фотообложка"},{"Id":245,"Name":"Обложка кожа"}]},
       {Id: 2, Name: "20x30"},
       {Id: 3, Name: "30x20"},
      }
    ]
  }
]

Получение иерархии сувенирной продукции

http://yourdomain.printondemandsolution.ru/api/getSouvenirProducts

[
   // развновидности продукта
   {
      "Id": 1,
      "Name": "Кружки",
      // категории
      "Categories":[
         {
            "Id":1003,
            "Name":"Кружки",
            "Types": [
            {
                "Id":1004,
                "Name":"Cylindrical",
                // варианты раскарски
                "Colorschemes": [
                {
                   "Id":1004,
                   "Name":null,
                   // размеры
                   "Sizes":[
                   {
                     "Id":1004,
                     "Name":"Кружка цилиндрическая классическая",
                     // продукты
                     "Products":[
                     {
                       "Id":19,
                       "Name":"Белая" 
                   }]

              }]
          }]
      }]
}]


Подробнее о структуре иерархии сувенирной продукции в разделе вики Модуль_"Сувенирная_продукция"


получение каталога продукции для ШФ

http://yourdomain.printondemandsolution.ru/api/getWideFormatProducts

параметры: picWidth - (необязательно) максимальная ширина изображений материалов и опций, по умолчанию передаётся в максимальном размере picHeight - (необязательно) максимальная высота изображений материалов и опций

{
    // список материалов
    Materials: [
       {
         Id: 1, 
         Name: 'Холст', 
         Options: [1,2,3,4], // ID совместимых опций
         Picture: "ссылка на изображение" 
       }
    ]
    // список опцмй
    Options: [
       {
         Id: 1, 
         Name: 'Рамка', 
         Materials: [1,2,3], // ID совместимых материалов
         Picture: "ссылка на изображение" 
       }
    ],
    // мультипано
    Multipanes: [
       {
          Id: 1,
          Name
          Width: 90, // в сантиметрах
          Height: 90, // в сантиметрах
          Elements: [         //массив с информацией об элементах
              [0,0,40,90], // x,y,width,height
              [0,50,40,90]
          ]
       }
    ]
}


Получения списка тематических дизайн-макетов

Выдается список тематических дизайн макетов включенных в панели управления pods. Если в панели управления pods тематический дизайн отключен, то выдан не будет.

http://yourdomain.printondemandsolution.ru/api/getThemeList

Get-параметры:

  • type=book или souvenir-{ID}, где {ID} - id вида сувенирки. обязательное поле
  • width=максимальная ширина превью темы в пикселях (необязательно)
  • height=максимальная высота превью темы в пикселях (необязательно)

ответ:


[
  {
    Id: 1, 
    Name: "Свадебная", 
    PreviewUrl: "URL превью темы",
    Formats: [1,2,3] // для фотокниг - ID совместимых форматов
    SouvenirSizes: [1,2,3] // для сувенирки - ID совместимых размеров сувенирки
    Tag: "Детские, Семейные" - тэги, установленные в настройках этой темы
  }
]

Получения списка миниатюр изображений тематических дизайн-макетов

http://yourdomain.printondemandsolution.ru/Book/PreviewXml/%Theme_ID%

  •  %Theme_ID% - идентификатор тематического дизайн-макета

Уведомления (передача данных из PODS в систему партнёра )

URL для всех уведомлений указывается в разделе Настройки - Интеграция

Метод POST

Уведомление об успешной выгрузке заказа

Не вызывается в случае перезаливки заказа. Параметры передаваемые в API:

Общее для всех видов заказа
  • albumix_order_id = номер заказа в PODS
  • partner_order_id = номер заказа у партнёра
  • price (double) = стоимость заказа (не книги, а всего заказа с учетом скидок, т.е. сколько клиент должен заплатить)
  • payment_method = способ оплаты. 0 (заказ оплачен) 1 (оплата при получении)
  • user_name = ФИО клиента
  • phone = телефон клиента
  • email = email клиента
  • delivery_point = 0 (на адрес клиента) 1 (на адреса самовывоза партнера-печатника)
  • city =
  • street =
  • building =
  • appt =
  • comment = комментарий клиента
  • theme_id - ID темы
  • discount_coupon - Код скидочного купона
  • printer_order_id - ID заказ в системе принтера
  • printer_order_number - номер заказ в системе принтера
  • delivery_price - передавать стоимость доставки, в расчете контрольной суммы переменная не участвует.
  • mobile_app - 0/1 признак оформления заказа через мобильное приложение


форматы и термины адреса должны быть совместимыми с EMS-POST

  • delivery_provider = 0 (партнер), 1 (EMS), 2 (еще кто-то) ...
  • sign = контрольная сумма. считается как md5 от конкатенации некоторых параметров и секретного ключа.

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


Фотокниги
  • albumix_order_id (string(100)) = номер заказа в системе PODS
  • stamp (date time string dd.mm.yyyy hh:nn:ss) = дата приема заказа
  • book_type = тип книги
  • book_type_id = ID типа книги
  • book_format = формат книги
  • book_format_id = ID формата книги
  • paper_type = тип листа
  • paper_type_id = ID типа листа
  • sheets = количество разворотов
  • qty (integer) = количество экземпляров
  • printmatic = 0 выключен, 1 включен.
  • pic_token - token для формирования URL картинки

Набор полей, участвующих в рассчёте контрольной суммы:

"albumix_order_id", "stamp", "action_id", "qty", "price", "price_internal", "delivery_point", "delivery_address", "delivery_provider", "payment_method"
Фотопечать
  • order_detail - строка описания заказа

Формат строки

ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ\r\n
....
ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ
  • \t - табуляция
  • \r\n - возврат каретки + новая стока


Примеры


100 фото на глянце 10х15

Фотопечать\tГлянцевая\t10x15\t100\t3.50

100 фото на глянце 10х15 + 5 исправлений красных глаз

Фотопечать\tГлянцевая\t10x15\t100\t3.50
Прочее\t\tКрасные глаза\t5\t4

100 фото на глянце 10х15 + 10 фото на мат 15х20

Фотопечать\tГлянцевая\t10x15\t100\t3.50
Фотопечать\tМатовая\t15x20\t10\t15

набор полей, участвующих в рассчёте контрольной суммы:

"albumix_order_id", "stamp", "user_name", "delivery_point", "delivery_address", "delivery_provider", "payment_method"
Возвращается от партнера

В ответ на уведомление о выгрузке заказа партнёр имеет возможность передать присвоенный ID заказа. В этом случае ответ должен быть в виде:

  • albumix_ID = идентификатор PODS в системе партнера
  • partner_order_ID = внутренний номер заказа в системе партнера

Пример

albumix_ID=123
partner_order_ID=12345

Если не требуется присваивать партнёрский ID после выгрузки заказа - можно вернуть просто строку "OK"

Уведомление об ошибке при выгрузке заказа

Отправляется по тому-же URL, что уведомление о выгрузке URL для всех уведомлений указывается в разделе Настройки - Интеграция

Параметры запроса:

  • albumix_order_id = номер заказа в системе PODS
  • error = "1"
  • error_message = сообщение об ошибке
  • sign - контрольная сумма. считается как md5 от конкатенации всех параметров и секретного ключа


Уведомление о завершении рендеринга проекта (для выгрузки из Blob Azure)

Вызывается когда рендеринг проекта завершен и проект готов к загрузке из blob storage. Вызывается только в случае, если используется Кросс-платформенное решение для прямой выгрузки заказов из облачного хранилища Azure и в справочнике FTP указан тип выгрузки из AzureBlob.


Параметры:

  • order_id - ID заказа в PODS
  • token = md5(order_id + Секретный ключ API (исходящие запросы))

Уведомление о создании/редактировании проекта

Вызывается:

  • при создании проекта авторизованным пользоватлем
  • при авторизации в конструкторе если проект был создан гостём
  • при сохранении проекта (в том числе при автосохранении), если изменились параметры проекта, передаваемые в API (кол-во развортов, обложка, заголовок)

Параметры, передаваемые в API:

  • uid - ID пользователя (партнёрский при сквозной авторизации?)
  • pid - номер проекта PODs
  • title - заголовок проекта
  • formatid - ID формата
  • coverid - ID обложки
  • sheets - число разворотов
  • pic_token - token для формирования URL картинки
  • souvenir_class_id - ID вида сувенирной продукции
  • souvenir_product_id - ID товара
  • theme_id - ID темы
  • sign - контрольная сумма


Контрольная сумма считается как md5 от конкатенации всех параметров и секретного ключа ("Секретный ключ API (исходящие запросы)")

$s = '';
$keys = array('uid', 'pid', 'title', 'formatid', 'coverid', 'sheets');
foreach($keys as $key) {
	$s .= $_POST[$key];
}
$s .= $sekret;

if(md5($s) == $_POST['sign']) {
	echo 'id='.rand();
} else {
	echo 'CHECKSIGNFAILED';
}

В ответ возвращается

  • ID проекта у партнёра
id=3456
  • Сообщение об ошибке
CHECKSIGNFAILED


Кроме того в настройках WL можно укзазать URL, на который следует перебрасывать пользователя после нажатия кнопки "сохранить и выйти". Необходимо учесть, что конструктор может находится в IFRAME, при этом перенаправление должно происходить на уровне всей странице.

Внешняя авторизация

Поддерживается два режима авторизации:

  • сквозная авторизация. сессия пользователя хранится на сайте партнёра. если пользователь авторизован на сайте партнёра при переходе на сайт WL он автоматически авторизуется
  • IFrame авторизация. Сессия хранится на сайте WL, авторизация с сайта партнёра не подхватывается, но сам процесс авторизации происходит в IFrame партнёра

Возможно совместное исполтьзование сквозной и IFrame авторизации. В приложенном архиве auth.rar пример реализации API партнёра на PHP


После подключения внешней авторизации, войти в панель управления можно по ссылке yourdomain.printondemandsolution.ru/user/logincustom - после авторизации реакции интерфейса не последует. после этого можно заходить в панель управления yourdomain.printondemandsolution.ru/admin


Сквозная авторизация

Внимание! Для корректной работы сквозной авторизации в браузерах на основе Chromium (Chrome, Opera, Yandex, new EDGE etc...) необходимо установить атрибуты cookies SameSite=None; Secure;


Для проверки авторизации на площадке партнёра осуществляется JSONP-запрос на площадку партнёра по ссылке, указанной в "URL API сквозной авторизации" в системе администрирования. В ответ должен вернуться корректный Javascript-код, содержащий

  • вызов функции api_externalAuth параметрами ID пользователя и имя пользователя, если пользователь авторизован
window.api_externalAuth({id:157,name:'Иванов Иван',email:'email@mail.ru','hash':'hashcode'})

дополнительно может быть указан параметр pods_id - ID пользователя в системе PODS


hash вычисляется как md5 от конкатенации id, name, pods_id (если есть) и секретного ключа сквозной авторизации, который задаётся в системе администрирования

  • вызов функции api_externalNoauth параметрами без параметров, если пользователь не авторизован (для отслеживания logout на сайте партнёра)
window.api_externalNoauth()

Пример скрипта API сквозной авторизации в auth.rar, файл pass-through.php

При использовании сквозной авторизации для выхода пользователя из системы нужно убить сесссию пользователя на сайте партнёра. Для этого в системе администрирования указывается URL для кнопки "Выход" на сайте WL. При нажатии "Выход" пользователь переходит на указанный URL, скрипт на сайте партнёра убивает сессию пользователя. Пример скрипта logout.php

IFrame-авторизация

Прямая или iframe авторизация.

Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "returnUrl", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET):

  • id
  • name
  • email
  • pods_id (необязательно)
  • hash - вычисляется также как при сквозной авторизации
$redirectUrl = sprintf("%s?id=%d&name=%s&email=%s&hash=%s", $_GET['back'], $_SESSION['user_id'], urlencode($_SESSION['user_name']),  urlencode($_SESSION['user_email']),
        md5($_SESSION['user_id'].$_SESSION['user_name'].$_SESSION['pods_id'].$sekret));
header('Location: '. $redirectUrl);

Примеры кода

IFrame.php

<?php
header('Content-type: text/html; charset=urf-8');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
session_start();

$sekret = 'fLgjlGJlbkl';

if(isset($_POST['id'])) {
	$_SESSION['user_id'] = $_POST['id'];
	$_SESSION['user_name'] = $_POST['name'];
	
	$redirectUrl = sprintf("%s?id=%d&name=%s&hash=%s", $_GET['back'], $_SESSION['user_id'], urlencode($_SESSION['user_name']),
		md5($_SESSION['user_id'].$_SESSION['user_name'].$sekret));
	header('Location: '. $redirectUrl);
} else {
?>
	<form method="post">
		User ID: <input name="id" value="123"/><br>
		User Name: <input name="name" value="Иван Иванов"/><br>
		<input type="submit" value="Войти"/>
	</form>
<?php
}

Logout.php

<?php
session_start();

unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
	
header('Location: '.$_SERVER['HTTP_REFERER']);

Pass-through.php


<?php
header('Content-type: application/javascript; charset=urf-8');
session_start();

$sessId = session_id();
//если сессия не пустая, тогда ставить
if ($sessId != "")
    header("Set-Cookie: PHPSESSID=$sessId; path=/; HttpOnly; SameSite=None; Secure");

$sekret = 'fLgjlGJlbkl';

if(isset($_SESSION['user_id'])) {
   printf("window.api_externalAuth(%s)", json_encode([
      'id' => $_SESSION['user_id'],
      'name' => $_SESSION['user_name'],
    'hash' => md5($_SESSION['user_id'].$_SESSION['user_name'].$sekret),
   ]));
} else {
   echo "window.api_externalNoauth()";
}


Pass-through-form.php

<?php
header('Content-type: text/html; charset=urf-8');
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
session_start();

if(isset($_POST['id'])) {
	$_SESSION['user_id'] = $_POST['id'];
	$_SESSION['user_name'] = $_POST['name'];
	header('Location: '.$_SERVER['REQUEST_URI']);
	exit;
}

if(isset($_GET['logout'])) {
	unset($_SESSION['user_id']);
	$url = $_SERVER['REQUEST_URI'];
	$pos = strpos($url, '?');
	header('Location: '. substr($url, 0, $pos));
	exit;
}

if(isset($_SESSION['user_id'])) {
	printf("User id: %d<br>", $_SESSION['user_id']);
	printf("User name: %s<br>", $_SESSION['user_name']);
	echo "<a href='?logout=1'>Выйти</a>";
} else {
?>
	<form method="post">
		User ID: <input name="id" value="123"/><br>
		User Name: <input name="name" value="Иван Иванов"/><br>
		<input type="submit" value="Войти"/>
	</form>
<?php
}




Users.jpg


APIProjects.jpg

Оформление заказа на сайте партнера

В системе администрирования в разделе Настройки - Интеграция можно указать URL для оформления заказов. При оформлении заказа пользователь переходит на указанный URL с дополнительными параметрами:

  • uid - ID пользователя (партнёрский при сквозной авторизации)
  • pid - номер проекта PODs
  • ppid - ID проекта у партнёра, если есть
  • title - заголовок проекта
  • quantity - количество экземпляров (количество переменных блоков в проекте)
  • formatid - ID формата
  • coverid - ID обложки
  • partner_cover_description - описание обложки, переданное в get-параметре partner_cover_description при входе в конструктор
  • sheets - число разворотов
  • pic_token - token для формирования URL картинки
  • theme_id - ID темы
  • souvenir_class_id - ID вида сувенирной продукции
  • souvenir_product_id - ID товара
  • paper_id - идентификатор вида бумаги фотокниг, указанный при входе в конструктор
  • sign - контрольная сумма, считается как md5 от конкатенации некоторых параметров и секретного ключа (Секретный ключ API (исходящие запросы))
  • type - тип продукта, - book, photo, wideformat, souvenir
  • price - цена


sign = md5(uid + pid + ppid + title + formatid + coverid + sheets + pic_token + sekret)

Get-параметры для управления входом в конструкторы

Фотокниги

Для входа в конструктор фотокниг используется ссылка


  • [ID_темы] - 0, если проект создается без тематического макета
  • [ID_обложки] - не обязательный параметр


Необязательные GET-параметры могут вызываться с ссылкой https://yourdomain.printondemandsolution.ru/books/create/?[booktypeID=0]


  • booktypeID=0 - попадаем на список всех видов и форматов, далее выбор формат-обложка, попадает в список тем для данного формата, и далее редактор
  • booktypeID=1 - попадаем на список всех видов и форматов, но с установленным фокусом выбора на вид книг id=1
  • SheetCount - количество разворотов в создаваемой книге, должен находиться в диапазоне минимального/максимального количества разворотов, разрешенных для данного формата. Эти параметры задаются в разделе Настройки - Продукты
  • PaperID - идентификатор вида бумаги
  • bookFormatID - ID формата
  • coverID - ID обложки
  • couponCode - передает имя купона заведенного в CRM. Этот купон имеет приоритет над купоном по умолчанию, заполняет поле купон в заказе, заполняет поле купон, в селекторе форматов книжки, работает на всех продуктах photoprint, books/create, souvenir/create, wideformat
  • activeTab - передается вкладка репозитория, которую нужно открыть по-умолчанию:
    • Templates - Шаблоны
    • Photos - Снимки
    • Decors - Декоры
    • Background - Фон
    • Collages - Коллажи

Дополнительные параметры для сложной обложки

  • textures - ID текстур, через запятую.
  • partner_cover_code - партнёрский код обложки
  • partner_cover_price - цена обложки (не может быть изменена в конструкторе)
  • partner_cover_description - текстовое описание обложки
  • customCoverUrl - URL на внешнее изображение текстуры обложки

Сувениры

Для входа в конструктор сувенирной продукции используется ссылка


  • [ID_продукта] и [ID_темы] не обязательные параметры

Get-параметры

  • activeTab - передается вкладка репозитория, которую нужно открыть по-умолчанию:
    • Templates - Шаблоны
    • Photos - Фото
    • Decors - Декоры


Идентификатор вида сувенирного продукта

Переход в редактор кружек - http://ваш_домен.printondemandsolution.ru/souvenir/create/1

Идентификатор вида сувенирного продукта

Переход в редактор кружек, на конкретную кружку - http://ваш_домен.printondemandsolution.ru/souvenir/create/1/23

Широкоформатная печать

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

http://yourdomain.printondemandsolution.ru/wideformat?[size=size]&[materialId=materialId]&[uploader=photo|picture]&[options=options]&[multi=true|id]

GET-параметры необязательны

  • size - размер печати, в формате ШxВ - ширина и высота в сантиметрах, например "20х30". по умолчанию подбирается оптимальный размер
  • materialID - ID выбранного материала печати. по умолчанию выбирается первый в списке материал.
  • uploader - позволяет сразу открыть окно загрузчика файлов. если указано "photo", открывается на вкладке загрузки фото с диска, "picture" - выбор картины
  • options - набор предустановленных опций. можно указать несколько ID опций через запятую
  • multi - открытие с режимом модульной картины по-умолчанию. может быть передано значение "true" или ID конкретной модульной картины
  • showMaterialIds - отображать в интерфейсе только указанные ID материалов
  • showOptionIds - отображать в интерфейсе только указанные ID операций
  • hideIncompatible - скрывать несовместимые с выбранными операции - "true"

Витрина тематических макетов

ссылка для перехода на витрину тематических макетов книг

Если при вызове витрины передаются GET-параметры, то:

  • - ссылки с темы ведут не на страницу выбора темы, а сразу в конструктор;
  • - отображаются только те темы, в которых есть макеты для заданного формата.


дополнительные необязательные GET-параметры:

  • bookFormatID - ID формата
  • coverID - ID обложки
  • sheetcount - кол-во разворотов
  • preview - ID темы. При переходе открывается превью заданной темы.
  • booktypeID=0 - попадаем на список всех видов и форматов, далее выбор формат-обложка, попадает в список тем для данного формата, и далее редактор
  • booktypeID=1 - попадаем на список всех видов и форматов, но с установленным фокусом выбора на вид книг id=1