很遗憾,我们的合作伙伴仅在XML-SOAP中具有API。这是我的第一次体验。
我有一个成功请求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)));
答案 0 :(得分:0)
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>
这是一个可以调用的函数,您可以看到它接受什么请求,响应格式和故障格式是什么。 type
中的一个简单xsd描述了每封邮件的格式。
对于您的用例,此代码段是一个不错的开始:
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