Node.js SOAP (пакет): как я могу преобразовать пример XML в запрос? - PullRequest
0 голосов
/ 05 марта 2019

К сожалению, наш партнер имеет API только в XML-SOAP.Это мой первый опыт работы с ним.

У меня есть пример успешного запроса в XML:

<?xml version="1.0" encoding="UTF-8"?>

<soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"

    xmlns:xsd="http://www.w3.org/2001/XMLSchema"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    <soap:Body>

        <GetMessageRequest xmlns="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0">

            <Message>

                <tns:AuthRequest xmlns:tns="urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0">

                    <tns:AuthAppInfo>

                        <tns:MasterToken>[ I NEED TO SEND ONLY THIS VARIABLE ]</tns:MasterToken>

                    </tns:AuthAppInfo>

                </tns:AuthRequest>

            </Message>

        </GetMessageRequest>

    </soap:Body>

</soap:Envelope>

Мне нужно понять, что есть что, что: что здесь функция (если яПравильное понимание - это GetMessageRequest, поправьте меня), каковы аргументы (если я понимаю - они находятся внутри сообщения, но как их правильно ввести).

Как мне написать правильный запрос?

Мой код:

        require('soap')
            .createClientAsync('https://openapi.nalog.ru:8090/open-api/AuthService/0.1?wsdl')
            .then(client => client.GetMessageAsync({Message: {
                AuthRequest: {
// in XML there is tns:AuthRequest
// xmlns:tns="urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0" 
// How to add it here correct?

                    AuthAppInfo: {

                    },
                }}})
                .then(message => log(message)).catch(err => inspect(err)));

1 Ответ

0 голосов
/ 05 марта 2019

Основная часть SOAP - это WSDL.С его помощью вы можете генерировать клиентов для вызова служб.

Для основного тега wsdl вы можете обратиться к w3cshool

Начиная с этого

<wsdl:operation name="GetMessage">
<wsdl:input message="tns:GetMessageRequest" name="GetMessageRequest"> </wsdl:input>
<wsdl:output message="tns:GetMessageResponse" name="GetMessageResponse"> </wsdl:output>
<wsdl:fault message="tns:AuthenticationException" name="AuthenticationException"> </wsdl:fault>
</wsdl:operation>

Это функция, которую вы можете вызвать, и вы увидите, какой запрос он принимает, каков формат ответа и формат ошибки.Простой xsd в type описывает формат каждого сообщения.

Для вашего случая этот фрагмент является хорошим началом:

const soap = require('soap');
const url = 'https://openapi.nalog.ru:8090/open-api/AuthService/0.1?wsdl';
const args = {
  GetMessageRequest:
    { Message: { AuthRequest: { AuthAppInfo: { MasterToken: 'TOKEN' } } } }
};
soap.createClient(url, function (err, client) {
  console.log(JSON.stringify(client.describe(), null, 2));
  client.GetMessage(args, function (err, result) {
    console.log(result);
  });
});

Он создает этот запрос:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tns="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/1.0"
    xmlns:ns1="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0">
    <soap:Body>
        <ns1:GetMessageRequest
            xmlns:ns1="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0"
            xmlns="urn://x-artefacts-gnivc-ru/inplat/servin/OpenApiMessageConsumerService/types/1.0">
            <ns1:GetMessageRequest>
                <ns1:Message>
                    <ns1:AuthRequest>
                        <ns1:AuthAppInfo>
                            <ns1:MasterToken>TOKEN</ns1:MasterToken>
                        </ns1:AuthAppInfo>
                    </ns1:AuthRequest>
                </ns1:Message>
            </ns1:GetMessageRequest>
        </ns1:GetMessageRequest>
    </soap:Body>
</soap:Envelope>

ОБРАТИТЕ ВНИМАНИЕ, что пространство имен для AuthRequest должно быть зафиксировано на urn://x-artefacts-gnivc-ru/ais3/kkt/AuthService/types/1.0

...