Ejemplo n.º 1
0
        // GET: /<controller>/
        public IActionResult Index()
        {
            var userCart = GetCartForLoggedInUser();

            userCart.PunchOutOciOrderItems = GetPunchoutOciCartDetails(userCart);
            userCart.BrowserFormPostUrl    = PunchoutUserService.GetProcurementSystemPostUrl();


            return(View(userCart));
        }
Ejemplo n.º 2
0
        public IActionResult Index(string token)
        {
            var customerToken = PunchoutUserService.GetUserToken();

            if (customerToken != token)
            {
                //Prevent user from accessing the products catalog
                //Invalid token - show access denied error page
                return(StatusCode(401));
            }

            // Valid token: login user and display catalog page where user can view products
            // and add required products to their cart

            return(View());
        }
Ejemplo n.º 3
0
        public async Task Invoke(HttpContext context)
        {
            using (var reader = new StreamReader(context.Request.Body, Encoding.UTF8))
            {
                string xml = reader.ReadToEnd();

                XDocument document = XDocument.Load(new StringReader(xml));

                XElement cXml = document.Element("cXML");

                if (GetSenderSharedSecretFromRequest(cXml) == PunchoutUserService.GetUserSharedSecret())
                {
                    responseStatus = "Success";
                    resposeText    = "OK";
                    responseCode   = "200";

                    startPageUrl = context.Request.Scheme + "://" + context.Request.Host.Value + "/home?token=" + PunchoutUserService.GetUserToken();

                    var url = GetProcurementSystemPostUrlFromRequest(cXml);
                    PunchoutUserService.SaveProcurementSystemPostUrl(GetProcurementSystemPostUrlFromRequest(cXml));
                }
            }


            XDocument responseDocument = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));

            XElement statusElement = new XElement("Status", responseStatus);

            statusElement.Add(new XAttribute("code", responseCode));
            statusElement.Add(new XAttribute("text", resposeText));

            XElement response =
                new XElement("cXML",
                             new XElement("Response",
                                          statusElement,
                                          new XElement("PunchOutSetupResponse",
                                                       new XElement("StartPage",
                                                                    new XElement("URL", startPageUrl)))));


            responseDocument.Add(response);
            context.Response.ContentType = "text/xml";


            await context.Response.WriteAsync
                (responseDocument.ToString());
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Gets the punchout cart details in XML format to be sent to procurement system.
        /// </summary>
        /// <returns>The punchout cart details.</returns>
        /// <param name="userCart">User cart.</param>
        string GetPunchoutCxmlCartDetails(CartModel userCart)
        {
            var xmlString = string.Empty;

            XDocument orderDocument = new XDocument(new XDeclaration("1.0", "utf-8", null));


            XDocumentType documentType = new XDocumentType("cXML", null, "http://xml.cxml.org/schemas/cXML/1.1.009/cXML.dtd", null);

            orderDocument.Add(documentType);

            XElement orderMessage = new XElement("PunchOutOrderMessage");

            orderMessage.Add(new XElement("BuyerCookie", "vk4593733")); // Get current user's cookie received in the first setup request
            orderMessage.Add(new XElement("PunchOutOrderMessageHeader", new XAttribute("operationAllowed", "create"),
                                          new XElement("Total",
                                                       new XElement("Money", new XAttribute("currency", "AUD"), userCart.Total))));

            var cartItems = userCart.CartItems;

            int lineNumber = 1;

            foreach (var item in cartItems)
            {
                orderMessage.Add(new XElement("ItemIn", new XAttribute("quantity", item.Quantity),
                                              new XAttribute("lineNumber", lineNumber),
                                              new XElement("ItemID",
                                                           new XElement("SupplierPartID", item.Sku)),
                                              new XElement("ItemDetail",
                                                           new XElement("UnitPrice",
                                                                        new XElement("Money", new XAttribute("currency", "AUD"), item.UnitPrice)),
                                                           new XElement("Description", item.Description),
                                                           new XElement("UnitOfMeasure", "EACH"),
                                                           new XElement("Classification", new XAttribute("domain", "UNSPSC"), "99999999"),
                                                           new XElement("ManufacturerName", ""),
                                                           new XElement("AttachmentReference",
                                                                        new XElement("Name", new XAttribute(XNamespace.Xml + "lang", "en-AU"), "NA"),
                                                                        new XElement("Description", new XAttribute(XNamespace.Xml + "lang", "en-AU"), "Product Image"),
                                                                        new XElement("InternalID", new XAttribute("domain", "Local"), "NA"),
                                                                        new XElement("URL", ""))),
                                              new XElement("Tax",
                                                           new XElement("Money", new XAttribute("currency", "AUD"), ""), new XElement("Description", "GST"))
                                              ));

                lineNumber++;
            }

            // Add a seperate line to include shipping total
            orderMessage.Add(new XElement("ItemIn", new XAttribute("quantity", 1),
                                          new XAttribute("lineNumber", lineNumber),
                                          new XElement("ItemID",
                                                       new XElement("SupplierPartID", "FREIGHT")),
                                          new XElement("ItemDetail",
                                                       new XElement("UnitPrice",
                                                                    new XElement("Money", new XAttribute("currency", "AUD"),
                                                                                 userCart.ShippingTotal)),
                                                       new XElement("Description", "Freight"),
                                                       new XElement("UnitOfMeasure", "EA"),
                                                       new XElement("Classification", new XAttribute("domain", "UNSPSC"), "99999999"),
                                                       new XElement("ManufacturerName", ""),
                                                       new XElement("AttachmentReference",
                                                                    new XElement("Name", new XAttribute(XNamespace.Xml + "lang", "en-AU"), "NA"),
                                                                    new XElement("Description", new XAttribute(XNamespace.Xml + "lang", "en-AU"),
                                                                                 "Product Image"),
                                                                    new XElement("InternalID", new XAttribute("domain", "Local"), "NA"),
                                                                    new XElement("URL", ""))),
                                          new XElement("Tax",
                                                       new XElement("Money", new XAttribute("currency", "AUD"), ""),
                                                       new XElement("Description", "GST"))

                                          ));

            XElement xmlHeader =
                new XElement("Header",
                             new XElement("From",
                                          new XElement("Credential",
                                                       new XAttribute("domain", "DUNS"), // Specifies the type of credential. This attribute allows documents to contain multiple types of credentials for multiple authentication domains.
                                                                                         //DUNS for a D-U - N - S number
                                                       new XElement("Identity", "759877702"))),

                             new XElement("To",
                                          new XElement("Credential",
                                                       new XAttribute("domain", "DUNS"),        // NetworkId for a preassigned ID.
                                                       new XElement("Identity", "749986717"))), // To-do get dynamic values for ID from client

                             new XElement("Sender",
                                          new XElement("Credential",
                                                       new XAttribute("domain", ""),                                                                                                  //Authentication details of the buying organization including Identity, SharedSecret (password), and
                                                                                                                                                                                      //AribaNetworkId, which is specified by Credential domain.The SharedSecret is the supplier's password or login to the PunchOut site
                                                       new XElement("Identity", "*****@*****.**"), new XElement("SharedSecret", PunchoutUserService.GetUserSharedSecret())), // To-do get dynamic values for ID from client
                                          new XElement("UserAgent", "Procurement IT"))                                                                                                // A unique identifier for the application sending the PunchOutSetupRequest. Consists of the software company
                                                                                                                                                                                      //name, product name, and version.Version details can appear in parentheses.
                             );



            orderDocument.Add(new XElement("cXML",
                                           new XAttribute("payloadID", "1596.377374.2015-04-02T12:58:33-04:[email protected]"),
                                           new XAttribute("timestamp", "2015-04-02T12:58:33-04:00"),
                                           new XAttribute(XNamespace.Xml + "lang", "en"),
                                           xmlHeader,
                                           new XElement("Message", orderMessage)));


            var stringWriter = new Utf8StringWriter();

            orderDocument.Save(stringWriter, SaveOptions.None);

            xmlString = stringWriter.ToString();

            return(xmlString.Replace("\"", "'"));
        }