/// <summary> /// This method will perform a the http request synchronously, and return the json decoded result /// </summary> /// <param name="request"></param> /// <returns>Dictionary<string,object></returns> public Dictionary <string, object> processRequest(Request request) { HttpWebRequest conn = (HttpWebRequest)WebRequest.CreateHttp(request.buildUrl(this.apiEndPoint)); conn.Headers["Authorization"] = "Basic " + this.getAuthString(); conn.ContentType = "application/json; charset=utf-8"; conn.Method = request.method(); if (request.method().Equals(RequestType.POST.ToString()) || request.method().Equals(RequestType.PUT.ToString())) { string requestBody = request.body(); byte[] requestData = Encoding.UTF8.GetBytes(requestBody); var resultRequest = conn.BeginGetRequestStream(null, null); Stream postStream = conn.EndGetRequestStream(resultRequest); postStream.Write(requestData, 0, requestData.Length); postStream.Dispose(); } try { var responseRequest = conn.BeginGetResponse(null, null); WebResponse responseObject = conn.EndGetResponse(responseRequest); StreamReader sr = new StreamReader(responseObject.GetResponseStream()); return(PaysafeApiClient.parseResponse(sr.ReadToEnd())); } catch (System.Net.WebException ex) { HttpWebResponse response = (HttpWebResponse)ex.Response; StreamReader sr = new StreamReader(response.GetResponseStream()); string body = sr.ReadToEnd(); string exceptionType = null; switch (response.StatusCode) { case HttpStatusCode.BadRequest: // 400 exceptionType = "InvalidRequestException"; break; case HttpStatusCode.Unauthorized: // 401 exceptionType = "InvalidCredentialsException"; break; case HttpStatusCode.PaymentRequired: //402 exceptionType = "RequestDeclinedException"; break; case HttpStatusCode.Forbidden: //403 exceptionType = "PermissionException"; break; case HttpStatusCode.NotFound: //404 exceptionType = "EntityNotFoundException"; break; case HttpStatusCode.Conflict: //409 exceptionType = "RequestConflictException"; break; case HttpStatusCode.NotAcceptable: //406 case HttpStatusCode.UnsupportedMediaType: //415 case HttpStatusCode.InternalServerError: //500 case HttpStatusCode.NotImplemented: //501 case HttpStatusCode.BadGateway: //502 case HttpStatusCode.ServiceUnavailable: //503 case HttpStatusCode.GatewayTimeout: //504 case HttpStatusCode.HttpVersionNotSupported: //505 exceptionType = "APIException"; break; } if (exceptionType != null) { String message = ex.Message; Dictionary <string, dynamic> rawResponse = PaysafeApiClient.parseResponse(body); if (rawResponse.ContainsKey("error")) { message = rawResponse["error"]["message"]; } Object[] args = { message, ex.InnerException }; PaysafeException PaysafeException = Activator.CreateInstance (Type.GetType("Paysafe.Common." + exceptionType), args) as PaysafeException; PaysafeException.rawResponse(rawResponse); if (rawResponse.ContainsKey("error")) { PaysafeException.code(int.Parse(rawResponse["error"]["code"])); } throw PaysafeException; } throw; } throw new PaysafeException("An unknown error has occurred."); }
private void HandlePaysafeExceptionInternal(HttpStatusCode statusCode, string body, Exception innerException) { string exceptionType = null; switch (statusCode) { case HttpStatusCode.BadRequest: // 400 exceptionType = "InvalidRequestException"; break; case HttpStatusCode.Unauthorized: // 401 exceptionType = "InvalidCredentialsException"; break; case HttpStatusCode.PaymentRequired: //402 exceptionType = "RequestDeclinedException"; break; case HttpStatusCode.Forbidden: //403 exceptionType = "PermissionException"; break; case HttpStatusCode.NotFound: //404 exceptionType = "EntityNotFoundException"; break; case HttpStatusCode.Conflict: //409 exceptionType = "RequestConflictException"; break; case HttpStatusCode.NotAcceptable: //406 case HttpStatusCode.UnsupportedMediaType: //415 case HttpStatusCode.InternalServerError: //500 case HttpStatusCode.NotImplemented: //501 case HttpStatusCode.BadGateway: //502 case HttpStatusCode.ServiceUnavailable: //503 case HttpStatusCode.GatewayTimeout: //504 case HttpStatusCode.HttpVersionNotSupported: //505 exceptionType = "ApiException"; break; } if (exceptionType != null) { String message = body; Dictionary <string, dynamic> rawResponse = ParseResponse(body); if (rawResponse.ContainsKey("error")) { message = rawResponse["error"]["message"]; } Object[] args = { message, innerException }; PaysafeException paysafeException = Activator.CreateInstance (Type.GetType("Paysafe.Common." + exceptionType), args) as PaysafeException; paysafeException.RawResponse(rawResponse); if (rawResponse.ContainsKey("error")) { paysafeException.Code(int.Parse(rawResponse["error"]["code"])); } throw paysafeException; } }