Это продолжение: 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