/// <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 })); }
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); } } }