Отправка cXML-сообщения PunchOutOrderMessage обратно на веб-сайт Ariba - PullRequest
0 голосов
/ 16 сентября 2018

Я работаю над созданием существующего небольшого веб-сайта, совместимого с программой Ariba.

Я могу прочитать входящие настройки, сделать ответ и затем перенаправить их на действительный логин обратно на веб-сайт.

В тестере штамповки Ariba все работает правильно и может добавлять элементы в корзину.

Я пытаюсь завершить процесс и отправить сообщение PunchOutOrderMessage обратно в корзину.

В примере документации cXML он имеет следующий формат:

<input type="hidden" name="cxml-urlencoded" value="<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd">

.... и т. Д.

Я настроил то же сообщение, но с правильными данными для выгрузки корзины.

Я не знаю, как заставить его отослать его обратно на сайт Ariba.Выполнение punchout предоставляет URL-адрес формы POST, на который я должен отправить форму.

Я попробовал следующие методы: Как сделать веб-запрос HTTP POST для подключения квеб-сервер, но не был уверен, что делать с сообщением.Я только что загрузил его в виде текста:

ServicePointManager.ServerCertificateValidationCallback += new System.Net.Security.RemoteCertificateValidationCallback(ValidateRemoteCertificate);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

var content = new StringContent(strPost);

var response = await client.PostAsync(PostURL, content);

var responseString = await response.Content.ReadAsStringAsync();

Проверка ResponseString просто предоставляет полную веб-страницу от Ariba, как будто я только что зашел на сайт вручную.

Встроенный браузерпросто остается открытым на сайте Punchout и никуда не уходит.

У кого-нибудь был какой-либо успех при подключении к сайту Ariba и публикации заказа?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2019

Документ PunchOutOrderMessage должен быть отправлен обратно клиентской стороне Ariba, а не серверной стороне. Это можно сделать, поместив cXML в скрытое поле ввода <form> и отправив форму с помощью JavaScript. Также убедитесь, что cXML - это HTML, экранированный в значении поля ввода.

Пример HTML / JavaScript для этого случая можно найти здесь: https://punchoutcommerce.com/guides/punchout/cxml-punchout-order-message/#cart_transmission

0 голосов
/ 09 ноября 2018

Я сталкивался с этим, когда искал ответ на свой вопрос о шаге после этого, но лучше поздно, чем никогда.

Это сработало для меня (HOOK_URL - это URL, предоставленный Ariba) - сохраните код менеджера точки обслуживания:

byte[] response = Encoding.ASCII.GetBytes(output);
var request = (HttpWebRequest)WebRequest.Create(poom.HOOK_URL);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";

try
{
    request.GetRequestStream().Write(response, 0, response.Length);
}
catch (Exception ex)
{
    LogHelpers.Write(log, ex);
}

WebResponse webresponse = null;
try
{
    webresponse = request.GetResponse();
}
catch (Exception ex)
{
    LogHelpers.Write(log, ex);
}

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

...