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

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

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

Рассмотрим:

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

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

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

bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i.gif

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

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

### auth
// @no-cookie-jar
// @no-log
GET https://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 https://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 https://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}}

< /home/i/.config/JetBrains/PhpStorm2022.2/scratches/check_pack/rests.zip



### import
// @no-log
POST https://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, которые содержат только данные по одному или нескольким товарам, чтобы обмен прошел быстро и можно было определить где и что нужно добавить, где и что не работает и так далее.

Примеры файлов приложены

#import

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

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

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

bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i-2.png

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

bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i-3.png

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

bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i-4.png

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

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

Файл bitrix_exchange_sale.http


### auth
// @no-cookie-jar
// @no-log
GET http://localhost/bitrix/admin/1c_exchange.php?type=sale&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=sale&mode=init&sessid={{1C_REQUEST_SESSID_VARIABLE}}&version=3.1
Cookie: PHPSESSID={{1C_REQUEST_COOKIE_PHP_SESSID}}


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


Также запускаем выполнение всех запросов последовательно. В результате получаем xml файл со всеми заказами.
bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i-5.png

Если файл пуст, можно отметить некоторые заказы для экспорта. Выполним 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'));
}

bystryy-test-obmena-s-1s-ne-vykhodya-iz-phpstorm-i-6.png


Обратно к списку