从facebook webhook回调获取评论插件中配置的href

时间:2018-01-12 21:34:24

标签: facebook facebook-graph-api facebook-comments facebook-webhooks

我试图从plugin_comment webhook中检索Facebook评论插件中配置的href属性,这样我就可以知道评论来源并向发表评论的内容的所有者触发通知。

我已经审核了webhook评论的facebook文档以及图API返回的评论数据,但我无法找到有关如何获取评论源URL的提示。

是否有可能获得该值?

注意:内容的所有者不属于我们公司,因此我不能使用审核工具。

1 个答案:

答案 0 :(得分:0)

最终更新: 现在没事了!这里是!大声笑...

您可以拥有一个类似于以下内容的webhook文件:

<?php
    if ( $_GET['hub_verify_token'] === 'MyPl@ylist.FunRulez!') 
    {
        echo $_GET['hub_challenge'];
    }

    $filename = dirname( dirname( __FILE__ ) ) . '/fb_webook/log.json';

    if ( file_exists( $filename ) )
    {
        $data = file_get_contents( $filename );
        $data = json_decode( $data , true );
    }
    else
    {
        $data = array();
    }

    $new = file_get_contents( 'php://input' );
    $new = json_decode( $new , true );

    $new['href'] = get_fb_comment_url( $new );

    $data[] = $new;

    file_put_contents(
        $filename , json_encode( $data , JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES )
    );

    exit();
?>

现在...对于get_fb_comment_url()函数,这里是:

<?php

function get_fb_comment_url( $data )
{
    $comment_id = $data['entry'][0]['changes'][0]['value']['id'];
    $comment_id = explode( '_' , $comment_id );
    $comment_id = $comment_id[1];

    $client_id = 'yourappclientid';
    $client_secret = 'yourappclientsecret';

    //GET ACCESS TOKEN
    $url = 'https://graph.facebook.com/oauth/access_token?client_id=' . 
        $client_id . '&client_secret=' . $client_secret . '&grant_type=client_credentials';

    $ch = curl_init();

    curl_setopt( $ch , CURLOPT_URL , $url );
    curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );

    $result = curl_exec( $ch );
    curl_close( $ch );

//RESPONSE LOOKS LIKE THIS
//{"access_token":"[access-token]","token_type":"bearer"}
    $access_token_data = json_decode( $result , true );

    $url = 'https://graph.facebook.com/' . 
        $comment_id . '?fields=permalink_url&access_token=' . $access_token_data['access_token'];

    $ch = curl_init();

    curl_setopt( $ch , CURLOPT_URL , $url );
    curl_setopt( $ch , CURLOPT_RETURNTRANSFER , 1 );

    $result = curl_exec( $ch );
    curl_close( $ch );

/*RESPONSE LOOKS LIKE THIS
{
    "permalink_url": "https://l.facebook.com/l.php?u=https\u00253A\u00252F\u00252Fmiplaylist.fun\u00252FyRz3RyE8314Q\u00252F\u00253Ffb_comment_id\u00253D2249651171827020_2250200588438745\u002526comment_id\u00253D2250200588438745&h=AT1z4LqCDM_CUg_0zvt1m5fKEPeCEQqrjvH8t27Wepuy3y_gFbwG6FaFY-bSHBH1-Ypfji7R-59HL0yBIeRrXuqBCRVWosvRGURvc3j55gG1iu4ClZQ51oFqouxWbh3-CNupERMQ-NvmstLXF3N_d_vejS2NzXXCZJE&s=1",
    "id": "2250200588438745"
}
*/

    $data = json_decode( $result , true );

    $permalink_url = explode( '?' , $data['permalink_url'] );
    parse_str( $permalink_url[1] , $data );

    $href = explode( '?' , $data['u'] );
    $href = $href[0];
    return $href;
}

?>

享受! :D

原始答案:

好,这是...
我想自己已经找到答案了。

Webhook发送这样的对象:

  

{“对象”:“应用程序”,“条目”:[{“ id”:“ 325011391698942”,“时间”:   1569257207,“更改”:[{“值”:{“ id”:   “ 2249651171827020_2250207455104725”,“来自”:{“名称”:“丹尼尔·莫拉莱斯(Daniel Morales)   Lira”,“ id”:“ 10161627783545224”},“ message”:“新回复”,   “ created_time”:“ 2019-09-23T16:46:46 + 0000”,“ parent”:{“ created_time”:   “ 2019-09-23T16:46:17 + 0000”,“来自”:{“名称”:“丹尼尔·莫拉莱斯里拉”,   “ id”:“ 10161627783545224”},“ message”:“新评论”,“ id”:   “ 2249651171827020_2250206608438143”}},“字段”:   “ plugin_comment_reply”}]}]}

在changes字段中,值ID为:2249651171827027020_2250207455104725

在下划线后加上数字:2250207455104725

并像这样运行FB API调用:

FB.api(
    "/2250207455104725/" ,
    {
        'fields' : 'permalink_url'
    } ,
    function ( response ) 
    {
        if( window.console ) console.log( response );
        myfb.page_info = response;
    }
);

这来自javascript sdk。在服务器上看起来可能有所不同。我稍后会更新。

您会收到这样的答复:

  

{“ permalink_url”:“ https://l.facebook.com/l.php?u=https%3A%2F%2Fmiplaylist.fun%2FyRz3RyE8314Q%2F%3Ffb_comment_id%3D2249651171827020_2250207455104725%26comment_id%3D2250206608438143%26reply_comment_id%3D2250207455104725&h=AT3eO0qIkDRuNpTWhP650IQ9DKVJREdcQyYUknRo2CJdNFtnDDT8YgvOqfFxVph04FWkTI80rBaiehHllACgoZdSqilIFPlA-Jq8FK4Hy6YlrelNUtQRKIXCqNPmRgp_HsT0GbovLfV45uhI&s=1”,“ id”:“ 2250207455104725”}

在permalink_url中嵌入的是发布评论的URL,该URL编码为u参数。

更新: 您可以从服务器端对此URL进行API调用:

https://graph.facebook.com/2250200588438745?fields=permalink_url&access_token=youraccesstoken

(用2250200588438745替换从webhook通知中的下划线后得到的数字)