Таким образом, моя компания в настоящее время использует QuickBooks Desktop для большей части своего инвентаря. У нас также есть собственное веб-приложение React, которое связывается с нашими техническими специалистами, работающими в полевых условиях, и есть некоторые вещи, которые нам необходимы для отслеживания этих предметов по мере их отправки нашим специалистам. Я пытаюсь сделать запрос к веб-соединителю QuickBooks, чтобы получить список элементов, которые в настоящее время находятся в QuickBooks. Я провел некоторое исследование, и мне кажется, что нам, по сути, понадобится веб-служба SOAP, чтобы выполнять любые запросы к QBW C. Обычно я использую API REST для получения необходимой информации, поэтому я не знаю, как делать SOAP запросов.
Я просмотрел все, чтобы попытаться найти примеры, которые могли бы указать мне на правильное направление, но я совершенно сбит с толку в большинстве из того, что я смотрю. Я знаю, что есть soap node js package
, который я, скорее всего, буду использовать. Я также знаю, что мне понадобится ссылка на WSDL, которую можно найти здесь: https://test.developer.intuit.com/QBWC/TroubleshootWebServiceFS/Service.asmx?wsdl
Есть некоторые вещи, которые меня смущают при настройке SOAP веб-сервис. Я уже использую express
для обслуживания своего приложения, а также должен добавить к этому soap
, чтобы он мог обрабатывать SOAP запросов. Поэтому я буду использовать этот метод, который был взят из их репозитория github, чтобы сделать это:
var app = express();
//body parser middleware are supported (optional)
app.use(bodyParser.raw({type: function(){return true;}, limit: '5mb'}));
app.listen(8001, function(){
//Note: /wsdl route will be handled by soap module
//and all other routes & middleware will continue to work
soap.listen(app, '/wsdl', myService, xml, function(){
console.log('server initialized');
});
});
Я понимаю, что аргумент XML - это путь к WSDL, но я запутался насчет второго и третьи аргументы в этом примере. Мне кажется, /wsdl
- это маршрут в приложении, но должен ли он быть уже настроен? И что входит в этот маршрут? Кроме того, я не понимаю, для чего нужен аргумент myService
. Вот что они дают:
var myService = {
MyService: {
MyPort: {
MyFunction: function(args) {
return {
name: args.name
};
},
// This is how to define an asynchronous function with a callback.
MyAsyncFunction: function(args, callback) {
// do some work
callback({
name: args.name
});
},
// This is how to define an asynchronous function with a Promise.
MyPromiseFunction: function(args) {
return new Promise((resolve) => {
// do some work
resolve({
name: args.name
});
});
},
// This is how to receive incoming headers
HeadersAwareFunction: function(args, cb, headers) {
return {
name: headers.Token
};
},
// You can also inspect the original `req`
reallyDetailedFunction: function(args, cb, headers, req) {
console.log('SOAP `reallyDetailedFunction` request from ' + req.connection.remoteAddress);
return {
name: headers.Token
};
}
}
}
};
Как это применимо к моему сценарию?
Это точка, в которой я ничего не могу найти в Интернете. Это, очевидно, лишь первый шаг к тому, чтобы заставить QBW C даже аутентифицировать веб-приложение, с которым оно общается. Заставить QBW C работать даже после этого - само по себе совершенно другое обсуждение.
Если у кого-то был опыт в создании чего-то похожего на это, я бы хотел больше узнать о том, как это работает и как я могу заставить мое приложение соединиться с QBW C. Или, если вы знаете, что мне нужно сделать, чтобы сделать запрос на получение списка предметов из QB, это также было бы замечательно. Спасибо!