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

Материал из PODS Wiki
Перейти к: навигация, поиск
(Iframe-авторизация)
(Получения списка тематических дизайн-макетов)
 
(не показана одна промежуточная версия этого же участника)
Строка 9: Строка 9:
  
 
Параметры запроса (POST DATA):
 
Параметры запроса (POST DATA):
* albumix_ID (optional) - внутренний идентификатор партнёра в системе Алексея Букреева
+
* 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", заказ после создания отправляется в печать
+
* send_to_print (optional, required for photo&wideforamt) - если "1", заказ после создания отправляется на ftp. если "auto" - будут использовать настройки из панели управления PODS
* stamp (optional) - метка времени в формате Unix timesta
+
* stamp (optional) - метка времени в формате Unix timestamp
 +
* comment (optional) - комментарий к заказу
 +
* printmatic (optional) - цветокоррекция 1(вкл) 0(выкл). Если не задано, по умолчанию передается 1. Опция для совместимости с Avantnet.
 +
* product_type - тип продукта. необязательный. по умолчанию - book
 +
** book
 +
** photo
 +
** wideformat
 +
** souvenir
 
* token - контрольная сумма
 
* token - контрольная сумма
  
Строка 31: Строка 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>
  
Строка 64: Строка 72:
  
 
Параметры запроса (POST DATA):
 
Параметры запроса (POST DATA):
* order_id - ID заказа (наш)
+
* order_id - ID заказа PODS
* ftp-resend - "0" - отправит в печать, "1" - перезалить
+
* ftp-resend - "0" - отправить в печать, "1" - перезалить
 
* token - контрольная сумма
 
* token - контрольная сумма
  
Строка 72: Строка 80:
  
 
Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа.
 
Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа.
 
  
 
=== API получения списка проектов пользователя ===
 
=== API получения списка проектов пользователя ===
  
 
Для получения делается запрос по адресу
 
Для получения делается запрос по адресу
* https://yourdomain.printondemandsolution.ru/api/user_projects/{user_id}?token={token}
+
 
* {user_id} - ID пользователя в PODS
+
https://yourdomain.printondemandsolution.ru/api/user_projects?userid={user_id}&podsid={pods_user_id}&token={token}
* {token} - контрольная сумма, считается как md5 от конкатенации {user_id} и секретного ключа
+
 
 +
либо
 +
 
 +
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, содержащего массив проектов со следующими полями:
 
Результат вовзвращается в виде JSON, содержащего массив проектов со следующими полями:
Строка 96: Строка 119:
 
* created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС
 
* 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 от конкатенации секретного ключа и идентификатора проекта
 +
<pre>md5( project_id + sekret) </pre>
 +
 +
Ответ:
 +
* Идентификатор созданного проекта при успехе
 +
или
 +
* error - сообщение об ошибке (если есть)
 +
 +
=== API управления общим доступом к проекту ===
 +
 +
https://yourdomain.printondemandsolution.ru/api/share_project
 +
 +
Параметры запроса (POST/GET):
 +
 +
* project_id - ID проекта
 +
* action - "share" - открыть общий доступ, "unshare" - отключить общий доступ
 +
* token - контрольная сумма
 +
 +
Вычисление контрольной суммы:
 +
<pre>MD5 ([project_id][action][secret])</pre>
 +
 +
Возвращаемые значения:
 +
 +
* error - при ошибке
 +
* при action=share
 +
ссылка на проект для общего доступа - при успехе
 +
* при action=unshare
 +
unshared - при успехе
  
 
=== API получения списка заказов пользователя ===
 
=== API получения списка заказов пользователя ===
  
 
Для получения делается запрос по адресу
 
Для получения делается запрос по адресу
https://yourdomain.printondemandsolution.ru/api/user_orders/{user id}?token={token}
+
https://yourdomain.printondemandsolution.ru/api/user_orders?userid={user_id}&podsid={pods_user_id}&token={token}
* {user id} - ID пользователя в PODS
+
* {user_id} - ID пользователя в БД WL
* {token} - контрольная сумма, считается как md5 от конкатенации {user id} и секретного ключа
+
* {pods_user_id} - ID пользователя в БД PODS
 +
* {token} - контрольная сумма, считается как md5 от конкатенации {user_id} (либо {pods_user_id}) и секретного ключа
 +
 
 +
