Найти в Дзене

Быстрый тест обмена с 1С не выходя из PhpStorm - импорт каталога, получение заказов

Оглавление

Чтобы протестировать загрузку каталога или обмен заказами воспользуемся встроенным в PhpStorm - HTTP Client

Подробнее пр этот инструмент можно почитать в документации - https://www.jetbrains.com/help/phpstorm/http-client-in-product-code-editor.html

Рассмотрим:

1. Загрузку каталога

2. Получение заказов

1. Загрузка каталога

Добавляем новый файл с запросами, можно сделать как через контекстное меню, так и сочетанием клавиш - Ctrl + Shift + Alt + Insert. В всплывающем окне выбираем HTTP Request.

В созданном файле (создается "Scratch File" в PhpStorm) вставляем следующий код.

dzen/test_obmen_1c_from_phpstrom/bitrix_exchange_catalog.http at main · solopovsergey/dzen

### auth
// @no-cookie-jar
// @no-log
GET http://localhost/bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth
Authorization: Basic 1cobmen 1cobmenPassword

> {%
// client.log(JSON.stringify(response));

var rows = response.body.split(/\n/);
client.test('Авторизация', function(){
client.assert(rows[0] === 'success', "Авторизация не прошла");
});

if(rows[0] === 'success')
{
client.global.set("1C_REQUEST_COOKIE_PHP_SESSID", rows[2]);
client.global.set("1C_REQUEST_SESSID_VARIABLE", rows[3].split('=').pop());
}
%}

### init
// @no-log
GET http://localhost/bitrix/admin/1c_exchange.php?type=catalog&mode=init&sessid={{1C_REQUEST_SESSID_VARIABLE}}&version=3.1
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}


### file
// @no-log
POST http://localhost/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=pack.zip&sessid={{1C_REQUEST_SESSID_VARIABLE}}
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}

< /path_to_archive/rests.zip

### import
// @no-log
POST http://localhost/bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=rests.xml&sessid={{1C_REQUEST_SESSID_VARIABLE}}
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}

###

Этот пример для локального теста. Аналогично можно отправлять запросы на рабочий сайта. Для это можно переключаться между окружениями из которых брать адреса и данные для доступа - https://www.jetbrains.com/help/phpstorm/exploring-http-syntax.html#environment-variables

#auth

В блоке #auth происходит авторизация и сохранения авторизационных данных для последующих запросов. Для авторизации используются данные пользователя с правами на обмен. В примере предполагается что для этого пользователя:

  • логин - 1cobmen
  • пароль - 1cobmenPassword

Указывать нужно свои значения.

# file

В блоке #file передается архив с данными. Архив должен быть предварительно подготовлен. Указывается абсолютный путь до него на фашем компьютере. В пример это - /path_to_archive/rests.zip. В архиве лежит файл rest.xml, которые содержат только данные по одному или нескольким товарам, чтобы обмен прошел быстро и можно было определить где и что нужно добавить, где и что не работает и так далее.

Примеры файлов есть здесь

dzen/catalog_from_1c at main · solopovsergey/dzen

#import

Блок #import передает название файла, который будет взят в архиве и обработан. Этот запрос нужно повторять множество раз, пока в результате не получите сообщение что запрос выполнен.

В данном случае обрабатываем файл rests.xml. Именно его название передается в параметрах последнего запроса - ...filename=rests.xml

Для запуска всех запросов последовательно можно воспользоваться соответствующей кнопкой.

-2

После выполнения отдельно запускаем последний запрос. В результате видимо что процесс не закончен, так как возвращается - progress

-3

Чтобы не кликать, можно кликнуть на область с результат и дальше запускать запрос сочетанием клавиш - Ctrl+Shift+F10 до тех пор, пока не закончится обмен.

-4

2. Получение заказов

Для этого тоже добавляем HTTP Request файл (создается "Scratch File" в PhpStorm) со следующим содержимым

dzen/test_obmen_1c_from_phpstrom/bitrix_exchange_sale.http at main · solopovsergey/dzen

### auth
// @no-cookie-jar
// @no-log
GET {{host}}/bitrix/admin/1c_exchange.php?type=sale&mode=checkauth
Authorization: Basic {{login}} {{password}}

> {%
// client.log(JSON.stringify(response));

var rows = response.body.split(/\n/);
client.test('Авторизация', function(){
client.assert(rows[0] === 'success', "Авторизация не прошла");
});

if(rows[0] === 'success')
{
client.global.set("1C_REQUEST_COOKIE_PHP_SESSID", rows[2]);
client.global.set("1C_REQUEST_SESSID_VARIABLE", rows[3].split('=').pop());
}
%}

### init
// @no-log
GET {{host}}/bitrix/admin/1c_exchange.php?type=sale&mode=init&sessid={{1C_REQUEST_SESSID_VARIABLE}}&version=3.1
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}


### query
GET {{host}}/bitrix/admin/1c_exchange.php?type=sale&mode=query&sessid={{1C_REQUEST_SESSID_VARIABLE}}&version=3.1
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}



### success
GET {{host}}/bitrix/admin/1c_exchange.php?type=sale&mode=success&sessid={{1C_REQUEST_SESSID_VARIABLE}}&version=3.1
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}

Также запускаем выполнение всех запросов последовательно. В результате получаем xml файл со всеми заказами.

-5

Если файл пуст, можно отметить некоторые заказы для экспорта. Выполним php код в админке. Отметим заказ 110 для экспорта.

CModule::IncludeModule('sale');

$arOrderId = array(110);

foreach ($arOrderId as $orderId) {
$arOrder = \CSaleOrder::GetList(array(), array('ID' => $orderId))->fetch();
CSaleOrder::Update($orderId, array('UPDATED_1C' => 'N'));
}

-6