Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Facebook向webhook发送空帖子_Facebook_Webhooks - Fatal编程技术网

Facebook向webhook发送空帖子

Facebook向webhook发送空帖子,facebook,webhooks,Facebook,Webhooks,我正在尝试通过facebook应用程序为我的页面安装leadgen事件的webhook。因此,我: Facebook的潜在客户来源页面 Facebook应用程序 我要在其中保存潜在客户的Web服务器 我相信应用程序和Web服务器连接得很好。Webhook显示在应用程序页面等处,但当我尝试使用此工具创建测试线索时,我收到一个POST请求,其中没有数据 我怀疑权限有问题,但我可以直接用PHP SDK检查页面上的潜在客户(通过leadgen_id),POST请求只是通过URL从Facebook发送的,

我正在尝试通过facebook应用程序为我的页面安装leadgen事件的webhook。因此,我:

  • Facebook的潜在客户来源页面
  • Facebook应用程序
  • 我要在其中保存潜在客户的Web服务器
  • 我相信应用程序和Web服务器连接得很好。Webhook显示在应用程序页面等处,但当我尝试使用此工具创建测试线索时,我收到一个POST请求,其中没有数据

    我怀疑权限有问题,但我可以直接用PHP SDK检查页面上的潜在客户(通过leadgen_id),POST请求只是通过URL从Facebook发送的,所以他们还不知道令牌


    UPD将请求发送到同一url(
    curl-d“param=value”)https://..url..
    )按预期工作。

    Facebook在请求正文中发送Lead数据。如果您使用的是框架,请检查您是否有权访问请求正文。
    尝试使用第三方中间服务(如Runscope)查看完整请求,这非常有用,如果Facebook将webhook数据发送为
    内容类型:application/json
    ,而不是
    …:application/x-www-form-urlencoded
    (作为带有method=post的普通表单)


    因此,PHP不会填充$u POST–您需要读取原始输入流。可以使用
    file\u get\u contents('php://input)
    –然后对该数据应用
    json\u decode
    ,您将有一个合适的数据结构来处理。

    这段代码适合我

    if (!empty($_REQUEST['hub_mode']) && $_REQUEST['hub_mode'] == 'subscribe' && $_REQUEST['hub_verify_token'] == "<mytoken>") {
        echo $_REQUEST['hub_challenge'];
    } else {
        $data = json_decode(file_get_contents("php://input"), true);
        file_put_contents('logFB.txt', print_r($data, true));
    }  
    
    if(!empty($\u请求['hub\u模式]])&&$\u请求['hub\u模式]=='subscribe'&&$\u请求['hub\u验证\u令牌]==“”){
    echo$_请求['hub_挑战];
    }否则{
    $data=json\u解码(文件\u获取\u内容(“php://input"(对),;
    文件内容('logFB.txt',打印($data,true));
    }  
    
    第一部分用于验证webhook,第二部分用于从facebook webhook获取数据


    希望这将有助于…

    如果您正在使用django框架,您应该请求.body,因为post数据将保持为空

    def webhook_response(request):
       # it will print the contents from facebook webhook response
       print(request.body)
    
       # something like the following object will print up if you are using leadgen
       {"object": "page", "entry": [{"id": "0", "time": 111111111, "changes": [{"field": "leadgen", "value": {"ad_id": "444444444", "form_id": "444444444444", "leadgen_id": "444444444444", "created_time": 11111111, "page_id": "444444444444", "adgroup_id": "44444444444"}}]}]}
    

    好吧,我明白你在说什么了。它将作为序列化字符串发送,而不是作为一组参数发送。非常感谢。