Передавать нужно один из параметров, либо userid, либо podsid.
  
 
Результат вовзвращается в виде JSON, содержащего массив проектов со всеми полями из проектов плюс:
 
Результат вовзвращается в виде JSON, содержащего массив проектов со всеми полями из проектов плюс:
Строка 123: Строка 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 - не удалять проект, отмеченный к удалению (см. [[Управление хранилищем]])
 +
  
 
Параметры запроса:
 
Параметры запроса:
Строка 128: Строка 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) - для удаления
 
  
 
Ответ:
 
Ответ:
Строка 138: Строка 223:
 
* error - сообщение об ошибке (если есть)
 
* error - сообщение об ошибке (если есть)
  
 +
=== API управления блокировкой проекта ===
 +
 +
* https://yourdomain.printondemandsolution.ru/api/project_locker
 +
 +
Параметры запроса (POST DATA):
 +
* project_id - ID проекта
 +
* action - "lock" - блокировать проект, "unlock" - снять блокировку с проекта, "status" - получить текущий статус блокировки проекта
 +
* token - контрольная сумма
 +
 +
Вычисление контрольной суммы:
 +
<pre>MD5 ([project_id][action][secret])</pre>
 +
 +
 +
Возвращаемые значения:
 +
 +
* error - при ошибке
 +
 +
при action=lock и action=unlock
 +
* ОК - при успехе
 +
 +
при action=status
 +
* locked - если проект заблокирован
 +
* unlocked - если проект не заблокирован
  
 
=== API получения статуса выгрузки заказа ===
 
=== API получения статуса выгрузки заказа ===
Строка 158: Строка 266:
 
** 3 - выгружено
 
** 3 - выгружено
 
** 4 - отменено
 
** 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)
 +
 +
Ответ:
 +
 +
<pre>
 +
{
 +
  pid: партнёрский ID пользователя,
 +
  pods_id: ID пользователя в PODS
 +
}
 +
</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 получения изображения-превью проекта ===
 +
 +
Метод:
 +
 +
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 или выше (необязательный параметр)
 +
 +
ответ:
 +
 +
<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
 +
 +
<pre>
 +
[
 +
// массив типов книг
 +
  {"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"},
 +
      }
 +
    ]
 +
  }
 +
]
 +
</pre>
 +
 +
==== Получение иерархии сувенирной продукции ====
 +
 +
http://yourdomain.printondemandsolution.ru/api/getSouvenirProducts
 +
 +
<pre>
 +
[
 +
  // развновидности продукта
 +
  {
 +
      "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":"Белая"
 +
                  }]
 +
 +
              }]
 +
          }]
 +
      }]
 +
}]
 +
 +
 +
</pre>
 +
 +
Подробнее о структуре иерархии сувенирной продукции в разделе вики Модуль_"Сувенирная_продукция"
 +
 +
 +
==== получение каталога продукции для ШФ ====
 +
 +
http://yourdomain.printondemandsolution.ru/api/getWideFormatProducts
 +
 +
параметры:
 +
picWidth - (необязательно) максимальная ширина изображений материалов и опций, по умолчанию передаётся в максимальном размере
 +
picHeight - (необязательно) максимальная высота изображений материалов и опций
 +
 +
<pre>
 +
{
 +
    // список материалов
 +
    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]
 +
          ]
 +
      }
 +
    ]
 +
}
 +
 +
</pre>
 +
 +
 +
==== Получения списка тематических дизайн-макетов ====
 +
 +
Выдается список тематических дизайн макетов включенных в панели управления pods. Если в панели управления pods тематический дизайн отключен, то выдан не будет.
 +
 +
http://yourdomain.printondemandsolution.ru/api/getThemeList
 +
 +
Get-параметры:
 +
 +
* type=book или souvenir-{ID}, где {ID} - id вида сувенирки. обязательное поле
 +
* width=максимальная ширина превью темы в пикселях (необязательно)
 +
* height=максимальная высота превью темы в пикселях (необязательно)
 +
 +
ответ:
 +
 +
<pre>
 +
 +
[
 +
  {
 +
    Id: 1,
 +
    Name: "Свадебная",
 +
    PreviewUrl: "URL превью темы",
 +
    Formats: [1,2,3] // для фотокниг - ID совместимых форматов
 +
    SouvenirSizes: [1,2,3] // для сувенирки - ID совместимых размеров сувенирки
 +
    Tag: "Детские, Семейные" - тэги, установленные в настройках этой темы
 +
  }
 +
]
 +
