2017-05-24 4 views
1

私は今のところ、1週間ほど立ち往生しています。何らかの理由で、トランザクショントークンとセッショントークンを使用するVISAサービス用のこの認証APIがあります。VISAサービスのHttpWebRequestは400を返し続けます。

リモートサーバーエラー(400)不正リクエスト。

私を含むほとんどすべて試してみた:WebClientコンポーネント

、何に切り替える

  • JSONフォーマット(コメントコード)
  • が動作しているようですが、これはコードです:

    string statusCode; 
    
    string body = 
        "{" + 
         "\"transactionToken\": \"" + transactionToken + "\"," + 
         "\"sessionToken\": \"" + sessionToken + "\"" + 
        "}"; 
    
    string requestURL = "https://devapice.vnforapps.com/api.authorization/api/v1/authorization/web/{MyMerchantId}"; 
    string id = "xxxxxx"; 
    string password = "yyyyyyy"; 
    string respuesta = ""; 
    
    try 
    { 
        HttpWebRequest request = WebRequest.Create(requestURL) as HttpWebRequest; 
        request.Method = "POST"; 
        request.ContentType = "application/json"; 
        request.Accept = "application/json"; 
    
        var requestStringBytes = Encoding.UTF8.GetBytes(body); 
        request.GetRequestStream().Write(requestStringBytes, 0, requestStringBytes.Length); 
    
        request.Headers["Authorization"] = GetBasicAuthHeader(id, password); 
        request.Headers["VisaNet-Session-Key"] = sessionToken; 
    
        /* 
        using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
        { 
         var json = JsonConvert.SerializeObject(new 
         { 
          transactionToken = transactionToken, 
          sessionToken = sessionToken 
         }, Formatting.Indented); 
    
         streamWriter.Write(json); 
        } 
        */ 
    
        using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
        { 
    
         statusCode = response.StatusCode.ToString(); 
         Stream receiveStream = response.GetResponseStream(); 
         StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
         respuesta = readStream.ReadToEnd(); 
        } 
    } 
    catch (WebException ex) 
    { 
        using (WebResponse response = ex.Response) 
        { 
         var httpResponse = (HttpWebResponse)response; 
    
         using (Stream data = response.GetResponseStream()) 
         { 
          StreamReader sr = new StreamReader(data); 
          respuesta = sr.ReadToEnd(); 
         } 
        } 
    } 
    

    シーズンの残りのセッションキーを作成する前と最初のAPIがあります。このセッションキーをセッション変数に保存しました。何が起こっているのでしょうか?ここでは多くの類似ケースを読みました。運がなければ最高のものを適用しようとしました。

    GetBasicAuthHeader関数は、最初のAPIに対して正しく動作する基本認証ヘッダーを設定するためのカスタム関数です。

答えて

0

おそらく応答があなたに伝えているようです。現在のコードでは、リクエストを行うとすべてのデータがフラッシュされることはありません。

あなたはusing文で要求ストリームとStreamWriterをラップする場合は、オブジェクトが配置されているときは、フラッシュが起こるかは:

string statusCode; 

string body = 
    "{" + 
     "\"transactionToken\": \"" + transactionToken + "\"," + 
     "\"sessionToken\": \"" + sessionToken + "\"" + 
    "}"; 

string requestURL = "https://devapice.vnforapps.com/api.authorization/api/v1/authorization/web/{MyMerchantId}"; 
string id = "xxxxxx"; 
string password = "yyyyyyy"; 
string respuesta = ""; 

try 
{ 
    HttpWebRequest request = WebRequest.Create(requestURL) as HttpWebRequest; 
    request.Method = "POST"; 
    request.ContentType = "application/json"; 
    request.Accept = "application/json"; 

    using(var rs = request.GetRequestStream()){ 
     using(StreamWriter sw = new StreamWriter(rs)){ 
      sw.Write(body); 
     } 
    } 
    request.Headers["Authorization"] = GetBasicAuthHeader(id, password); 
    request.Headers["VisaNet-Session-Key"] = sessionToken; 



    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) 
    { 

     statusCode = response.StatusCode.ToString(); 
     using(StreamReader sr = new StreamReader(response.GetResponseStream()){ 
      respuesta = sr.ReadToEnd(); 
     } 
    } 
} 
catch (WebException ex) 
{ 
    using (WebResponse response = ex.Response) 
    { 
     var httpResponse = (HttpWebResponse)response; 

     using (Stream data = response.GetResponseStream()) 
     { 
      StreamReader sr = new StreamReader(data); 
      respuesta = sr.ReadToEnd(); 
     } 
    } 
} 

編集:

これが動作しない場合は、HTTPを調べますFiddlerでリクエストし、サービスの仕様と一致することを確認してください。

+0

それでも、StatusCode = 400、StatusDescription = Bad Requestがあることがわかります。 –

+0

上記の私の編集を参照してください。 –

+0

別のVISA資格情報で試したところ、改善が正しく機能しています。 –

関連する問題