Имя: Пароль:
1C
 
Как распарсить xml-файл
,
0 АртемП
 
05.03.21
13:44
Подключаемся к системе быстрых платежей Сбера - P2P. Сбер дал утилиту обмена и пример связи ее с 1С.
Результат пишется в лог файл в виде xml.
Как его распарсить ?
Можите подсказать примером ?
Вот тестовый образец лога, который надо распарсить.

========= ПСА4/01.02.2021 0:00:00 || e-com
*** 0 | 04.03.2021 11:58:02 | registerOrder
<<< запрос
<order merchantOrderNumber='202103-04-115802-8414#' description='Иванов, 2000;ПСА4, 01.02.2021 0:00:00;Тест' amount='100' currency='643' language='' sessionTimeoutSecs='600' bindingId='31866fdf-059b-7f7c-95ac-30385e480309'><returnUrl>https://ya.ru</returnUrl><params name='mark' value='202103-04-115802-8414'/> <features><feature>FORCE_TDS</feature></features></order>
>>> ответ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:registerOrderResponse xmlns:ns1="http://engine.paymentgate.ru/webservices/merchant"><return orderId="2203c757-937a-7617-a8f0-30135e480309" errorCode="0" errorMessage="Успешно"><formUrl>https://3dsec.sberbank.ru/payment/merchants/p2p_aft_oct/payment_binding_ru.html?mdOrder=2203c757-937a-7617-a8f0-30135e480309</formUrl></return></ns1:registerOrderResponse></soap:Body></soap:Envelope>;
*** 1 | 04.03.2021 11:58:04 | paymentOrderBinding
<<< запрос
<order mdOrder='2203c757-937a-7617-a8f0-30135e480309' bindingId='31866fdf-059b-7f7c-95ac-30385e480309'></order>
>>> ответ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:paymentOrderBindingResponse xmlns:ns1="http://engine.paymentgate.ru/webservices/merchant"><return info="Ваш платёж обработан, происходит переадресация..." redirect="https://3dsec.sberbank.ru/payment/rest/finish3ds.do?lang=ru"; acsUrl="https://web.rbsuat.com/acs/auth/start.do"; paReq="eJxVUl1z4jAM/CtM3oMd40BghDtt6QczF+CulLnpS8c4akivcajjNDS//pwA197brqRZSSvBxSF/632gKbNCT72gT70ealUkmU6n3uP61o+8CwHrnUGcPaCqDAqIsSxlir0smXpScTXAsfTHQcR8vuXcl5JGvlRIw2QYjl4U8wSsLn/hu4BTI+H69BmQM3WKRu2ktgKker+aLwRnoyGlQE4UcjTzmQjYgIfDUQTkyEHLHIXF0j5vClNobHb+xhYmRwuky4EqKm3NpxjyAZAzgcq8iZ21+wkhdV33yy2ardR/+qYC0uaAfE20qlpUOq1Dloi4SetFE9P49YbF6598MUs/l7PHYLmeT4G0FZBIi4JRFtAB5T0aTcJoQkMgXRxk3g4hgm67I4Z92+LyW+J7AJzpxt3kvMOZAR72bmVX4Zz8h4F8zXt93/qprHPq+qP50cRj+3Snb+9X8mG8vPr9uqlTq+86l7uiVjFz9jAeHCVbAqSVIacDktPtHfrvJ/4CVFLBGA==" errorCode="0"/></ns1:paymentOrderBindingResponse></soap:Body></soap:Envelope>
*** 2 | 04.03.2021 13:03:25 | getOrderStatusExtended
<<< запрос
<order orderId='2203c757-937a-7617-a8f0-30135e480309' language='en'><merchantOrderNumber>202103-04-115802-8414#</merchantOrderNumber></order>
>>> ответ
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:getOrderStatusExtendedResponse xmlns:ns1="http://engine.paymentgate.ru/webservices/merchant"><return orderNumber="202103-04-115802-8414#" orderStatus="6" actionCode="-2007" actionCodeDescription="Payment declined. Please, contact with merchant." amount="100" currency="643" date="2021-03-04T11:58:03.770+03:00" orderDescription="Иванов, 2000;ПСА4, 01.02.2021 0:00:00;Тест" ip="109.195.53.209" errorCode="0" errorMessage="Success"><merchantOrderParams name="mark" value="202103-04-115802-8414"/><attributes name="mdOrder" value="2203c757-937a-7617-a8f0-30135e480309"/><cardAuthInfo maskedPan="411111**1111" expiration="202412" cardholderName="CARD HOLDER"/><bindingInfo clientId="test_Restoran-Nov" bindingId="31866fdf-059b-7f7c-95ac-30385e480309"/><terminalId>12345678</terminalId><paymentAmountInfo paymentState="DECLINED" approvedAmount="0" depositedAmount="0" refundedAmount="0"/><bankInfo bankName="Alfa-Bank" bankCountryCode="RU" bankCountryName="Russian Federation"/></return></ns1:getOrderStatusExtendedResponse></soap:Body></soap:Envelope>
1 mikecool
 
