POSTeando XML a Google Checkout
-
23-09-2019 - |
Pregunta
estoy experimentando con el uso de Google Checkout y estoy teniendo una publicación problema con el servidor de pago y envío. Aquí está mi código:
XNamespace ns = XNamespace.Get("http://checkout.google.com/schema/2");
XDocument cart = new XDocument();
XElement rootElement = new XElement(ns + "checkout-shopping-cart",
new XElement("shopping-cart",
new XElement("items",
new XElement("item",
new XElement("item-name", "doodad"),
new XElement("item-description", "Description for the doodad"),
new XElement("unit-price", 9.99, new XAttribute("currency", "GBP")),
new XElement("quantity", 1)
)
)
)
);
cart.Add(rootElement);
string authKey = "111222333444:NOTAREALKEY";
authKey = EncodeToBase64(authKey);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://checkout.google.com/cws/v2/Merchant/111222333444/merchantCheckout");
request.Method = "POST";
byte[] byteArray = Encoding.UTF8.GetBytes(cart.ToString());
request.ContentType = "application/xml; charset=UTF-8";
request.ContentLength = byteArray.Length;
request.Headers.Add("Authorization: Basic " + authKey);
request.Accept = "application/xml; charset=UTF-8";
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); // Exception here!
dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseText = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
Cuando llamo GetResponse (), aparece un (400) Bad Request
.
Cualquier ayuda en esto sería recibido con gratitud.
Solución
Sus miradas XML dañado como Jon Skeet señala :-). Con el fin de depurar aún más la ayuda - que puede haber más información sobre el error en la respuesta. WebException
tiene un objeto Response
que podrían tener un mensaje de error más detallado que se puede leer llamando a su método GetResponseStream()
.
Otros consejos
Sin saber nada acerca de la API de Google Checkout, ¿está seguro de que no es necesario el espacio de nombres cada de esos elementos?
XElement rootElement = new XElement(ns + "checkout-shopping-cart",
new XElement(ns + "shopping-cart"),
new XElement(ns + "items",
// etc
Esto es sin duda lo que el Pedido guía API sugiere mí -. Tenga en cuenta que "xmlns = ..." significa que del espacio de nombres para este elemento y todos los elementos descendientes salvo indicación en contrario
Aún puede leer mensaje de respuesta, si es WebException excepción. Esto le dará más información sobre lo que está mal:
try {
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex1) {
response = ex1.Response();
}