Esempio n. 1
0
        /// <summary>
        /// Gera o cabeçalho de autenticação OAuth.
        /// </summary>
        /// <param name="authenticateType">Tipo de Autenticação.</param>
        /// <param name="oauth">Objeto de dados para autenticação OAuth.</param>
        /// <returns>Cabeçalho de autenticação OAuth.</returns>
        public static string GenerateOAuth(string authenticateType, OAuthRequestData oauth)
        {
            string nonce = GenerateNonce();
            string timestamp = GenerateOAuthTimestamp();

            StringBuilder oAuthBuilder = new StringBuilder(authenticateType);
            oAuthBuilder.Append(" ");
            AppendProperty(OAuthConstants.REALM_PARAM, oauth.Realm, true, oAuthBuilder);
            AppendProperty(OAuthConstants.CONSUMER_KEY_PARAM, oauth.ConsumerKey, true, oAuthBuilder);
            AppendProperty(OAuthConstants.NONCE_PARAM, nonce, true, oAuthBuilder);
            AppendProperty(OAuthConstants.SIGNATURE_PARAM,
                GenerateSignature(oauth.ConsumerKey, nonce, timestamp, oauth.SignatureMethod, oauth.Version),
                true,
                oAuthBuilder);
            AppendProperty(OAuthConstants.SIGNATURE_METHOD_PARAM, oauth.SignatureMethod, true, oAuthBuilder);
            AppendProperty(OAuthConstants.TIMESTAMP_PARAM, timestamp, true, oAuthBuilder);
            AppendProperty(OAuthConstants.VERSION_PARAM, oauth.Version, false, oAuthBuilder);

            return oAuthBuilder.ToString();
        }
        public void CreateTransactionTest()
        {
            TransactionService target = new TransactionService();
            TransactionRequest request = new TransactionRequest()
            {
                Buyer = new Domain.Account.Customer()
                {
                    Address = new Domain.Account.Address()
                    {
                        address = "Rua teste teste",
                        City = "Cidade Modelo",
                        Complement = "Apto 123",
                        Neighborhood = "Bairro de Teste",
                        Number = "123",
                        State = StateEnum.MINAS_GERAIS,
                        ZipCode = "38408-266"
                    },
                    BirthDate = new DateTime(1986, 07, 21),
                    CellPhone = "3499265135",
                    CompanyName = "Empresa X",
                    Cnpj = "72139715000130",
                    Cpf = "85082236504",
                    Gender = GenderEnum.MALE,
                    IssueRgDate = new DateTime(2010, 06, 25),
                    Mail = "*****@*****.**",
                    Name = "Bruno Aparecido Capel Moretti",
                    OrganConsignorRg = "SSP",
                    Phone = "3432558584",
                    Rg = "13194030",
                    SearchToken = String.Empty,
                    StateConsignorRg = StateEnum.MINAS_GERAIS
                },
                PaymentMethod = new PaymentMethod(PaymentMethodEnum.BB_ONLINE_TRANSFER),
                Products = new List<Product>() { { new Product("1236456", "Produto de teste 1", 5, new Decimal(15.25), "Produto exemplo") } },
                SellerMail = "*****@*****.**",
                OrderId = "123456",
                Free = "Texto livre para o usuário...",
                Freight = new Decimal(10.50),
                FreightType = FreightTypeEnum.SEDEX,
                Discount = new Decimal(1.95),
                Addition = new Decimal(2.65),
                UrlReturn = "retorno.pagamentodigital.com.br",
                UrlNotification = "aviso.pagamentodigital.com.br",
                Installments = 1,
                Currency = CurrencyEnum.REAL,
                AcceptedContract = true,
                ViewedContract = true
            };

            OAuthRequestData oauth = new OAuthRequestData("437f7c3021a87ebf1cefb17be66e3fb72fa8dd51");

            TransactionResponse actual = null;
            try
            {
                actual = target.CreateTransaction(request, oauth);
                Assert.IsNotNull(actual);
            }
            catch (ServiceException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Obtém o dicionário do cabeçalho de autenticação.
        /// </summary>
        /// <param name="oauth">Objeto de dados para autenticação OAuth.</param>
        /// <returns>Dicionário preenchido com os Parâmetros e Valores.</returns>
        private Dictionary<string, string> GetOAuthHeader(OAuthRequestData oauth)
        {
            string oAuthData = OAuthUtils.GenerateOAuth(AUTHENTICATION_TYPE, oauth);

            return new Dictionary<string, string>(1) { { AuthConstants.AUTHORIZATION, oAuthData } };
        }
        public void CreateTransactionWithExtendedWarrantyTest()
        {
            List<SearchProduct> products = new List<SearchProduct>() {
                new SearchProduct("nokia", 1550.00),
                new SearchProduct("samsung", 10.00)
            };

            ExtendedWarrantyResponse response = searchExtendedWarranty(products);

            Assert.AreEqual<int>(response.code, 2);

            Dictionary<string, ResponseProducts> reponseProducts = response.productsByDescrition();

            List<Product> Products = new List<Product>();

            ResponseProducts nokia = null;
            reponseProducts.TryGetValue("nokia", out nokia);

            Assert.IsNotNull(nokia);

            ResponseProducts samsung = null;
            reponseProducts.TryGetValue("samsung", out samsung);

            Assert.IsNotNull(samsung);

            Products.Add(newProduct(nokia));

            Products.Add(newProduct(samsung));

            TransactionRequest transactionRequest = getTransactionRequest(Products);

            OAuthRequestData oauth = new OAuthRequestData("437f7c3021a87ebf1cefb17be66e3fb72fa8dd51");

            TransactionResponse actual = null;
            try
            {
                TransactionService target = new TransactionService();
                actual = target.CreateTransaction(transactionRequest, oauth);
                Assert.IsNotNull(actual);
            }
            catch (ServiceException ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// Cria uma transação a partir dos dados informados.
        /// </summary>
        /// <param name="request">Objeto que contém informações para a criação da transação.</param>
        /// <param name="oauth">Objeto que contém informações de autenticação para consumir o serviço.</param>
        /// <returns>Objeto que contém informações de status da transação criada.</returns>
        public TransactionResponse CreateTransaction(TransactionRequest request, OAuthRequestData oauth)
        {
            string data = JsonConvert.SerializeObject(request,
                Formatting.None,
                new JsonSerializerSettings
                {
                    ContractResolver = new CamelCasePropertyNamesContractResolver(),
                    Converters = new List<JsonConverter>() {
                        { new BooleanConverter() },
                        { new DateTimeConverter() }
                    }
                });

            HttpClientResponse response = this.HttpClient.Post(
                ConfigUtil.UriTransactionCreateService,
                this.GetParams(data),
                this.GetOAuthHeader(oauth));

            if (response.HttpStatus != HttpStatusCode.OK)
            {
                // ErrorList
                throw new ServiceException(JsonConvert.DeserializeObject<ErrorList>(response.ResponseBody));
            }

            return JsonConvert.DeserializeObject<TransactionResponse>(response.ResponseBody);
        }