private async void ExecuteCadastrarRecipienteCommand()
        {
            try
            {
                var recipient = new Recipient()
                {
                    provider = "Sample Provider",
                    recipient_affiliation_key_in_provider = "4a48baaf-dcdd-40cd-852e-50e3de33d192",
                    recipient_name = "Sample Recipient 2"
                };

                var result = await StoneService.CadastrarRecipiente(recipient);

                if (result != null && result.success)
                {
                    await Application.Current.MainPage.DisplayAlert("Informação", "Recipiente cadastrado!\n" + result.data.recipient_name + "\n" + result.data.recipient_key, "OK");
                }
                else
                {
                    await Application.Current.MainPage.DisplayAlert("Informação", "Não foi possível cadastrar o recipiente!", "OK");
                }
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", ex.Message, "OK");
            }
        }
        private async void ExecuteCancelarSplitCommand()
        {
            var confirm = await Application.Current.MainPage.DisplayAlert("Confirmação", "Confirma cancelamento do split?", "SIM", "NÃO");

            if (confirm)
            {
                Guid guidSplit;
                MensagemSplit = "c5d9b6a6-eed1-4b5e-82b6-4c503408f0c8";

                if (Guid.TryParse(MensagemSplit, out guidSplit))
                {
                    try
                    {
                        var _response = await StoneService.CancelarSplit(guidSplit.ToString());

                        if (_response != null && _response.success)
                        {
                            MensagemSplit = "Split cancelado com sucesso!";
                        }
                        else
                        {
                            var mensagem = new StringBuilder();
                            foreach (var item in _response.operation_report)
                            {
                                mensagem.Append($"{item.property} - {item.message}\n");
                            }

                            await Application.Current.MainPage.DisplayAlert("Informação", mensagem.ToString(), "OK");
                        }
                    }
                    catch (Exception ex)
                    {
                        await Application.Current.MainPage.DisplayAlert("Informação", ex.Message, "OK");
                    }
                }
                else
                {
                    await Application.Current.MainPage.DisplayAlert("Informação", "Chave do split é inválida!", "OK");
                }
            }
        }
        private async void ExecuteGerarTokenCommand()
        {
            try
            {
                var token = await StoneService.GerarToken();

                if (token != null && token.success)
                {
                    Token             = token.data.token;
                    AppSettings.Token = Token;
                }
                else
                {
                    Token = "Erro ao gerar o token!";
                }
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", ex.Message, "OK");
            }
        }
        private async void SplitarPagamentoAsync(Guid transactionKey)
        {
            var recebedores       = new List <SplitData>();
            var quantRecebedores  = 2;
            var valorVenda        = ValorVenda.DefaulFloat().ToString("N2");
            var valorPorRecebedor = (valorVenda.DefaulFloat() / quantRecebedores).ToString("N2").DefaulFloat();

            //--------------------
            //RECIPIENTES DE TESTE
            //--------------------
            recebedores.Add(new SplitData()
            {
                recipient_key = "c4286a21-b9c2-45ef-8f4b-c2eb4e89538d", //Guid do lojista na Stone
                amount        = valorPorRecebedor
            });

            recebedores.Add(new SplitData()
            {
                recipient_key = "4c036ef6-8302-4fc2-bff2-2ba4263c2114",
                amount        = valorPorRecebedor
            });
            //---------------------------------
            //VALIDAÇÃO DO VALOR POR RECIPIENTE
            //O VALOR DISTRIBUÍDO NÃO PODE ULTRAPASSAR O VALOR DA VENDA (Valor da venda / Quantidade de recipientes)
            //------------------------------------------------------------------------------------------------------
            var valorFinal = valorPorRecebedor * quantRecebedores;

            if (valorFinal > valorVenda.DefaulFloat())
            {
                var valorDif = valorFinal - valorVenda.DefaulFloat();
                valorDif = valorDif / quantRecebedores;
                foreach (var item in recebedores)
                {
                    item.amount -= valorDif.ToString("N2").DefaulFloat();
                }
            }
            //-----------------------------------------------------------

            var split = new Split()
            {
                provider = "Sample Provider",
                provider_transaction_key = transactionKey.ToString(),
                transaction_amount       = valorVenda.DefaulFloat(),
                amount_split_mode        = Split.AmountSplitMode.absolute,
                fee_liability            = Split.FeeLiability.Merchant,
                splits = recebedores
            };

            try
            {
                var _response = await StoneService.EnviarSplit(split, Utils.STONE_TOKEN_HOM);

                if (_response != null && _response.success)
                {
                    MensagemSplit = _response.data.split_key;
                }
                else
                {
                    var mensagem = new StringBuilder();
                    foreach (var item in _response.operation_report)
                    {
                        mensagem.Append($"{item.property} - {item.message}\n");
                    }

                    await Application.Current.MainPage.DisplayAlert("Informação", mensagem.ToString(), "OK");
                }
            }
            catch (Exception ex)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", ex.Message, "OK");
            }
        }
        private async void ExecuteEnviarTransacaoCommand()
        {
            if (string.IsNullOrEmpty(NumeroCartao))
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe o número do cartão!", "OK");

                return;
            }

            if (string.IsNullOrEmpty(Validade) || Validade.Length < 7)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe a data de validade!", "OK");

                return;
            }

            if (string.IsNullOrEmpty(CVV))
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe o código de segurança (CVV)!", "OK");

                return;
            }

            if (string.IsNullOrEmpty(Titular))
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe o nome do titular!", "OK");

                return;
            }

            if (string.IsNullOrEmpty(ValorVenda) || Convert.ToDecimal(ValorVenda) == 0)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe o valor da venda!", "OK");

                return;
            }

            if (string.IsNullOrEmpty(NumeroParcelas) || Convert.ToInt32(NumeroParcelas) == 0)
            {
                await Application.Current.MainPage.DisplayAlert("Informação", "Informe o número de parcelas!", "OK");

                return;
            }

            using (UserDialogs.Instance.Loading("Aguarde, enviando transação...", null, null, true, MaskType.Black))
            {
                var cartaoCredito = new CartaoCredito()
                {
                    Numero         = NumeroCartao,
                    Validade       = Validade,
                    CVV            = CVV,
                    ValorVenda     = Convert.ToDecimal(ValorVenda),
                    NumeroParcelas = Convert.ToInt32(NumeroParcelas),
                    OrderReference = Guid.NewGuid().ToString(),
                    Bandeira       = Bandeira,
                    Titular        = Titular
                };

                var identBandeira = cartaoCredito.Numero.ValidarBandeiraCartao();
                if (identBandeira == Stone.EnumTypes.CreditCardBrandEnum.NaoIdentificada)
                {
                    await Application.Current.MainPage.DisplayAlert("Informação", "Bandeira não suportada!", "OK");

                    return;
                }
                else
                {
                    cartaoCredito.CreditCardBrand = identBandeira;
                }

                var _response = await StoneService.EnviarTransacao(cartaoCredito);

                if (_response != null)
                {
                    //---------------------
                    //RESPOSTA DA TRANSAÇÃO
                    //---------------------
                    _saleResponse = _response;
                    //------------------------

                    if (_response.ErrorReport == null)
                    {
                        MensagemTransacao = $"Chave da Autorização\n{_response.CreditCardTransactionResultCollection?[0].TransactionKey.ToString()}\n" + _response.CreditCardTransactionResultCollection?[0].AcquirerMessage;

                        var confirm = await Application.Current.MainPage.DisplayAlert("Confirmação", "Splitar transação?", "SIM", "NÃO");

                        if (confirm)
                        {
                            SplitarPagamentoAsync(_saleResponse.CreditCardTransactionResultCollection[0].TransactionKey);
                        }
                    }
                    else
                    {
                        MensagemTransacao = string.Empty;

                        if (_response.ErrorReport != null && _response.ErrorReport.ErrorItemCollection.Count > 1)
                        {
                            foreach (var error in _response.ErrorReport.ErrorItemCollection)
                            {
                                MensagemTransacao = error.ErrorCode + " - " + error.Description + "\n";
                            }

                            MensagemTransacao = MensagemTransacao.Substring(0, MensagemTransacao.Length - 1);
                        }
                        else
                        {
                            MensagemTransacao = _response.ErrorReport.ErrorItemCollection[0].Description;
                        }
                    }
                }
                else
                {
                    MensagemTransacao = "Não foi possível processar a solicitação. Tente novamente!";
                }
            }
        }