Начало работы с ASP.NET MVC3 и Google Checkout: дубль 2 - PullRequest
2 голосов
/ 09 июня 2011

Это продолжение: https://stackoverflow.com/questions/6285578/getting-started-with-asp-net-mvc3-google-checkout

Теперь я наконец-то начал понимать, что происходит с API Google Checkout.Я решил сделать все на стороне сервера.Поэтому я написал некоторый код, но не смог сделать успешный вызов API.Вот мой код:

        var str = string.Format("{0}:{1}", MERCHANT_ID, MERCHANT_KEY);
        var auth = EncodeTo64(str);
        var request = WebRequest.Create("https://sandbox.google.com/checkout/api/checkout/v2/requestForm/Merchant/747839340759259");
        ((HttpWebRequest) request).Accept = "application/xml;charset=UTF-8";
        request.Headers.Add("Authorization", "Basic " + auth);
        request.ContentType = "application/xml;charset=UTF-8";
        request.Method = "POST";
        string postData = "_type=hello";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        request.ContentLength = byteArray.Length;
        Stream dataStream = request.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();
        // Get the response.
        WebResponse response = request.GetResponse();
        ViewData.Add("status", ((HttpWebResponse)response).StatusDescription);
        dataStream = response.GetResponseStream();
        var reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();
        ViewData.Add("responseFromServer", responseFromServer);
        reader.Close();
        dataStream.Close();
        response.Close();
        return View();

Сначала я получил ошибку 401, но я ее исправил.Теперь я продолжаю получать The remote server returned an error: (400) Bad Request. на строке, которая говорит WebResponse response = request.GetResponse();.Так что, наверное, что-то не так с моим кодом C #?

ПРИМЕЧАНИЕ. Сообщение HTTP должно иметь следующие заголовки.

Авторизация: Basic MTIzNDU2Nzg5MDpIc1lYRm9aZkhBcXlMY0NSWWVIOHFR * 1014 (1014 *кодировка base64 Merchant_ID:Merchant_Key

Тип содержимого: application / xml; charset = UTF-8

Принимать: application / xml; charset = UTF-8

Итак, есть ли какие-либо предложения о том, как мне решить эту проблему?

ОБНОВЛЕНИЕ: Мне кажется, я выяснил источник проблемы, но не могу понять, как ее решить.Вот ссылка, которая объясняет это: Этот поток не поддерживает операции поиска

ОБНОВЛЕНИЕ 2: Я наконец получил фидлер для перехвата вызова, и вот что я нашелout:

ЗАПРОС:

POST 

https://sandbox.google.com/checkout/api/checkout/v2/requestForm/Merchant/747839340759259

HTTP/1.1

Accept: application/xml;charset=UTF-8

Content-Type: application/x-www-form-urlencoded

Range: bytes=1024-

Authorization: Basic NzQ3ODM5MzQwNzU5MjU5OjVKNS1tRkpIZVBWc25hXzVFOW5mZ2c=

User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)

Host: sandbox.google.com

Content-Length: 257

Expect: 100-continue

Connection: Keep-Alive


_type=checkout-shopping-cart&item_name_1=Baseball&item_description_1=White+baseball&item_currency_1=USD&item_price_1=5.99&item_quantity_1=2&item_name_2=Baseball+Glove&item_description_2=XL+Baseball+Glove&item_currency_2=USD&item_price_2=30&item_quantity_2=1

ОТВЕТ:

HTTP/1.1 400 Bad Request

Content-Type: application/x-www-form-urlencoded; charset=US-ASCII

Transfer-Encoding: chunked

Date: Thu, 09 Jun 2011 19:32:49 GMT

Expires: Thu, 09 Jun 2011 19:32:49 GMT

Cache-Control: private, max-age=0

X-Content-Type-Options: nosniff

X-Frame-Options: SAMEORIGIN

X-XSS-Protection: 1; mode=block

Set-Cookie: S=payments_api=GWZzws2nBZR-KMGHgKJlTQ; Expires=Thu, 09-Jun-2011 20:02:49 GMT; Path=/; Secure; HttpOnly

Server: GSE

74
_type=error&error-message=Carts+must+contain+at+least+one+item.&serial-number=c8677c3d-3e80-48e8-bd84-f01fa3b02165

0

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Вы заявляете:

Сообщение HTTP должно иметь следующие заголовки.

Тип содержимого: application / xml; charset = UTF-8

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

0 голосов
/ 09 июня 2011

Это может быть глупый вопрос, но есть ли причина, по которой вы не используете Google .NET DLL?

Я понимаю, что пример в коде Google предназначен для формы Windows.приложения, но объекты, используемые для отправки запроса на оформление заказа, должны нормально работать с вашего контроллера.

...