我是新来的! Webhooks正在崛起,在工作中我们正在产生潜在客户。我有一个' GET' web api 2中的控制器,这将验证我的应用程序,实际上我确实获得了hub.verify_token,hub.challenge和hub.mode的值。 GET控制器:
public HttpResponseMessage Get([FromUri]Hub hub){}
请注意:我使用的是C#和web api 2
现在,我的问题是facebook甚至没有打我的帖子。当我检查Azure存储资源管理器中的WADLogsTable时,有关于我记录的获取请求的信息。然而,即使post控制器有Trace.TraceError(),也没有关于POST的错误。因此POST没有被击中。我觉得我的数据结构是错误的。这是我的帖子控制器,与facebook文档一致:" https://developers.facebook.com/docs/graph-api/webhooks" (接收更新),我按如下方式构建了我的代码:
POST控制器:
public HttpResponseMessage Post([FromBody]Entry[] entry){...}
入门级:
public class Entry
{
public string id { get; set; }
public string[] changed_fields { get; set; }
public Change[] changes { get; set; }
public DateTime time { get; set; }
}
更改课程
public class Change
{
public string field { get; set; }
public LeadInfo value { get; set; }
}
LeadInfo类
public class LeadInfo
{
public string ad_id { get; set; }
public string adgroup_id { get; set; }
public DateTime created_time { get; set; }
public string form_id { get; set; }
public string leadgen_id { get; set; }
public string page_id { get; set; }
}
请注意,公共道具是小写的,因此它们与Facebook发送的变量名称相匹配。
我的数据结构是否正确?
非常感谢任何帮助。谢谢大家。
答案 0 :(得分:0)
我已经解决了这个问题。 Facebook将POST请求正文中的数据作为application / json发送,而不是HTML表单中通常的urlencoded。因此,必须读取和反序列化原始内容。
答案 1 :(得分:0)
将此用于您的模型。我通过访问此页面找到了json响应,以便从表单中获得测试结果。
https://developers.facebook.com/tools/lead-ads-testing
using Newtonsoft.Json;
public class WebHookResponseModel
{
public Entry[] entry { get; set; }
[JsonProperty("object")]
public string _object { get; set; }
}
public class Entry
{
public Change[] changes { get; set; }
public string id { get; set; }
public int time { get; set; }
}
public class Change
{
public string field { get; set; }
public Value value { get; set; }
}
public class Value
{
public int ad_id { get; set; }
public long form_id { get; set; }
public long leadgen_id { get; set; }
public int created_time { get; set; }
public long page_id { get; set; }
public int adgroup_id { get; set; }
}