A integração com a Cielo (VisaNet) é feita via troca de XML, como se fosse um "WebServices", mas na minha opinião está longe de ser um WebServices pois não há um WSDL, ou qualquer geração de código automatizada pela plataforma cliente, por isso tive que criar várias estruturas auxiliares para "componentizar" as chamadas, e assim é possível fazer as chamadas a Cielo de forma mais fácil.
Minha meta é fornecer para o programador final, uma código eficiente e fácil que possa fazer tudo em 1 linha, veja o exemplo abaixo:
CieloTransacao trans = Cielo.Transacao( "1006993069", "25fbb99741c739dd84d7b06ec78c9bac718838630f30b112d033ce2e621b34f3", "4012001037141112", "201501", "585", 5, 123, DateTime.Now, CieloBandeiras.Visa, CieloProdutos.Parcelado, 3, true);
Aqui é enviado todos os parâmetros de forma que é retornado em um objeto "trans" todos os dados que podem ser facilmente interpretados, pois estão estruturados de acordo com o diagrama abaixo:
.
Mas para isso estou fazendo todas as abstrações do XML de retorno assim:
1: try 2: { 3: XmlDocument xml = new XmlDocument();
4: xml.LoadXml(XML);
5: if (xml.DocumentElement.Name == "erro")
6: {
7: ErroCodigo = Int32.Parse(xml.DocumentElement.SelectSingleNode("codigo").InnerText);
8: ErroMensagem = xml.DocumentElement.SelectSingleNode("mensagem").InnerText; 9: // códigos removidos 10: }
11: else 12: { 13: TID = xml.DocumentElement.SelectSingleNode("tid").InnerText;
14: PAN = xml.DocumentElement.SelectSingleNode("pan").InnerText; 15: UrlAutenticacao = xml.DocumentElement.SelectSingleNode("url-autenticacao").InnerText;
16: Pedido = new CieloPedido(xml.DocumentElement.SelectSingleNode("dados-pedido")); 17: Pagamento = new CieloPagamento(xml.DocumentElement.SelectSingleNode("forma-pagamento"));
18: Status = (CieloStatus)Int32.Parse(xml.DocumentElement.SelectSingleNode("status").InnerText); 19: Autenticacao = new CieloAutenticacao(xml.DocumentElement.SelectSingleNode("autenticacao"));
20: Autorizacao = new CieloAutorizacao(xml.DocumentElement.SelectSingleNode("autorizacao")); 21: Captura = new CieloCaptura(xml.DocumentElement.SelectSingleNode("captura"));
22: } 23: ErroCodigo = 0;
24: ErroMensagem = "OK";
25: }
Cada construtora recebe o nó XML respectivo para se criar, por exemplo:
1: public CieloAutorizacao(XmlNode node)
2: {
3: if (node == null)
4: {
5: XML = null;
6: Codigo = 0;
7: // Códigos removidos 8: }
9: else 10: { 11: XML = node.InnerXml;
12: Codigo = Int32.Parse(node.SelectSingleNode("codigo").InnerText);
13: Mensagem = node.SelectSingleNode("codigo").InnerText;
14: DataHora = DateTime.Parse(node.SelectSingleNode("data-hora").InnerText); 15: Valor = Int32.Parse(node.SelectSingleNode("valor").InnerText) / 100;
16: LR = node.SelectSingleNode("lr").InnerText; 17: ARP = Int32.Parse(node.SelectSingleNode("arp").InnerText);
18: NSU = Int32.Parse(node.SelectSingleNode("nsu").InnerText); 19: }
20: }
E para gerar o XML de cada estrutura fiz via propriedade assim:
1: public string XML
2: {
3: get
4: {
5: return 6: " \r\n" +
7: " " + NumeroPedido + "\r\n" +
8: " " + Int32.Parse((Valor * 100).ToString()) + "\r\n" +
9: " " + Moeda + "\r\n" +
10: " " + DataHora.ToString("yyyy-MM-ddTHH:mm:ss") + "\r\n" +
11: " " + Idioma + "\r\n" +
12: " \r\n";
13: }
14: }
Em breve este componente estará pronto e a venda em meu site: www.boletoasp.com.br