Example #1
0
        /// <summary>
        /// Cadastre um ou mais webhooks para receber os tipos de notificação subescritos nos eventos disponíveis.
        /// Os webhooks e inscrição a um evento precisa ser única por recurso, o que significa que cada conta digital DEVE ter seu próprio webhook registrado.Não há webhook global.Você pode usar o endpoint para todos os registros de webhook, com ou sem parametros de cadeia de consulta.
        /// Atenção: O webhook deve usar HTTP sobre SSL encriptado e começar com https://.
        /// Não é possível se inscrever em um evento que já tenha esteja com uma inscrição ativa. Este deve ser desativado para que uma nova inscrição seja feita.
        /// </summary>
        /// <param name="resourceToken"></param>
        /// <param name="webhook"></param>
        /// <returns></returns>
        public Webhook CreateWebhook(string resourceToken, Models.Requests.CreateWebhookResource.CreateWebhook webhook)
        {
            if (string.IsNullOrWhiteSpace(resourceToken))
            {
                throw new ArgumentNullException(nameof(resourceToken));
            }

            if (string.IsNullOrWhiteSpace(webhook.BaseUrl))
            {
                throw new ArgumentNullException(nameof(webhook.BaseUrl));
            }

            if (webhook.EventTypes == null || webhook.EventTypes.Count == 0)
            {
                throw new ArgumentNullException(nameof(webhook.EventTypes));
            }

            var request = new Requests.Notifications.CreateWebhookRequest(Client.GetRequestContext());

            return(request.Execute(new Models.Requests.CreateWebhookResource()
            {
                ResourceToken = resourceToken,
                Webhook = webhook
            }));
        }
Example #2
0
        public void Notifications()
        {
            var service = new NotificationsService(_Client);

            //
            // Listar tipos de eventos

            var eventTypes = service.ListEventTypes();

            Assert.IsNotNull(eventTypes);
            Assert.IsNotNull(eventTypes.Embedded);
            Assert.IsNotNull(eventTypes.Embedded.EventTypes);
            Assert.IsTrue(eventTypes.Embedded.EventTypes.Count > 0);

            //
            // Remove todos os webhooks

            var oldWebhooks = service.ListWebhooks(_Client.Credentials.PrivateToken);

            if (oldWebhooks != null && oldWebhooks.Embedded != null && oldWebhooks.Embedded.Webhooks != null)
            {
                foreach (var webhook in oldWebhooks.Embedded.Webhooks)
                {
                    service.DeleteWebhook(_Client.Credentials.PrivateToken, webhook.Id);
                }
            }

            //
            // Criar webhook

            var allEventTypes = Enum.GetValues <Models.EventName>().ToList();

            var createWebhook = new Models.Requests.CreateWebhookResource.CreateWebhook
            {
                BaseUrl         = "https://domain.com",
                QueryParameters = new Dictionary <string, object>
                {
                    ["debug"] = true
                },
                EventTypes = Enum.GetValues <Models.EventName>().ToList()
            };

            var newWebhook = service.CreateWebhook(_Client.Credentials.PrivateToken, createWebhook);

            Assert.IsNotNull(newWebhook);
            Assert.AreEqual(newWebhook.Url.ToLower(), $"{createWebhook.BaseUrl}/juno/wh/notifications?debug=true".ToLower());
            Assert.IsTrue(newWebhook.EventTypes.Count == allEventTypes.Count);

            var newWebhookId = newWebhook.Id;

            //
            // Listar webhooks

            var webhooks = service.ListWebhooks(_Client.Credentials.PrivateToken);

            Assert.IsNotNull(webhooks);
            Assert.IsNotNull(webhooks.Embedded);
            Assert.IsNotNull(webhooks.Embedded.Webhooks);
            Assert.IsTrue(webhooks.Embedded.Webhooks.Count > 0 && webhooks.Embedded.Webhooks.Any(o => o.Id == newWebhookId));

            //
            // Consultar webhook

            newWebhook = service.GetWebhook(_Client.Credentials.PrivateToken, newWebhookId);

            Assert.IsNotNull(newWebhook);
            Assert.AreEqual(newWebhook.Id, newWebhookId);

            //
            // Atualizar webhook

            var updateWebhook = new Models.Requests.UpdateWebhookResource.UpdateWebhook
            {
                Status     = Models.WebhookStatus.INACTIVE,
                EventTypes = new List <Models.EventName> {
                    Models.EventName.CHARGE_READ_CONFIRMATION
                }
            };

            newWebhook = service.UpdateWebhook(_Client.Credentials.PrivateToken, newWebhookId, updateWebhook);

            Assert.IsNotNull(newWebhook);
            Assert.AreEqual(newWebhook.Status, Models.WebhookStatus.INACTIVE);
            Assert.IsTrue(newWebhook.EventTypes.Count == 1 && newWebhook.EventTypes[0].Name == Models.EventNameExtended.CHARGE_READ_CONFIRMATION);

            //
            // Remover webhook

            service.DeleteWebhook(_Client.Credentials.PrivateToken, newWebhookId);

            //
            // Remover todos os webhooks

            webhooks = service.ListWebhooks(_Client.Credentials.PrivateToken);

            if (webhooks != null && webhooks.Embedded != null && webhooks.Embedded.Webhooks != null)
            {
                foreach (var webhook in webhooks.Embedded.Webhooks)
                {
                    service.DeleteWebhook(_Client.Credentials.PrivateToken, webhook.Id);
                }
            }
        }