До текущего момента разработчики могли использовать старый API, базировавшийся на использовании XML, часть функционала которого вообще включалась только по запросу в партнерскую поддержку.
Мы считаем, что сегодня, когда рынок требует массовых продаж готовых решений, а управление продажами требует автоматизации процесса и интеграции с CRM, нужен новый прозрачный механизм, доступный всем разработчикам решений и партнерам 1С-Битрикс.
Мы сделали такой механизм, провели закрытое бета-тестирование API и сегодня публикуем его для всех. Описание можно получить в группе
[spoiler]
Как это работает?
В карточке партнера вы можете видеть поле "Пароль для подписи данных" с секретным ключом, который применяется для вызовов партнерского REST.
Заполните его и сохраните карточку. Теперь для вызова любого метода REST вы сможете формировать ключ авторизации в виде кода MD5 от строки вида:
md5($method."|".PARTNER_ID."|".PARTNER_CODE) |
где $method – название метода, PARTNER_ID – ваш идентификатор партнера и PARTNER_CODE – тот самый секретный ключ, который вы указали в партнерской карточке.
Вот, собственно, и весь механизм. Результат вызова любого метода – это JSON-массив, который вы запросто сможете интерпретировать в своих серверных скриптах, на чем бы вы их ни разрабатывали.
Набор текущих методов REST условно можно разделить на три раздела:
- События (для авторов решений)
- Каталог решений Маркетплейс (для всех партнеров)
- Управление клиентами и купонами (для авторов решений)
function executePartnerREST($method, $params) { $queryUrl = 'https://partners.1c-bitrix.ru/rest/'; $queryData = http_build_query(array_merge($params, array( "action" => $method, "partnerId" => PARTNER_ID, "auth" => md5($method."|".PARTNER_ID."|".PARTNER_CODE) ) )); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $queryUrl, CURLOPT_POSTFIELDS => $queryData, )); $result = json_decode(curl_exec($curl), true); curl_close($curl); return $result; } |
Как видите, ничего сложного. Давайте на примерах рассмотрим некоторые возможности нового партнерского REST.
Делаем свою витрину готовых решений
Для построения своей витрины нам нужен один единственный метод marketplace.product.list, который позволяет получить отфильтрованный список решений. Выберем, в частности, готовые интернет-магазины с адаптивной версткой, которые к тому же продаются с партнерской скидкой:
$result = executePartnerREST('marketplace.product.list', array( 'filter' => array('partnerDiscount' => '1', 'isAdaptive' => 1, 'categoryId' => 14 ))); $items = $result['result']['list']; |
Метод является списочным и отдает нам не весь набор подходящих целиком, а пакет из одной “страницы” по 20 элементов по умолчанию. Следовательно, нам понадобится обращаться к этому же методу дальше, чтобы получить все данные, подставляя в каждый вызов дополнительный параметр navigation:
$pages = 1; $current_page = 1; while ($current_page < $pages) { $current_page++; $current_result = executePartnerREST('marketplace.product.list', array( 'filter' => array('partnerDiscount' => '1', 'isAdaptive' => 1, 'categoryId' => 14, 'isComposite' => 1), 'navigation' => array('page' => $current_page) )); $items = array_merge($items, $current_result['result']['list'] } |
Дальше в цикле просто формируем вывод витрины в той верстке, которая нам нужна (полный текст примера можно загрузить в архиве в конце статьи):
function displayApplication ($item) { ?> <div class= "col-sm-4 col-md-2 col-lg-2"> <div class= "thumbnail" st yle= " min-height: 310px; max-height: 310px"> <img src= " <?=$item['screenshots'][0]?> " alt= " <?=$item['name']?> " st yle= " max-width: 150px; max-height: 150px"> <div class= "caption"> <strong><?=substr($item['name'], 0, 25);?></strong>< /> <?if($item['priceRub'] != 0) echo $item['priceRub']." руб ."; else echo ' халява , сэр ' ?> </div> <?if($item['priceRub'] != 0):?> <div class= "alert alert-info"><a href= "#" class= "btn btn-primary" role= "button">Срочно купить!</a></div> <?endif;?> </div> </div> <? } |
На практике я бы рекомендовал заливать данные в торговый каталог и дальше уже использовать стандартные возможности 1С-Битрикс: Управление сайтом по управлению каталогом, оформлению заказа и т.д. А заодно не забывать про кэширование и композит в публичной части сайта.
Работа с клиентами
Не будем останавливаться на похожих методах для получения списка клиентов или купонов, но покажем прекрасные возможности, которые авторам решений дают события. Вот такой простой код позволит нам, во-первых, получить информацию о текущих зарегистрированных обработчиках событий, а во-вторых, в случае необходимости зарегистрировать обработчик события add.callback.add.coupon, который будет вызываться в случае добавления купона для решения Маркетплейс:
$result = executePartnerREST('get.callback.list', array()); echo "<pre>"; print_r($result); print_r($result['result']['list']); echo "</pre>"; if (count($result['result']['list']) == 0) { $result = executePartnerREST('add.callback.add.coupon', array('code' => 'petrov.test', 'url' => 'https://restapi.bx24.net/partner-api/add-coupon-handler.php')); echo "<pre>"; print_r($result); echo "</pre>"; } |
Если мы сейчас пойдем в партнерский кабинет в раздел Маркетплейс 1С-Битрикс и выпишем сами себе купон на модуль (в моем примере это модуль с кодом 'petrov.test'), то автоматически будет вызван обработчик по адресу 'https://restapi.bx24.net/partner-api/add-coupon-handler.php'. Предупрежу, что в настоящее время вызов происходит не в реальном времени, а с периодичностью до 30 минут, поэтому не пугайтесь, если вы сразу не увидите в логах данные о новых купонах:
add-coupon-handler Array ( [coupon] => MPX-AQTS7H5DSO-ХХХ [code] => petrov.test [isProlongation] => 0 [name] => Василий Пупкин [email] => хх@ххх.ru [partnerId] => 0 [orderId] => 0 [prolongationPeriod] => 0 [prolongationPeriodType] => [seller] => BITRIX [auth] => ххх ) |
Что дальше?
В дальнейшем мы планируем расширить партнерский REST сразу по нескольким направлениям: во-первых, добавить аналогичные методы и события для Приложений24 (в самое ближайшее время). Во-вторых, расширить перечень событий – в частности, добавить события на добавление и изменение комментария или отзыва. В-третьих, добавить в партнерский REST возможность формировать заказы на партнерские решения и продукты 1С-Битрикс для интеграции партнерского кабинета с сайтами партнеров.
А пока рекомендую скачать полные тексты примеров из архива ниже, а также
Фото:
partner-api-example.zip
(4.76 КБ)
Другими словами, это не имеет каких-либо предпосылок к изменению количества элементов в выборе REST API приложений 24? Там так и останется 50?
Нельзя указать сколько я хочу выбрать в одном запросе. Только по 20.
Array( [error] => Array ( [0] => Array ( [id] => 18102 [code] => PARTNER_NOT_EXISTS ) )
?
array(2) { ["error"]=> array(1) { [0]=> array(2) { ["id"]=> int(18102) ["code"]=> string( 18 ) "PARTNER_NOT_EXISTS" } } ["result"]=> array(0) { } }
При фильтрации по идентификатору раздела этот самый раздел необходимо передавать как массив
'edition' => array(1,3.57) //
Указываем:
define(PARTNER_ID, 'sologroupltd');
define(PARTNER_CODE, 'КЛЮЧИК');
И получаем ошибку PARTNER_NOT_EXISTS... Секретный ключ был создан больше недели назад...
Получается, нужно теперь все переписывать с использованием нового кода.
Вы можете помочь с этим вопросом? Может можно использовать один код и там, и там?