</pre>
 +
 +
==== Получения списка миниатюр изображений тематических дизайн-макетов ====
 +
http://yourdomain.printondemandsolution.ru/Book/PreviewXml/%Theme_ID%
 +
 +
* %Theme_ID% - идентификатор тематического дизайн-макета
  
 
== Уведомления (передача данных из PODS в систему партнёра ) ==
 
== Уведомления (передача данных из PODS в систему партнёра ) ==
 
URL для всех уведомлений указывается в разделе [[Настройки]] - [[Интеграция]]
 
URL для всех уведомлений указывается в разделе [[Настройки]] - [[Интеграция]]
 +
 +
Метод  POST
  
 
=== Уведомление об успешной выгрузке заказа ===
 
=== Уведомление об успешной выгрузке заказа ===
Строка 168: Строка 598:
 
;Общее для всех видов заказа
 
;Общее для всех видов заказа
  
*albumix_order_id - номер заказа в PODS
+
*albumix_order_id = номер заказа в PODS
*partner_order_id - номер заказа у партнёра
+
*partner_order_id = номер заказа у партнёра
 
*price (double) = стоимость заказа (не книги, а всего заказа с учетом скидок, т.е. сколько клиент должен заплатить)
 
*price (double) = стоимость заказа (не книги, а всего заказа с учетом скидок, т.е. сколько клиент должен заплатить)
*payment_method = способ оплаты (заказ оплачен/оплата при получении)
+
*payment_method = способ оплаты. 0 (заказ оплачен) 1 (оплата при получении)
 
*user_name = ФИО клиента
 
*user_name = ФИО клиента
 
*phone = телефон клиента
 
*phone = телефон клиента
Строка 180: Строка 610:
 
*building =  
 
*building =  
 
*appt =
 
*appt =
 +
*comment = комментарий клиента
 +
*theme_id - ID темы
 +
*discount_coupon - Код скидочного купона
 +
*printer_order_id - ID заказ в системе принтера
 +
*printer_order_number - номер заказ в системе принтера
 +
*delivery_price - передавать стоимость доставки, в расчете контрольной суммы переменная не участвует.
 +
*mobile_app - 0/1 признак оформления заказа через мобильное приложение
 +
  
 
форматы и термины адреса должны быть совместимыми с EMS-POST
 
форматы и термины адреса должны быть совместимыми с EMS-POST
Строка 262: Строка 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 (исходящие запросы))
  
 
=== Уведомление о создании/редактировании проекта ===
 
=== Уведомление о создании/редактировании проекта ===
Строка 272: Строка 723:
 
Параметры, передаваемые в API:
 
Параметры, передаваемые в API:
 
* uid - ID пользователя (партнёрский при сквозной авторизации?)
 
* uid - ID пользователя (партнёрский при сквозной авторизации?)
* pid - наш номер проекта
+
* pid - номер проекта PODs
 
* title - заголовок проекта
 
* title - заголовок проекта
 
* formatid - ID формата
 
* formatid - ID формата
Строка 278: Строка 729:
 
* sheets - число разворотов
 
* sheets - число разворотов
 
* pic_token - token для формирования URL картинки
 
* pic_token - token для формирования URL картинки
 +
* souvenir_class_id - ID вида сувенирной продукции
 +
* souvenir_product_id - ID товара
 +
* theme_id - ID темы
 
* sign - контрольная сумма
 
* sign - контрольная сумма
 +
  
 
Контрольная сумма считается как md5 от конкатенации всех параметров и секретного ключа ("Секретный ключ API (исходящие запросы)")
 
Контрольная сумма считается как md5 от конкатенации всех параметров и секретного ключа ("Секретный ключ API (исходящие запросы)")
Строка 309: Строка 764:
  
 
Кроме того в настройках WL можно укзазать URL, на который следует перебрасывать пользователя после нажатия кнопки "сохранить и выйти". Необходимо учесть, что конструктор может находится в IFRAME, при этом перенаправление должно происходить на уровне всей странице.
 
Кроме того в настройках WL можно укзазать URL, на который следует перебрасывать пользователя после нажатия кнопки "сохранить и выйти". Необходимо учесть, что конструктор может находится в IFRAME, при этом перенаправление должно происходить на уровне всей странице.
 
  
 