05.03.21
13:45
ЧтениеXML
2 Kassern
 
05.03.21
13:46
обычная xml
А если вам еще сбер даст XML схему то вообще красота)
3 PLUT
 
05.03.21
13:57
(0) скорми фабрике XDTO
4 АртемП
 
05.03.21
13:57
(1)а где посмотреть что то на эту тему.
5 АртемП
 
05.03.21
13:57
(3)Это как ?
6 АртемП
 
05.03.21
13:59
Есть ли пример
7 Timon1405
 
05.03.21
14:00
8 АртемП
 
05.03.21
14:35
спасибо!

А подскажите - по приведенной структуре это точно xml bkb может json ?
Просто не пойму, где начинается заголовок
9 АртемП
 
05.03.21
14:35
Кто подскажет в пример (0) где начинается заголовок xml
10 Kassern
 
05.03.21
15:24
(9) поставь себе Notepad++ и открой свой текст в нем. Выбери синтаксис XML и увидишь куски xml запросов и ответов
11 Fedor-1971
 
05.03.21
15:31
(9) нет там заголовка, если хочешь, то приклей сам

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">;
    <soap:Body>
        <ns1:registerOrderResponse xmlns:ns1="http://engine.paymentgate.ru/webservices/merchant">;
            <return orderId="2203c757-937a-7617-a8f0-30135e480309" errorCode="0" errorMessage="Успешно">
                <formUrl>
                    https://3dsec.sberbank.ru/payment/merchants/p2p_aft_oct/payment_binding_ru.html?mdOrder=2203c757-937a-7617-a8f0-30135e480309
                </formUrl>
            </return>
        </ns1:registerOrderResponse>
    </soap:Body>
</soap:Envelope>;
12 Fedor-1971
 
05.03.21
15:40
11+ http://engine.paymentgate.ru/webservices/merchant  - тут логин в АльфаБанк, проверь на всякий случай
13 ДенисЧ
 
05.03.21
15:53
(8) Что не json - 292%
14 АртемП
 
05.03.21
17:38
(10) у меня Far стоит.
там вычленяет и показывает куски кода.

Уже голову сломал.
Как я понял - это текстовый фай, в котором через куски разделителей пишутся логи в виде кусков xml.
т.е. надо почленить лог на транзакции и дальше вычленять эти куски xml
15 NorthWind
 
05.03.21
19:23
(0) это не в виде XML. Это текстовый файл с фрагментами XML. А что конкретно надо из него достать? Вообще задача довольно мерзкая - если нужно разбирать содержимое XML, то придется сначала выдирать эти куски, потом, возможно, присобачивать к ним заголовки и загонять в какой-нибудь XML-парсер. Целое дело. Я бы сильно подумал прежде чем таким заниматься, нет ли более вменяемых способов получить что нужно.
16 АртемП
 
05.03.21
23:57
(15)вот! именно об этом я и написал в (14)
17 Asmody
 
06.03.21
01:01
Если загуглить soap:Envelope, многое станет яснее.
18 Кирпич
 
06.03.21
10:44
чо тут думать. открыл файл. перешел куда надо. прочитал до первого разделителя. читай до следующего разделителя и парси XML
В 1С же есть потоки, ЧтениеДанных и всё такое
http://catalog.mista.ru/1c/articles/1130284/
19 ДедМорроз
 
06.03.21
12:09
Это вообще не классический xml,так как нету заголовка,это блочный формат на подобии xmpp протокола,где каждое событие заворачивается в отдельный таг.
ЧтениеXML без дополнительной подготовки его не съест.
20 ДедМорроз
 
06.03.21
12:12
Самое простое-читаем как текст,если нашли слово запрос с тремя галочками,то далее до слова ответ идут данные запроса,которые в текст и уже скормить ЧтениеXML как строку,а потом также ответ до запроса.
Ну и проверять,что нет строки с тремя галочками - она внутри XML файла быть не может(если не вспоминать,что есть CDATA и комментарий)
Программист всегда исправляет последнюю ошибку.