2016-10-12 19 views
0

Cielo(クレジットカード/デビットカードゲートウェイ会社)からRESTサービスを利用しようとしています。私は郵便配達を使用している場合、それは動作します:Request throwing C#リクエストでのみ既存の接続がリモートホストによって強制的にクローズされました

POST /1/sales/ HTTP/1.1 
Host: apisandbox.cieloecommerce.cielo.com.br 
MerchantKey: my_key 
Content-Type: application/json 
MerchantId: merc_id 
Cache-Control: no-cache 
Postman-Token: 6643cc5a-173a-f5db-8924-85ea8b7bbb55 

{"MerchantId":"00000000-0000-0000-0000-000000000000","MerchantKey":null,"RequestId":"00000000-0000-0000-0000-000000000000","MerchantOrderId":"1223","Customer":{"Name":"Emerson Fitchy"},"Payment":{"PaymentId":"00000000-0000-0000-0000-000000000000","Type":"CreditCard","Amount":15700,"Installments":1,"Provider":null,"ProofOfSale":null,"Tid":null,"AuthorizationCode":null,"SoftDescriptor":null,"ECI":null,"Status":0,"ReturnCode":null,"ReturnMessage":null,"CreditCard":{"CardNumber":"0000000000000001","Holder":"Emerson Fitchy Santis","ExpirationDate":"12/2022","SecurityCode":"154","Brand":"Visa"}}} 

をそして、これはC#のコードです(現時点では、私はRestSharpと同じ結果とHttpClientでも試してみました):

var webrequest = (HttpWebRequest)WebRequest.Create(Constants.Cielo.GetSalesUrl()); 

webrequest.ContentType = "application/json"; 
webrequest.Method = "POST"; 
webrequest.Headers.Add("MerchantId", Constants.Cielo.Sandbox.MerchantId.ToString()); 
webrequest.Headers.Add("MerchantKey", Constants.Cielo.Sandbox.MerchantKey); 

using (var streamWriter = new StreamWriter(webrequest.GetRequestStream())) 
{ 
    var json = JsonConvert.SerializeObject(sale); 
    streamWriter.Write(json); 
} 

var httpResponse = (HttpWebResponse)webrequest.GetResponse(); 
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
{ 
    var result = streamReader.ReadToEnd(); 
    var x = result; 
} 

何午前上の任意のアイデアを私は間違っている?私はFiddler 4を使用しようとしましたが、このリクエストを受け取りませんでした(なぜわかりません)、WireSharkはそれをピックアップしますが、Fiddlerのように情報を表示しません(httpsを使用しているためでしょうか?

アイデア?

ありがとうございます!

EDIT

応答/例外

enter image description here

+0

それはAPIが可能だがあなたのユーザーが好きではない - 必要なヘッダーが欠落しています。関連項目 - http://stackoverflow.com/a/15031536/2779990 –

+0

@StinkyTowelご意見ありがとうございます。私はユーザーエージェントを追加してあなたに戻ろうとします。私があなたが郵便配達所で見たのと同じものを追加しているので、私は疑問に思うヘッダーについて。 – eestein

+0

@StinkyTowel残念ながら、それはユーザエージェントではありませんでした。:/ 'webrequest.UserAgent =" Mozilla/5.0 ... "; ' – eestein

答えて

0

このクライアントを試してみて、それはあなたが別の結果を得るかどうかを確認:

var client = new HttpClient(); 

using (HttpRequestMessage request = new HttpRequestMessage()) 
{ 
    request.Method = HttpMethod.Post; 
    request.RequestUri = new Uri(Constants.Cielo.GetSalesUrl(), UriKind.Absolute); 
    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    var requestContent = JsonConvert.SerializeObject(sale); 
    request.Content = new StringContent(requestContent, Encoding.UTF8, "application/json"); 

    request.Headers.Add("MerchantId", Constants.Cielo.Sandbox.MerchantId.ToString()); 
    request.Headers.Add("MerchantKey", Constants.Cielo.Sandbox.MerchantKey); 

    using (HttpResponseMessage response = await client.SendAsync(request)) 
    { 
     if (response.IsSuccessStatusCode) 
     { 
      if (response.Content != null) 
      { 
       var rawJson = await response.Content.ReadAsStringAsync(); 
       // do stuff - map to type, etc. 
      } 
     } 

     return something; 
    } 
} 
+0

Nothing ...同じこと...私はMac上でXamarin Studioでサンプルコードを実行しようとしています。ちょうどそれがWindows上で奇妙なエラーではないことを確認するためです。 – eestein

+0

あなたは200を得ますか?レスポンス/例外とは何ですか? –

+0

私の更新を確認してください。ステータスコードは0です – eestein

関連する問題