public async Task <IActionResult> Gerar(int id) { try { var inscricao = await _inscricaoUsuarioRepository.ObterPorId(id); if (inscricao == null) { return(Response("Inscrição não localizada!", false)); } var dadosConfigPagamento = await _meioPagamentoRepository.Buscar(x => x.Status.Equals("A")); var dadosCurso = await _cursoRepository.ObterPorId(inscricao.ProcessoInscricao.CursoId); var emailPagSeguro = dadosConfigPagamento.FirstOrDefault().Email; var tokenPagSeguro = dadosConfigPagamento.FirstOrDefault().Token; string urlCheckout = $"{urlWsPagueSeguro}/v2/checkout"; var listaItensPedido = new List <PagSeguroItemDTO> { new PagSeguroItemDTO { itemId = id.ToString(), itemQuantity = "1", itemDescription = $"Inscrição para o curso: {dadosCurso.Titulo}", itemAmount = inscricao.ProcessoInscricao.Valor.ToString("F").Replace(",", "."), itemWeight = "200" } }; if (string.IsNullOrEmpty(inscricao.Usuario.Email)) { inscricao.Usuario.Email = "*****@*****.**"; } var dadosComprador = new PagSeguroCompradorDTO { SenderName = inscricao.Usuario.Nome.Length > 50 ? inscricao.Usuario.Nome.Substring(0, 50).Trim() : inscricao.Usuario.Nome.Trim(), senderEmail = inscricao.Usuario.Email.Length > 60 ? inscricao.Usuario.Nome.Substring(0, 60).ToLower().Trim() : inscricao.Usuario.Email.ToLower().Trim(), senderPhone = inscricao.Usuario.TelefoneCelular.Length > 9 ? inscricao.Usuario.TelefoneCelular.Substring(0, 9).Trim() : inscricao.Usuario.TelefoneCelular.Trim(), SenderAreaCode = "62" }; var referencia = id.ToString(); var apiPagSeguro = new PagSeguroAPI(); //Retira os espaçõs entre o nome Regex regex = new Regex(@"\s{2,}"); dadosComprador.SenderName = regex.Replace(dadosComprador.SenderName, " "); dadosComprador.SenderName = dadosComprador.SenderName.Replace("\0", ""); var retornoApiPagSeguro = apiPagSeguro.Checkout(emailPagSeguro, tokenPagSeguro, urlCheckout, listaItensPedido, dadosComprador, referencia); if (!string.IsNullOrEmpty(retornoApiPagSeguro)) { var transacao = new TransacaoInscricao() { Codigo = retornoApiPagSeguro, InscricaoUsuarioId = id }; var registraTransacao = await _transacaoInscricaoRepository.Adicionar(transacao); if (!registraTransacao) { return(Response("Erro na transação de pagamento", false)); } } else { return(Response("Erro ao fazer a comunicação de pagamento", false)); } var paymentUrl = string.Concat($"{urlSitePagueSeguro}/v2/checkout/payment.html?code=", retornoApiPagSeguro); return(Response(paymentUrl)); } catch (Exception ex) { return(ResponseErro(ex)); } }
/// <summary> /// Realiza checkout com a conta parametrizada na configuração do sistema. /// </summary> /// <param name="emailUsuario">E-mail usuário pagseguro.</param> /// <param name="token">Token.</param> /// <param name="urlCheckout">URL Checkout.</param> /// <param name="itens">Itens de venda.</param> /// <param name="comprador">Dados do comprador.</param> /// <param name="reference">Referência da transação.</param> /// <returns></returns> public string Checkout(string emailUsuario, string token, string urlCheckout, List <PagSeguroItemDTO> itens, PagSeguroCompradorDTO comprador, string reference) { //Conjunto de parâmetros/formData. System.Collections.Specialized.NameValueCollection postData = new System.Collections.Specialized.NameValueCollection(); postData.Add("email", emailUsuario); postData.Add("token", token); postData.Add("currency", "BRL"); //postData.Add("email", "*****@*****.**"); ////postData.Add("token", "25625C54F05444CA9CB9030A8CA12119"); //postData.Add("token", "AFCB097BE79B42F9902EAB5886E5477D"); //postData.Add("currency", "BRL"); //postData.Add("itemId1", "0001"); //postData.Add("itemDescription1", "ProdutoPagSeguroI"); //postData.Add("itemAmount1", "3.00"); //postData.Add("itemQuantity1", "1"); //postData.Add("itemWeight1", "200"); //postData.Add("reference", "REF1234"); //postData.Add("senderName", "Jose Comprador"); //postData.Add("senderAreaCode", "44"); //postData.Add("senderPhone", "999999999"); //postData.Add("senderEmail", "*****@*****.**"); //postData.Add("shippingAddressRequired", "false"); for (int i = 0; i < itens.Count; i++) { postData.Add(string.Concat("itemId", i + 1), itens[i].itemId); postData.Add(string.Concat("itemDescription", i + 1), itens[i].itemDescription); postData.Add(string.Concat("itemAmount", i + 1), itens[i].itemAmount); postData.Add(string.Concat("itemQuantity", i + 1), itens[i].itemQuantity); postData.Add(string.Concat("itemWeight", i + 1), itens[i].itemWeight); } //Reference. postData.Add("reference", reference); //Comprador. if (comprador != null) { postData.Add("senderName", comprador.SenderName); postData.Add("senderAreaCode", comprador.SenderAreaCode); postData.Add("senderPhone", comprador.senderPhone); postData.Add("senderEmail", comprador.senderEmail); } //Shipping. postData.Add("shippingAddressRequired", "false"); //Formas de pagamento. //Cartão de crédito e boleto. postData.Add("acceptPaymentMethodGroup", "CREDIT_CARD,BOLETO"); //String que receberá o XML de retorno. string xmlString = null; //Webclient faz o post para o servidor de pagseguro. using (WebClient wc = new WebClient()) { try { //Informa header sobre URL. wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; //Faz o POST e retorna o XML contendo resposta do servidor do pagseguro. var result = wc.UploadValues(urlCheckout, postData); //Obtém string do XML. xmlString = Encoding.ASCII.GetString(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } } //Cria documento XML. XmlDocument xmlDoc = new XmlDocument(); //Carrega documento XML por string. xmlDoc.LoadXml(xmlString); //Obtém código de transação (Checkout). var code = xmlDoc.GetElementsByTagName("code")[0]; //Obtém data de transação (Checkout). var date = xmlDoc.GetElementsByTagName("date")[0]; //Retorna código do checkout. return(code.InnerText); }