89 lines
3.2 KiB
C#
89 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using SimpleHttp;
|
|
using System.Xml.Linq;
|
|
|
|
namespace BodyshopPartner.Utils
|
|
{
|
|
public static class HTTPServer
|
|
{
|
|
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
public static void InitHttpServer()
|
|
{
|
|
Route.Add("/qb/receivables", (req, res, props) =>
|
|
{
|
|
res.WithCORS();
|
|
//res.AddHeader("Access-Control-Allow-Origin", "http://localhost:3000 https://localhost:3000 http://localhost:5000 https://localhost:5000 https://*.imex.online,imex.online");
|
|
res.Close();
|
|
}, "OPTIONS");
|
|
|
|
Route.Add("/qb/receivables",
|
|
(req, res, props) => { HandleQbReceivables(req, res); }
|
|
, "POST");
|
|
|
|
logger.Trace("Starting HTTP server...");
|
|
|
|
//TODO As a part of the installer, add netsh http add urlacl url=http://+:1337/ user="Everyone
|
|
HttpServer.ListenAsync(1337, System.Threading.CancellationToken.None, Route.OnHttpRequestAsync).Wait();
|
|
}
|
|
|
|
private static void HandleQbReceivables(System.Net.HttpListenerRequest req, System.Net.HttpListenerResponse res)
|
|
{
|
|
logger.Debug("/qb/receivables - POST");
|
|
|
|
string requestXMLstring = ParseBodyToString(req);
|
|
XDocument requestXMLdoc = ParseStringToXml(requestXMLstring);
|
|
|
|
string CustomerId = QuickBooksInterop.CreateCustomerIfNotExist(requestXMLdoc);
|
|
|
|
|
|
string InvoiceAddResponse = QuickBooksInterop.ProcessQBXmlRequest(requestXMLstring);
|
|
|
|
|
|
string[] status = new string[3];
|
|
if (InvoiceAddResponse != null) status = QuickBooksInterop.parseInvoiceAddRs(InvoiceAddResponse);
|
|
|
|
if (InvoiceAddResponse != null && status[0] == "0")
|
|
{
|
|
logger.Debug("Invoice added successfully.");
|
|
}
|
|
else
|
|
{
|
|
logger.Error("Error adding Invoice.\nStatus Code: {0} \nSeverity: {1} \nMessage {2}", status[0], status[1], status[2]);
|
|
}
|
|
res.WithCORS().AsText("Hello.");
|
|
}
|
|
|
|
public static string ParseBodyToString(System.Net.HttpListenerRequest req)
|
|
{
|
|
System.IO.Stream body = req.InputStream;
|
|
System.Text.Encoding encoding = req.ContentEncoding;
|
|
System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
|
|
//if (req.ContentType != null)
|
|
//{
|
|
// Console.WriteLine("Client data content type {0}", req.ContentType);
|
|
//}
|
|
//Console.WriteLine("Client data content length {0}", req.ContentLength64);
|
|
|
|
//Console.WriteLine("Start of client data:");
|
|
// Convert the data to a string and display it on the console.
|
|
string s = reader.ReadToEnd();
|
|
//Console.WriteLine(s);
|
|
//Console.WriteLine("End of client data:");
|
|
body.Close();
|
|
return s;
|
|
}
|
|
|
|
public static XDocument ParseStringToXml(string input)
|
|
{
|
|
return XDocument.Parse(input);
|
|
}
|
|
|
|
|
|
}
|
|
}
|