private async Task AddLogAsync(IWebHookWorkItem workItem, string error = null) { var log = new WebHookLog { Error = error, WebHookId = workItem.WebHook.Id, WebHookNotificationId = workItem.Id }; _context.Add(log); try { await _context.SaveChangesAsync(); if (!string.IsNullOrEmpty(error)) { Logger.LogInformation(error); } } catch (Exception e) { if (!string.IsNullOrEmpty(error)) { Logger.LogError(error); } Logger.LogError($"Log failed for WebHook {workItem.WebHook.Id}. [{workItem.WebHook.Callback}]: {e.Message}"); } }
public IHttpActionResult post() { WebHookLog dbwl = new WebHookLog(); // retrieve xero key var xerosignature = Request.Headers.GetValues("x-xero-signature").FirstOrDefault(); var payload = Request.Content.ReadAsStringAsync().Result; String app_key = "4q1NTvJRtUuiUCvpo3FKSd3NlAUom53uY+ODoyr4sskmxPa9JSZifVM7g8S8G8k7Ipwde6Hj3MFVXMnmyrD9pg=="; string generatedsignature = ""; using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(app_key))) { var messageBytes = Encoding.UTF8.GetBytes(payload); var hash = hmac.ComputeHash(messageBytes); generatedsignature = Convert.ToBase64String(hash); } var isValid = generatedsignature == xerosignature; if (!isValid) { dbwl.body = "Invalid Xerosignature"; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); return(Unauthorized()); } var xevents = JsonConvert.DeserializeObject <XeroWebhookEvents>(payload); foreach (Xerowebhookevent xevent in xevents.events) { switch (xevent.eventCategory) { case "INVOICE": dbwl.body = "received xero web hook invoice "; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); dbwl.body = payload; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); var res1 = UNMSHelper.addPaymentFromXero(XeroHelper.getXeroInvoice(xevent.resourceId)); break; } } dbwl.body = "OK Valid"; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); return(Ok()); }
public IHttpActionResult post() { WebHookLog dbwl = new WebHookLog(); var payload = Request.Content.ReadAsStringAsync().Result; dbwl.body = payload; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); WebhookEvent uwebhook = JsonConvert.DeserializeObject <WebhookEvent>(payload); dbwl.body = uwebhook.entity.ToString(); dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); switch (uwebhook.entity) { case "invoice": WebhookEventInvoice webhookinvoice = JsonConvert.DeserializeObject <WebhookEventInvoice>(payload); UNMSHelper.addorupdateInvoiceFromUNMS(webhookinvoice.extraData.entity); break; case "payment": WebhookEventPayment webhookpayment = JsonConvert.DeserializeObject <WebhookEventPayment>(payload); // check if it came from xero originally if (webhookpayment.extraData.entity.Note != "from Xero") { UNMSHelper.addorupdatePaymentFromUNMS(webhookpayment.extraData.entity); } break; case "client": WebhookEventClient webhookclient = JsonConvert.DeserializeObject <WebhookEventClient>(payload); UNMSHelper.addorupdateClientFromUNMS(webhookclient.extraData.entity); break; case "ticket": WebhookEventTicket webhookticket = JsonConvert.DeserializeObject <WebhookEventTicket>(payload); UNMSHelper.editTicketFromUNMS(webhookticket.extraData.entity); break; } return(Ok()); }
public static bool httpPost(string entity, object entityObj) { var client = gethttpclient(); var postdataJson = JsonConvert.SerializeObject(entityObj); var postdataString = new StringContent(postdataJson, new UTF8Encoding(), "application/json"); var responseMessage = client.PostAsync(entity, postdataString).Result; var responseString = responseMessage.Content.ReadAsStringAsync().Result; if (responseMessage.IsSuccessStatusCode) { return(true); } else { OrionAdminEntities db = new OrionAdminEntities(); WebHookLog dbwl = new WebHookLog(); dbwl.body = "err " + responseString; dbwl.Date = DateTime.Now; db.WebHookLogs.Add(dbwl); db.SaveChanges(); return(false); }; }