【问题标题】:facebook chat api, xmpp_connect return falsefacebook 聊天 api,xmpp_connect 返回 false
【发布时间】:2013-09-20 19:58:38
【问题描述】:

Facebook 聊天 API, 函数 xmpp_connect 在块上返回 false

// 从服务器获取挑战并解码 发送_xml($fp,$AUTH_XML); if (!find_xmpp($fp, 'CHALLENGE', null, $challenge)) { 返回假; }
I can't understand what is the problem. Please help.
// 版权所有 2004 年至今 Facebook。版权所有。 $STREAM_XML = ''; $AUTH_XML = ''; $CLOSE_XML = ''; $RESOURCE_XML = ''。 ''。 'fb_xmpp_script'; $SESSION_XML = ''。 ''; $START_TLS = ''; 功能 open_connection($server) { print "[INFO] 打开连接..."; $fp = fsockopen($server, 5222, $errno, $errstr); 如果 (!$fp) { 打印 "$errstr ($errno)
"; } 别的 { 打印“连接打开
”; } 返回 $fp; } 函数 send_xml($fp, $xml) { fwrite($fp, $xml); } 函数recv_xml($fp, $size=4096) { $xml = fread($fp, $size); 如果 ($xml === "") { 返回空值; } //解析xml $xml_parser = xml_parser_create(); xml_parse_into_struct($xml_parser, $xml, $val, $index); xml_parser_free($xml_parser); 返回数组($val,$index); } 函数 find_xmpp($fp, $tag, $value=null, &$ret=null) { 静态 $val = null, $index = null; 做 { if ($val === null && $index === null) { 列表($val,$index)=recv_xml($fp); if ($val === null || $index === null) { 返回假; } } foreach ($index as $tag_key => $tag_array) { if ($tag_key === $tag) { if ($value === null) { if (isset($val[$tag_array[0]]['value'])) { $ret = $val[$tag_array[0]]['value']; } 返回真; } foreach ($tag_array as $i => $pos) { if ($val[$pos]['tag'] === $tag && isset($val[$pos]['value']) && $val[$pos]['value'] === $value) { $ret = $val[$pos]['value']; 返回真; } } } } $val = $index = null; } 而 (!feof($fp)); 返回假; } 函数 xmpp_connect($options, $access_token) { 全局 $STREAM_XML、$AUTH_XML、$RESOURCE_XML、$SESSION_XML、$CLOSE_XML、$START_TLS; $fp = open_connection($options['server']); 如果 (!$fp) { 返回假; } // 启动身份验证过程(使用 X-FACEBOOK_PLATFORM) 发送_xml($fp,$STREAM_XML); if (!find_xmpp($fp, 'STREAM:STREAM')) { 返回假; } if (!find_xmpp($fp, 'MECHANISM', 'X-FACEBOOK-PLATFORM')) { 返回假; } // 开始 tls - 强制使用 OAUTH 令牌!!!! send_xml($fp, $START_TLS); if (!find_xmpp($fp, 'PROCEED', null, $proceed)) { 返回假; } stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 发送_xml($fp,$STREAM_XML); if (!find_xmpp($fp, 'STREAM:STREAM')) { 返回假; } if (!find_xmpp($fp, 'MECHANISM', 'X-FACEBOOK-PLATFORM')) { 返回假; } // 从服务器获取挑战并解码 发送_xml($fp,$AUTH_XML); if (!find_xmpp($fp, 'CHALLENGE', null, $challenge)) { 返回假; } $challenge = base64_decode($challenge); $挑战 = urldecode($挑战); parse_str($challenge, $challenge_array); // 创建响应数组 $resp_array = 数组( '方法' => $challenge_array['方法'], 'nonce' => $challenge_array['nonce'], 'access_token' => $access_token, 'api_key' => $options['app_id'], 'call_id' => 0, 'v' => '1.0', ); // 创建签名 $response = http_build_query($resp_array); // 发送响应并等待成功 $xml = ''。 base64_encode($response).''; 发送_xml($fp,$xml); if (!find_xmpp($fp, 'SUCCESS')) { 返回假; } // 完成认证过程 发送_xml($fp,$STREAM_XML); if (!find_xmpp($fp,'STREAM:STREAM')) { 返回假; } if (!find_xmpp($fp, 'STREAM:FEATURES')) { 返回假; } 发送_xml($fp,$RESOURCE_XML); if (!find_xmpp($fp, 'JID')) { 返回假; } 发送_xml($fp,$SESSION_XML); if (!find_xmpp($fp, 'SESSION')) { 返回假; } // 我们成功了! 发送_xml($fp,$CLOSE_XML); print ("认证完成
"); fclose($fp); 返回真; } //获取带有xmpp_login权限的access_token 函数 get_access_token($app_id, $app_secret, $my_url){ $code = $_REQUEST["code"]; 如果(空($code)){ $dialog_url = "https://www.facebook.com/dialog/oauth?scope=xmpp_login"。 "&client_id=" 。 $app_id 。 “&redirect_uri=”。 urlencode($my_url) ; echo("top.location.href='" . $dialog_url . "'"); } $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id 。 “&redirect_uri=”。 urlencode($my_url) . “&client_secret=”。 $app_secret . “&代码=”。 $代码; $access_token = file_get_contents($token_url); parse_str($access_token, $output); 返回($输出['access_token']); } 函数 _main() { print "XMPP 测试平台连接
"; $app_id=''; $app_secret=''; $my_url = ""; $uid = ''; $access_token = get_access_token($app_id,$app_secret,$my_url); 打印 "access_token: ".$access_token."
"; $选项 = 数组( 'uid' => $uid, 'app_id' => $app_id, '服务器' => 'chat.facebook.com', ); // 打印使用的选项 print "server: ".$options['server']."
"; print "uid: ".$options['uid']."
"; print "app id: ".$options['app_id']."
"; if (xmpp_connect($options, $access_token)) { 打印“完成
”; } 别的 { print "发生错误
"; } } _主要的();

文档:https://developers.facebook.com/docs/chat/

【问题讨论】:

  • developers.facebook.com 的示例就是这样工作的。

标签: facebook xmpp facebook-php-sdk facebook-chat


【解决方案1】:

在recv_xml函数中替换

$xml = fread($fp, $size);

到

$xml = fread($fp, $size);

if (!preg_match('/^</', $xml)) {
    $xml = '<' . $xml;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多