Exemplo n.º 1
0
        public async Task <RequestReturn> AddRequest(Request request)
        {
            var result = new RequestReturn();

            var sign = await GetOauth();

            if (sign.IsAuthenticated)
            {
                var payload = new Dictionary <string, string>
                {
                    { "Token", _config.GetToken() },
                    { "CodRequest", request.CodRequest },
                    { "SKU", request.SKU },
                    { "Name", request.Name },
                    { "CPF_CNPJ", request.Document },
                    { "Email", request.Email },
                    { "Address", request.AddressStreet },
                    { "AddressNumber", request.AddressNumber },
                    { "AddressComplement", request.AddressComplement },
                    { "District", request.AddressDistrict },
                    { "City", request.AddressCity },
                    { "State", request.AddressState },
                    { "CEP", request.AddressZipCode },
                    { "PhoneContact", request.Phone },
                    { "DateRegister", string.Format("{0:yyyy-MM-dd}", DateTime.Now) },
                    { "AmountPremium", request.Amount.ToString() },
                    { "PricePremium", request.PricePremium.GetPriceWithCommand() },
                    { "PayBillBarcode", request.PayBillBarcode },
                    { "PayBillValue", request.PayBillValue.GetPriceWithCommand() },
                    { "CodeCard", request.CodeCard }
                };

                var content = new FormUrlEncodedContent(payload);

                _client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", sign.AccessToken);
                var response = await _client.PostAsync("api/v3/addresquest", content);

                result.Success = response.IsSuccessStatusCode;

                if (response.IsSuccessStatusCode)
                {
                    var information = response.Content.ReadAsStringAsync().Result;
                    result = JsonConvert.DeserializeObject <RequestReturn>(information);
                }
                else
                {
                    var information = response.Content.ReadAsStringAsync().Result;
                    result = JsonConvert.DeserializeObject <RequestReturn>(information);
                    Log.Error("ERP - Adicionar resgate - Error: {Message}", result.Message);
                }
            }

            return(result);
        }
Exemplo n.º 2
0
        private RequestReturn Request <T>(string url, TypeRequest typerequest, byte[] bytedata = null, string[] moreheader = null)
        {
            RequestReturn result = new RequestReturn();

            http_request = new HttpRequest_(new Uri(url), typerequest.ToString());
#if DEBUG
            http_request.debug = Debug;
#endif
            if (typeof(T) == typeof(Stream) && bytedata == null && typerequest != TypeRequest.PUT)
            {
                http_request.ReceiveTimeout = this.ReceiveTimeout_;
            }
            http_request.AddHeader(Host);
            http_request.AddHeader("Authorization", "Bearer " + Token.access_token);
            if (moreheader != null)
            {
                foreach (string h in moreheader)
                {
                    http_request.AddHeader(h);
                }
            }
            else if (bytedata != null && (typerequest == TypeRequest.POST || typerequest == TypeRequest.PATCH))
            {
                http_request.AddHeader(Header_ContentTypeApplicationJson);
            }
            if ((typerequest == TypeRequest.POST || typerequest == TypeRequest.DELETE) && bytedata == null)
            {
                http_request.AddHeader("Content-Length: 0");
            }
            if (bytedata != null && (typerequest == TypeRequest.POST || typerequest == TypeRequest.PATCH))
            {
                http_request.AddHeader("Content-Length: " + bytedata.Length.ToString());
                Stream stream = http_request.SendHeader_And_GetStream();
                stream.Write(bytedata, 0, bytedata.Length);
                stream.Flush();
#if DEBUG
                Console.WriteLine("DriveAPIHttprequestv2: >>send data: " + Encoding.UTF8.GetString(bytedata));
#endif
            }
            try //get response
            {
                if (typeof(T) == typeof(string))
                {
                    result.DataTextResponse = http_request.GetTextDataResponse(false, true);
                    result.HeaderResponse   = http_request.HeaderReceive;
                }
                else if (typeof(T) == typeof(Stream))
                {
                    if (bytedata != null || typerequest == TypeRequest.PUT)
                    {
                        result.stream = http_request.SendHeader_And_GetStream();                                                    //get stream upload
                    }
                    else
                    {
                        result.stream = http_request.ReadHeaderResponse_and_GetStreamResponse(true); //get stream response
                    }
                }
                else
                {
                    throw new Exception("Error typereturn.");
                }
                return(result);
            }
            catch (HttpException ex)
            {
                result.DataTextResponse = http_request.TextDataResponse;
                GoogleDriveErrorMessage message;
                try { message = Newtonsoft.Json.JsonConvert.DeserializeObject <GoogleDriveErrorMessage>(ex.Message); }
                catch { throw ex; }// other message;
                switch (message.error.code)
                {
                case 204: if (typerequest == TypeRequest.DELETE)
                    {
                        return(result);
                    }
                    break;                                                                // delete result

                case 401:
                    if (Monitor.TryEnter(SyncRefreshToken))
                    {
                        try
                        {
                            Monitor.Enter(SyncRefreshToken);
                            Token = oauth.RefreshToken();
                            TokenRenewEvent.Invoke(Token);
                            return(Request <T>(url, typerequest, bytedata, moreheader));
                        }
                        finally { Monitor.Exit(SyncRefreshToken); }
                    }
                    else
                    {
                        try { Monitor.Enter(SyncRefreshToken); return(Request <T>(url, typerequest, bytedata, moreheader)); }
                        finally { Monitor.Exit(SyncRefreshToken); }
                    }

                case 403:
                    Error403 err = (Error403)Enum.Parse(typeof(Error403), message.error.errors[0].reason);
                    switch (err)
                    {
                    case Error403.forbidden:
                    case Error403.appNotAuthorizedToFile:
                    case Error403.domainPolicy:
                    case Error403.insufficientFilePermissions:
#if DEBUG
                        Console.WriteLine("DriveAPIHttprequestv2 Error403: " + result.DataTextResponse);
#endif
                        break;

                    case Error403.dailyLimitExceeded:
                    case Error403.rateLimitExceeded:
                    case Error403.sharingRateLimitExceeded:
                    case Error403.userRateLimitExceeded:
                        if (limit != null)
                        {
                            limit.Invoke();
                        }
#if DEBUG
                        Console.WriteLine("DriveAPIHttprequestv2 LimitExceeded: " + err.ToString());
#endif
                        try { Monitor.Enter(SyncLimitExceeded); Thread.Sleep(5000); } finally { Monitor.Exit(SyncLimitExceeded); }
                        return(Request <T>(url, typerequest, bytedata, moreheader));

                    case Error403.abuse:        //file malware or virut
                        if (acknowledgeAbuse_)
                        {
                            return(Request <T>(url + "&acknowledgeAbuse=true", typerequest, bytedata, moreheader));
                        }
                        else
                        {
                            break;
                        }

                    default: break;
                    }
                    break;

                case 308:
                    if (typerequest == TypeRequest.PUT && typeof(T) == typeof(Stream))
                    {
                        result.stream = http_request.GetStream();
                        return(result);
                    }
                    else
                    {
                        break;
                    }

                default: break;
                }
                throw ex;
            }
        }