Facebook sends empty POST to a webhook

前端 未结 4 738
执念已碎
执念已碎 2021-01-18 11:58

I am trying to install a webhook for leadgen event for my page via a facebook app. So I have:

  1. Facebook Page where leads come from
  2. Facebook App
  3. <
相关标签:
4条回答
  • 2021-01-18 12:18

    In case you are using the django framework, you should request.body, as post data will remain empty.

    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"}}]}]}
    
    0 讨论(0)
  • 2021-01-18 12:22

    Facebook sends webhook data as Content-Type: application/json, not as …: application/x-www-form-urlencoded (as a normal form with method=post would.)

    Therefor, PHP does not populate $_POST – you need to read the raw input stream instead. That can be done using file_get_contents('php://input') – and then just apply json_decode on that data, and you’ll have a proper data structure to work with.

    0 讨论(0)
  • 2021-01-18 12:32

    This code works for me...

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

    First part is for verifying webhook, second for getting data from facebook webhook.

    Hope this will help...

    0 讨论(0)
  • 2021-01-18 12:33

    Facebook sends the leads data in the request body. If you are using a framework, please check if you have access to the request body. Try using a third party intermediate service like Runscope to see the full request, it is very usef

    0 讨论(0)
提交回复
热议问题