== Внешняя авторизация ==
 
== Внешняя авторизация ==
Строка 325: Строка 779:
  
 
=== Сквозная авторизация ===
 
=== Сквозная авторизация ===
 +
 +
'''Внимание!
 +
Для корректной работы сквозной авторизации в браузерах на основе Chromium (Chrome, Opera, Yandex, new EDGE etc...) необходимо установить атрибуты cookies  SameSite=None; Secure;
 +
'''
 +
  
 
Для проверки авторизации на площадке партнёра осуществляется JSONP-запрос на площадку партнёра по ссылке, указанной в "URL API сквозной авторизации" в системе администрирования. В ответ должен вернуться корректный Javascript-код, содержащий  
 
Для проверки авторизации на площадке партнёра осуществляется JSONP-запрос на площадку партнёра по ссылке, указанной в "URL API сквозной авторизации" в системе администрирования. В ответ должен вернуться корректный Javascript-код, содержащий  
Строка 332: Строка 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 на сайте партнёра)
Строка 342: Строка 803:
 
При использовании сквозной авторизации для выхода пользователя из системы нужно убить сесссию пользователя на сайте партнёра. Для этого в системе администрирования указывается URL для кнопки "Выход" на сайте WL. При нажатии "Выход" пользователь переходит на указанный URL, скрипт на сайте партнёра убивает сессию пользователя. Пример скрипта logout.php
 
При использовании сквозной авторизации для выхода пользователя из системы нужно убить сесссию пользователя на сайте партнёра. Для этого в системе администрирования указывается URL для кнопки "Выход" на сайте WL. При нажатии "Выход" пользователь переходит на указанный URL, скрипт на сайте партнёра убивает сессию пользователя. Пример скрипта logout.php
  
=== Iframe-авторизация ===
+
=== IFrame-авторизация ===
 +
 
 +
Прямая или iframe авторизация.
  
Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "back", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET):
+
Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "returnUrl", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET):
 
* id
 
* id
 
* name
 
* name
 
* email
 
* email
 +
* pods_id (необязательно)
 
* hash - вычисляется также как при сквозной авторизации
 
* hash - вычисляется также как при сквозной авторизации
  
 
<pre>
 
<pre>
 
$redirectUrl = sprintf("%s?id=%d&name=%s&email=%s&hash=%s", $_GET['back'], $_SESSION['user_id'], urlencode($_SESSION['user_name']),  urlencode($_SESSION['user_email']),
 
$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));
+
        md5($_SESSION['user_id'].$_SESSION['user_name'].$_SESSION['pods_id'].$sekret));
 
header('Location: '. $redirectUrl);
 
header('Location: '. $redirectUrl);
 
</pre>
 
</pre>
  
Пример формы IFrame-авторизации в auth.rar, файл iframe.php
+
=== Примеры кода ===
 +
 
 +
==== IFrame.php ====
 +
 
 +
<nowiki>
 +
<?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
 +
}
 +
</nowiki>
 +
 
 +
==== Logout.php ====
 +
 
 +
<nowiki>
 +
<?php
 +
session_start();
 +
 
 +
unset($_SESSION['user_id']);
 +
unset($_SESSION['user_name']);
 +
 +
header('Location: '.$_SERVER['HTTP_REFERER']);
 +
</nowiki>
 +
 
 +
==== Pass-through.php ====
 +
 
 +
<nowiki>
 +
 
 +
<?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()";
 +
}
 +
 
 +
</nowiki>
 +
 
 +
==== Pass-through-form.php ====
 +
 
 +
<nowiki>
 +
<?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
 +
}
 +
 
 +
 
 +
</nowiki>
 +
 
  
 
[[Файл:Users.jpg]]
 
[[Файл:Users.jpg]]
Строка 367: Строка 941:
  
 
*uid - ID пользователя (партнёрский при сквозной авторизации)
 
*uid - ID пользователя (партнёрский при сквозной авторизации)
*pid - наш номер проекта
+
*pid - номер проекта PODs
 
*ppid - ID проекта у партнёра, если есть
 
*ppid - ID проекта у партнёра, если есть
 
*title - заголовок проекта
 
*title - заголовок проекта
 +
*quantity - количество экземпляров (количество переменных блоков в проекте)
 
