public async Task ProcessWebHookData(FbHookData fbData) { if (fbData == null || !fbData.Entry.Any()) { return; } var changes = fbData.Entry.First().Changes; if (changes == null || !changes.Any()) { return; } if (fbData.Object != "page") { return; } string pageId = fbData.Entry.First().Id; SocialAccount socialAccount = await GetSoicalAccount(pageId); if (socialAccount == null) { return; } foreach (var change in changes) { if (socialAccount != null) { var strategory = _strategyFactory.Create(change); if (strategory != null) { FacebookProcessResult result = null; await UnitOfWorkManager.Run(TransactionScopeOption.RequiresNew, socialAccount.SiteId, async() => { result = await strategory.Process(socialAccount, change); }); if (result != null) { await result.Notify(socialAccount.SiteId); } } } } }
/// <summary> /// This is call back url for facebook web hook. /// </summary> /// <returns></returns> public async Task <IHttpActionResult> Post() { var request = Request; string fbEntry = await request.Content.ReadAsStringAsync(); Hub.Clients.All.newRaw(fbEntry); lock (_lock) { if (_fbEntries.Contains(fbEntry)) { return(Ok()); //facebook will push duplicated data, we should ignore duplicated data. } _fbEntries.Add(fbEntry); } try { FbHookData data = await request.Content.ReadAsAsync <FbHookData>(); await _facebookWebHookAppService.ProcessWebHookData(data); } catch (Exception ex) { Logger.Error(ex); Hub.Clients.All.newRaw(ex.StackTrace); } lock (_lock) { _fbEntries.Remove(fbEntry); } return(Ok()); }
public async Task ProcessWebHookData(FbHookData fbData) { await _facebookWebHookService.ProcessWebHookData(fbData); }