API — различия между версиями
Wikiadmin (обсуждение | вклад) |
Wikiadmin (обсуждение | вклад) (→Получения списка тематических дизайн-макетов) |
||
(не показана одна промежуточная версия этого же участника) | |||
Строка 1: | Строка 1: | ||
− | == API создания/изменения заказа == | + | == Основной функционал API == |
+ | |||
+ | === API создания/изменения заказа === | ||
Для изменения заказа необходимо сделать POST-запрос по адресу: | Для изменения заказа необходимо сделать POST-запрос по адресу: | ||
Строка 7: | Строка 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 - принят (по умолчанию); | ||
Строка 17: | Строка 20: | ||
* count (optional) - Количество продукции, если не указано, считается = 1 | * count (optional) - Количество продукции, если не указано, считается = 1 | ||
* project_id (required, если new) - ID проекта в PODS | * project_id (required, если new) - ID проекта в PODS | ||
− | * paper_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 | + | * stamp (optional) - метка времени в формате Unix timestamp |
+ | * comment (optional) - комментарий к заказу | ||
+ | * printmatic (optional) - цветокоррекция 1(вкл) 0(выкл). Если не задано, по умолчанию передается 1. Опция для совместимости с Avantnet. | ||
+ | * product_type - тип продукта. необязательный. по умолчанию - book | ||
+ | ** book | ||
+ | ** photo | ||
+ | ** wideformat | ||
+ | ** souvenir | ||
* token - контрольная сумма | * token - контрольная сумма | ||
Строка 29: | Строка 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> | ||
Строка 57: | Строка 67: | ||
Используется кодировка указанная в панели управления, в разделе [[Настройки]] - [[Интеграция]] | Используется кодировка указанная в панели управления, в разделе [[Настройки]] - [[Интеграция]] | ||
− | == API отправки заказа в печать == | + | === API отправки заказа в печать === |
* https://yourdomain.printondemandsolution.ru/api/send_to_print | * https://yourdomain.printondemandsolution.ru/api/send_to_print | ||
Параметры запроса (POST DATA): | Параметры запроса (POST DATA): | ||
− | * order_id - ID заказа | + | * order_id - ID заказа PODS |
− | * ftp-resend - "0" - | + | * ftp-resend - "0" - отправить в печать, "1" - перезалить |
* token - контрольная сумма | * token - контрольная сумма | ||
Строка 71: | Строка 81: | ||
Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа. | Отправка заказа отличается от перезаливки только одим: в случае перезаливки (ftp-resend=1) не будет вызван API уведомления о выгрузке заказа. | ||
− | + | === API получения списка проектов пользователя === | |
− | == API получения списка проектов пользователя == | + | |
Для получения делается запрос по адресу | Для получения делается запрос по адресу | ||
− | + | ||
− | * {user_id} - ID пользователя в PODS | + | https://yourdomain.printondemandsolution.ru/api/user_projects?userid={user_id}&podsid={pods_user_id}&token={token} |
− | * {token} - контрольная сумма, считается как md5 от конкатенации { | + | |
+ | либо | ||
+ | |||
+ | 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, содержащего массив проектов со следующими полями: | ||
Строка 94: | Строка 119: | ||
* created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС | * created - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС | ||
* edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС | * edited - дата и время создания, в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС | ||
+ | * is_show_button_do_not_delete - включена или нет кнопка "Не удалять этот проект" (см. раздел [[Управление_хранилищем]]) | ||
+ | * preparing_to_delete_date - дата планируемого удаления проекта (см. раздел [[Управление_хранилищем]]) | ||
+ | * project_parts - все продукты, входящие в проект. массив объектов с полями: | ||
+ | *** type - тип продукта | ||
+ | *** id - ID продукта | ||
+ | *** count - количество | ||
+ | *** name - название продукта | ||
+ | *** price - цена | ||
− | == API получения списка заказов пользователя == | + | === 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 получения списка заказов пользователя === | ||
Для получения делается запрос по адресу | Для получения делается запрос по адресу | ||
− | https://yourdomain.printondemandsolution.ru/api/user_orders | + | https://yourdomain.printondemandsolution.ru/api/user_orders?userid={user_id}&podsid={pods_user_id}&token={token} |
− | * { | + | * {user_id} - ID пользователя в БД WL |
− | * {token} - контрольная сумма, считается как md5 от конкатенации { | + | * {pods_user_id} - ID пользователя в БД PODS |
+ | * {token} - контрольная сумма, считается как md5 от конкатенации {user_id} (либо {pods_user_id}) и секретного ключа | ||
+ | |||
+ | Передавать нужно один из параметров, либо userid, либо podsid. | ||
Результат вовзвращается в виде JSON, содержащего массив проектов со всеми полями из проектов плюс: | Результат вовзвращается в виде JSON, содержащего массив проектов со всеми полями из проектов плюс: | ||
Строка 116: | Строка 192: | ||
* status - статус заказа (как в API создания/изменения заказа) | * status - статус заказа (как в API создания/изменения заказа) | ||
− | == API удаления/переименования проектов == | + | === API удаления/переименования проектов === |
Для удаления/переименования проекта необходимо сделать POST-запрос по адресу: | Для удаления/переименования проекта необходимо сделать POST-запрос по адресу: | ||
* 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 - не удалять проект, отмеченный к удалению (см. [[Управление хранилищем]]) | ||
+ | |||
Параметры запроса: | Параметры запроса: | ||
Строка 126: | Строка 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) - для установки новой даты удаления проекта | ||
− | |||
− | |||
− | |||
Ответ: | Ответ: | ||
Строка 136: | Строка 223: | ||
* error - сообщение об ошибке (если есть) | * error - сообщение об ошибке (если есть) | ||
+ | === API управления блокировкой проекта === | ||
− | == 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 получения статуса выгрузки заказа === | ||
* https://yourdomain.printondemandsolution.ru/api/get_order_upload_status | * https://yourdomain.printondemandsolution.ru/api/get_order_upload_status | ||
Строка 156: | Строка 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 | ||
=== Уведомление об успешной выгрузке заказа === | === Уведомление об успешной выгрузке заказа === | ||
Строка 164: | Строка 596: | ||
Не вызывается в случае перезаливки заказа. Параметры передаваемые в API: | Не вызывается в случае перезаливки заказа. Параметры передаваемые в 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 | форматы и термины адреса должны быть совместимыми с EMS-POST | ||
+ | |||
*delivery_provider = 0 (партнер), 1 (EMS), 2 (еще кто-то) ... | *delivery_provider = 0 (партнер), 1 (EMS), 2 (еще кто-то) ... | ||
− | *sign = контрольная сумма. считается как md5 от конкатенации некоторых параметров и секретного ключа. | + | *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 картинки | ||
− | + | Набор полей, участвующих в рассчёте контрольной суммы: | |
+ | <pre>"albumix_order_id", "stamp", "action_id", "qty", "price", "price_internal", "delivery_point", "delivery_address", "delivery_provider", "payment_method"</pre> | ||
− | + | ;Фотопечать | |
− | + | *order_detail - строка описания заказа | |
− | ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ\r\n | + | |
+ | Формат строки | ||
+ | |||
+ | <pre>ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ\r\n | ||
.... | .... | ||
− | ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ | + | ТИППРОДУКТА\tТИПБУМАГИ\tФОРМАТ\tКОЛВО\tЦЕНАЕДИНИЦЫ</pre> |
− | \t - табуляция | + | *\t - табуляция |
− | \r\n - возврат каретки + новая стока | + | *\r\n - возврат каретки + новая стока |
+ | |||
+ | |||
+ | Примеры | ||
+ | |||
− | |||
100 фото на глянце 10х15 | 100 фото на глянце 10х15 | ||
<pre>Фотопечать\tГлянцевая\t10x15\t100\t3.50</pre> | <pre>Фотопечать\tГлянцевая\t10x15\t100\t3.50</pre> | ||
Строка 225: | Строка 672: | ||
набор полей, участвующих в рассчёте контрольной суммы: | набор полей, участвующих в рассчёте контрольной суммы: | ||
− | + | <pre>"albumix_order_id", "stamp", "user_name", "delivery_point", "delivery_address", "delivery_provider", "payment_method"</pre> | |
− | + | ;Возвращается от партнера | |
В ответ на уведомление о выгрузке заказа партнёр имеет возможность передать присвоенный ID заказа. В этом случае ответ должен быть в виде: | В ответ на уведомление о выгрузке заказа партнёр имеет возможность передать присвоенный ID заказа. В этом случае ответ должен быть в виде: | ||
Строка 241: | Строка 688: | ||
Если не требуется присваивать партнёрский ID после выгрузки заказа - можно вернуть просто строку "OK" | Если не требуется присваивать партнёрский 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 (исходящие запросы)") | ||
+ | |||
+ | <pre> | ||
+ | $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'; | ||
+ | } | ||
+ | </pre> | ||
+ | |||
+ | В ответ возвращается | ||
+ | * ID проекта у партнёра | ||
+ | <pre> | ||
+ | id=3456 | ||
+ | </pre> | ||
+ | * Сообщение об ошибке | ||
+ | <pre> | ||
+ | CHECKSIGNFAILED | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | Кроме того в настройках 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 пользователя и имя пользователя, если пользователь авторизован | ||
+ | <pre> | ||
+ | window.api_externalAuth({id:157,name:'Иванов Иван',email:'email@mail.ru','hash':'hashcode'}) | ||
+ | </pre> | ||
+ | дополнительно может быть указан параметр pods_id - ID пользователя в системе PODS | ||
+ | |||
+ | |||
+ | hash вычисляется как md5 от конкатенации id, name, pods_id (если есть) и секретного ключа сквозной авторизации, который задаётся в системе администрирования | ||
+ | * вызов функции api_externalNoauth параметрами без параметров, если пользователь не авторизован (для отслеживания logout на сайте партнёра) | ||
+ | <pre> | ||
+ | window.api_externalNoauth() | ||
+ | </pre> | ||
+ | |||
+ | Пример скрипта API сквозной авторизации в auth.rar, файл pass-through.php | ||
+ | |||
+ | При использовании сквозной авторизации для выхода пользователя из системы нужно убить сесссию пользователя на сайте партнёра. Для этого в системе администрирования указывается URL для кнопки "Выход" на сайте WL. При нажатии "Выход" пользователь переходит на указанный URL, скрипт на сайте партнёра убивает сессию пользователя. Пример скрипта logout.php | ||
+ | |||
+ | === IFrame-авторизация === | ||
+ | |||
+ | Прямая или iframe авторизация. | ||
+ | |||
+ | Партнёр указывает ссылку на форму авторизации, которая отображается в IFRAME внутри лайтбокса авторизации. К ссылке добавляется GET-параметр "returnUrl", который содержит URL, на который необходимо сделать редирект после завершения авторизации со следующими параметрами (через GET): | ||
+ | * id | ||
+ | * name | ||
+ | * email | ||
+ | * pods_id (необязательно) | ||
+ | * hash - вычисляется также как при сквозной авторизации | ||
+ | |||
+ | <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']), | ||
+ | md5($_SESSION['user_id'].$_SESSION['user_name'].$_SESSION['pods_id'].$sekret)); | ||
+ | header('Location: '. $redirectUrl); | ||
+ | </pre> | ||
+ | |||
+ | === Примеры кода === | ||
+ | |||
+ | ==== 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]] | ||
+ | ---- | ||
+ | [[Файл: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 - цена | ||
+ | |||
+ | |||
+ | |||
+ | <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][&PaperId=123][&activeTab=Templates] | ||
+ | |||
+ | |||
+ | * [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 на внешнее изображение текстуры обложки | ||
+ | |||
+ | === Сувениры === | ||
+ | |||
+ | ;Для входа в конструктор сувенирной продукции используется ссылка | ||
+ | |||
+ | |||
+ | |||
+ | * 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" | ||
+ | |||
+ | == Витрина тематических макетов == | ||
+ | |||
+ | ссылка для перехода на витрину тематических макетов книг | ||
+ | |||
+ | *http://yourdomain.printondemandsolution.ru/books/create | ||
+ | |||
+ | Если при вызове витрины передаются GET-параметры, то: | ||
+ | |||
+ | *- ссылки с темы ведут не на страницу выбора темы, а сразу в конструктор; | ||
+ | *- отображаются только те темы, в которых есть макеты для заданного формата. | ||
+ | |||
+ | |||
+ | дополнительные необязательные GET-параметры: | ||
+ | * bookFormatID - ID формата | ||
+ | * coverID - ID обложки | ||
+ | * sheetcount - кол-во разворотов | ||
+ | * preview - ID темы. При переходе открывается превью заданной темы. | ||
+ | * booktypeID=0 - попадаем на список всех видов и форматов, далее выбор формат-обложка, попадает в список тем для данного формата, и далее редактор | ||
+ | * booktypeID=1 - попадаем на список всех видов и форматов, но с установленным фокусом выбора на вид книг id=1 |
Текущая версия на 17:10, 16 августа 2021
Содержание
- 1 Основной функционал API
- 1.1 API создания/изменения заказа
- 1.2 API отправки заказа в печать
- 1.3 API получения списка проектов пользователя
- 1.4 API создания копии проекта
- 1.5 API управления общим доступом к проекту
- 1.6 API получения списка заказов пользователя
- 1.7 API удаления/переименования проектов
- 1.8 API управления блокировкой проекта
- 1.9 API получения статуса выгрузки заказа
- 1.10 API сверки идентификаторов пользователя
- 1.11 API изменения данных профиля пользователя
- 1.12 API изменения пароля пользователя
- 1.13 API получения изображения-превью проекта
- 1.14 API привязка пользователя к проекту
- 1.15 API получения каталога продукции
- 2 Уведомления (передача данных из PODS в систему партнёра )
- 3 Внешняя авторизация
- 4 Оформление заказа на сайте партнера
- 5 Get-параметры для управления входом в конструкторы
- 6 Витрина тематических макетов
Основной функционал API
API создания/изменения заказа
Для изменения заказа необходимо сделать POST-запрос по адресу:
- https://yourdomain.printondemandsolution.ru/api/new - создание заказа
- https://yourdomain.printondemandsolution.ru/api/edit - изменение заказа
- https://yourdomain.printondemandsolution.ru/api/set_status - изменение статуса заказа (сохранено для совместимости с Avantnet)
Параметры запроса (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/{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-запрос по адресу:
- https://yourdomain.printondemandsolution.ru/api/edit_project_name - переименование проекта
- https://yourdomain.printondemandsolution.ru/api/delete_project - удаление проекта
- https://yourdomain.printondemandsolution.ru/api/do_not_delete_project - не удалять проект, отмеченный к удалению (см. Управление хранилищем)
Параметры запроса:
- 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
- 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 }
Оформление заказа на сайте партнера
В системе администрирования в разделе Настройки - Интеграция можно указать 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-параметры для управления входом в конструкторы
Фотокниги
- Для входа в конструктор фотокниг используется ссылка
- https://yourdomain.printondemandsolution.ru/books/create/[ID_темы]/[ID_формата]/[ID_обложки][?SheetCount=100][&PaperId=123][&activeTab=Templates]
- [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 на внешнее изображение текстуры обложки
Сувениры
- Для входа в конструктор сувенирной продукции используется ссылка
- http://ваш_домен.printondemandsolution.ru/souvenir/create/[идентификатор_вида_сувенирного_продукта]/[идентификатор_продукта]/[идентификатор_темы]?[activeTab=Templates]
- [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