*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 картинки
*sign - контрольная сумма, считается как md5 от конкатенации всех параметров и секретного ключа (Секретный ключ API (исходящие запросы))
+
*theme_id - ID темы
 +
*souvenir_class_id - ID вида сувенирной продукции
 +
*souvenir_product_id - ID товара
 +
*paper_id - идентификатор вида бумаги фотокниг, указанный при входе в конструктор
 +
*sign - контрольная сумма, считается как md5 от конкатенации некоторых параметров и секретного ключа (Секретный ключ API (исходящие запросы))
 +
*type - тип продукта, - book, photo, wideformat, souvenir
 +
*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-параметры для управления входом в конструкторы ==
 +
 +
=== Фотокниги ===
 
;Для входа в конструктор фотокниг используется ссылка:
 
;Для входа в конструктор фотокниг используется ссылка:
  
* https://yourdomain.printondemandsolution.ru/books/create/[ID_темы]/[ID_формата]/[ID_обложки][?sheetCount=100]
+
* https://yourdomain.printondemandsolution.ru/books/create/[ID_темы]/[ID_формата]/[ID_обложки][?SheetCount=100][&PaperId=123][&activeTab=Templates]
  
  
 
* [ID_темы] - 0, если проект создается без тематического макета
 
* [ID_темы] - 0, если проект создается без тематического макета
 
* [ID_обложки] - не обязательный параметр
 
* [ID_обложки] - не обязательный параметр
* sheetCount - количество разворотов в создаваемой книге, должен находиться в диапазоне минимального/максимального количества разворотов, разрешенных для данного формата. Эти параметры задаются в разделе [[Настройки]] - [[Продукты]]
+
 
 +
 
 +
Необязательные 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 на внешнее изображение текстуры обложки
 +
 
 +
=== Сувениры ===
  
 
;Для входа в конструктор сувенирной продукции используется ссылка
 
;Для входа в конструктор сувенирной продукции используется ссылка
  
*http://yourdomain.printondemandsolution.ru/souvenir/create/[разновидность продукта]/[ID продукта]/[ID темы]
 
  
  
* [ID продукта] и [ID темы] не обзательно
+
* http://ваш_домен.printondemandsolution.ru/souvenir/create/[идентификатор_вида_сувенирного_продукта]/[идентификатор_продукта]/[идентификатор_темы]?[activeTab=Templates]
 +
 
 +
* [ID_продукта] и [ID_темы] не обязательные параметры
 +
 
 +
Get-параметры
 +
 
 +
* activeTab - передается вкладка репозитория, которую нужно открыть по-умолчанию:
 +
** Templates - Шаблоны
 +
** Photos - Фото
 +
** 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]&[multi=true|id]
 +
 
 +
GET-параметры необязательны
 +
 
 +
* size - размер печати, в формате ШxВ - ширина и высота в сантиметрах, например "20х30". по умолчанию подбирается оптимальный размер
 +
* materialID - ID выбранного материала печати. по умолчанию выбирается первый в списке материал.
 +
* uploader - позволяет сразу открыть окно загрузчика файлов. если указано "photo", открывается на вкладке загрузки фото с диска, "picture" - выбор картины
 +
* options - набор предустановленных опций. можно указать несколько ID опций через запятую
 +
* multi - открытие с режимом модульной картины по-умолчанию. может быть передано значение "true" или ID конкретной модульной картины
 +
* showMaterialIds - отображать в интерфейсе только указанные ID материалов
 +
* showOptionIds - отображать в интерфейсе только указанные ID операций
 +
* hideIncompatible - скрывать несовместимые с выбранными операции - "true"
  
 
== Витрина тематических макетов ==
 
== Витрина тематических макетов ==
Строка 408: Строка 1056:
  
  
* дополнительные необязательные GET-параметры:
+
дополнительные необязательные GET-параметры:
** bookFormatId - ID формата  
+
* bookFormatID - ID формата  
** coverId - ID обложки
+
* coverID - ID обложки
 +
* sheetcount - кол-во разворотов
 +
* preview - ID темы. При переходе открывается превью заданной темы.
 +
* booktypeID=0 - попадаем на список всех видов и форматов, далее выбор формат-обложка, попадает в список тем для данного формата, и далее редактор
 +
* booktypeID=1 - попадаем на список всех видов и форматов, но с установленным фокусом выбора на вид книг id=1

Текущая версия на 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