簡體   English   中英

將xml發布到Google Checkout

[英]POSTing xml to Google Checkout

我正在嘗試使用Google Checkout,並且在結帳服務​​器上發布了問題。 這是我的代碼:

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();

當我調用GetResponse()時,我得到一個(400) Bad Request

我們將非常感激地為此提供任何幫助。

Jon Skeet指出,你的XML看起來很糟糕:-)。 為了進一步幫助調試 - 可能有更多關於響應中的錯誤的信息。 WebException有一個Response對象,可能有一個更詳細的錯誤消息,可以通過調用其GetResponseStream()方法來讀取。

對Google Checkout API一無所知,您確定在每個元素上都不需要命名空間嗎?

XElement rootElement = new XElement(ns + "checkout-shopping-cart",
    new XElement(ns + "shopping-cart"),
        new XElement(ns + "items",
                     // etc

這肯定是Checkout API指南向我建議的 - 請注意“xmlns = ...”表示除非另有說明,否則該元素和所有后代元素的命名空間。

如果異常是WebException,您仍然可以讀取響應消息。 這將為您提供有關錯誤的更多信息:

try {
   response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex1) {
   response = ex1.Response();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM