예제 #1
0
        public static async Task <CreateSaleResponse> EnviarTransacao(CartaoCredito cartaoCredito)
        {
            var model = new CreateSaleResponse();

            try
            {
                var transacao = new CreditCardTransaction()
                {
                    AmountInCents = Convert.ToInt64(cartaoCredito.ValorVenda.ToString("N2").Replace(",", "")),
                    CreditCard    = new CreditCard()
                    {
                        CreditCardBrand  = cartaoCredito.CreditCardBrand,
                        CreditCardNumber = cartaoCredito.Numero,
                        ExpMonth         = cartaoCredito.Validade.Substring(0, 2).DefaultInt(),
                        ExpYear          = cartaoCredito.Validade.Substring(5, 2).DefaultInt(),
                        HolderName       = cartaoCredito.Titular, //O nome do portador deve conter mais de um caracter
                        SecurityCode     = cartaoCredito.CVV
                    },
                    InstallmentCount = cartaoCredito.NumeroParcelas,
                    Options          = new CreditCardTransactionOptions()
                    {
                        //0 - PRODUÇÃO
                        //1 - HOMOLOGAÇÃO (TESTE)
                        PaymentMethodCode  = 1,
                        CurrencyIso        = CurrencyIsoEnum.BRL,
                        SoftDescriptorText = "Obraki"                            //Texto da fatura do cartão
                    },
                    CreditCardOperation = CreditCardOperationEnum.AuthAndCapture //Autorização e Captura Instantânea
                };

                var saleRequest = new CreateSaleRequest()
                {
                    CreditCardTransactionCollection = new Collection <CreditCardTransaction>(new CreditCardTransaction[] { transacao }),
                    Order = new Order()
                    {
                        //Um dos campos que não é obrigatório, mas que é de extrema importância é o OrderReference.
                        //Aconselhamos que sempre envie essa informação, pois assim, facilitara a sua gestão!
                        OrderReference = cartaoCredito.OrderReference.ToString()
                    }
                };

                var data = JsonConvert.SerializeObject(saleRequest);
                //HttpContent content = new StringContent(data, Encoding.UTF8, "application/json");
                //content.Headers.Add("Keep-Alive", "true");

                var request = (HttpWebRequest)WebRequest.Create(new Uri($"{Utils.STONE_BASE_URL}/Sale"));
                request.ContentType            = Utils.CONTENT_TYPE;
                request.Accept                 = Utils.CONTENT_TYPE;
                request.Method                 = "POST";
                request.Headers["MerchantKey"] = Utils.STONE_MERCHANT_KEY;

                using (var writer = new StreamWriter(await request.GetRequestStreamAsync()))
                {
                    writer.Write(data);
                    writer.Flush();
                    writer.Dispose();
                }

                using (var response = await request.GetResponseAsync())
                {
                    using (var stream = response.GetResponseStream())
                    {
                        var streamReader = new StreamReader(stream);
                        var result       = streamReader.ReadToEnd();

                        if (!string.IsNullOrEmpty(result))
                        {
                            model = JsonConvert.DeserializeObject <CreateSaleResponse>(result);
                        }
                        else
                        {
                            model.ErrorReport = new ErrorReport()
                            {
                                ErrorItemCollection = new Collection <ErrorItem>()
                                {
                                    new ErrorItem()
                                    {
                                        ErrorCode   = 999,
                                        Description = TransactionResult.Message("c999")
                                    }
                                }
                            };
                        }
                    }
                }

                return(model);
            }
            catch (WebException ex)
            {
                using (WebResponse response = ex.Response)
                {
                    HttpWebResponse httpResponse = (HttpWebResponse)response;

                    model.ErrorReport = new ErrorReport()
                    {
                        ErrorItemCollection = new Collection <ErrorItem>()
                        {
                            new ErrorItem()
                            {
                                ErrorCode   = ((int)httpResponse.StatusCode),
                                Description = TransactionResult.Message(((int)httpResponse.StatusCode).ToString())
                            }
                        }
                    };
                }

                return(model);

                //await Application.Current.MainPage.DisplayAlert("Informação", ex.Message, "OK");
            }
        }