title: facebook chat api, xmpp_connect return false
body: <p>Facebook chat api, 
  Function xmpp_connect return false on block</p>
  
  <pre>
  
      // gets challenge from server and decode it
      send_xml($fp, $AUTH_XML);
      if (!find_xmpp($fp,  'CHALLENGE', null, $challenge)) {
          return false;
      }
  
  </pre>
  
  <pre><code>I can't understand what is the problem. Please help.
  </code></pre>
  
  <pre>
  
      // Copyright 2004-present Facebook. All Rights Reserved.
  
      $STREAM_XML = '';
  
      $AUTH_XML = '';
  
      $CLOSE_XML = '';
  
      $RESOURCE_XML = ''.
        ''.
        'fb_xmpp_script';
  
      $SESSION_XML = ''.
        '';
  
      $START_TLS = '';
  
  
      function open_connection($server) {
        print "[INFO] Opening connection... ";
  
        $fp = fsockopen($server, 5222, $errno, $errstr);
        if (!$fp) {
          print "$errstr ($errno)<br>";
        } else {
          print "connnection open<br>";
        }
  
        return $fp;
      }
  
      function send_xml($fp, $xml) {
        fwrite($fp, $xml);
      }
  
      function recv_xml($fp,  $size=4096) {
        $xml = fread($fp, $size);
        if ($xml === "") {
           return null;
        }
  
        // parses xml
        $xml_parser = xml_parser_create();
        xml_parse_into_struct($xml_parser, $xml, $val, $index);
        xml_parser_free($xml_parser);
  
        return array($val, $index);
      }
  
      function find_xmpp($fp,  $tag, $value=null, &$ret=null) {
        static $val = null, $index = null;
  
        do {
          if ($val === null && $index === null) {
            list($val, $index) = recv_xml($fp);
            if ($val === null || $index === null) {
              return false;
            }
          }
  
          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'];
                }
                return true;
              }
              foreach ($tag_array as $i => $pos) {
                if ($val[$pos]['tag'] === $tag && isset($val[$pos]['value']) &&
                  $val[$pos]['value'] === $value) {
                    $ret = $val[$pos]['value'];
                    return true;
                }
              }
            }
          }
          $val = $index = null;
        } while (!feof($fp));
  
        return false;
      }
  
  
      function xmpp_connect($options, $access_token) {
        global $STREAM_XML, $AUTH_XML, $RESOURCE_XML, $SESSION_XML, $CLOSE_XML, $START_TLS;
  
        $fp = open_connection($options['server']);
        if (!$fp) {
          return false;
        }
  
        // initiates auth process (using X-FACEBOOK_PLATFORM)
        send_xml($fp,  $STREAM_XML);
        if (!find_xmpp($fp, 'STREAM:STREAM')) {
          return false;
        }
        if (!find_xmpp($fp,  'MECHANISM', 'X-FACEBOOK-PLATFORM')) {
          return false;
        }
  
        // starting tls - MANDATORY TO USE OAUTH TOKEN!!!!
        send_xml($fp,  $START_TLS);
        if (!find_xmpp($fp, 'PROCEED', null, $proceed)) {
          return false;
        }
        stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
  
        send_xml($fp, $STREAM_XML);
        if (!find_xmpp($fp, 'STREAM:STREAM')) {
          return false;
        }
        if (!find_xmpp($fp, 'MECHANISM', 'X-FACEBOOK-PLATFORM')) {
          return false;
        }
  
        // gets challenge from server and decode it
        send_xml($fp, $AUTH_XML);
        if (!find_xmpp($fp,  'CHALLENGE', null, $challenge)) {
          return false;
        }
        $challenge = base64_decode($challenge);
        $challenge = urldecode($challenge);
        parse_str($challenge, $challenge_array);
  
        // creates the response array
        $resp_array = array(
          'method' => $challenge_array['method'],
          'nonce' => $challenge_array['nonce'],
          'access_token' => $access_token,
          'api_key' => $options['app_id'],
          'call_id' => 0,
          'v' => '1.0',
        );
        // creates signature
        $response = http_build_query($resp_array);
  
        // sends the response and waits for success
        $xml = ''.
          base64_encode($response).'';
        send_xml($fp, $xml);
        if (!find_xmpp($fp, 'SUCCESS')) {
          return false;
        }
  
        // finishes auth process
        send_xml($fp, $STREAM_XML);
        if (!find_xmpp($fp,'STREAM:STREAM')) {
          return false;
        }
        if (!find_xmpp($fp, 'STREAM:FEATURES')) {
          return false;
        }
       send_xml($fp, $RESOURCE_XML);
        if (!find_xmpp($fp, 'JID')) {
          return false;
        }
        send_xml($fp, $SESSION_XML);
        if (!find_xmpp($fp, 'SESSION')) {
          return false;
        }
  
        // we made it!
        send_xml($fp, $CLOSE_XML);
        print ("Authentication complete<br>");
        fclose($fp);
  
        return true;
      }
  
  
  
      //Gets access_token with xmpp_login permission
      function get_access_token($app_id, $app_secret, $my_url){ 
  
        $code = $_REQUEST["code"];
  
        if(empty($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 
          . "&code=" . $code;
         $access_token = file_get_contents($token_url);
          parse_str($access_token, $output);
  
          return($output['access_token']);
      }
  
      function _main() {
        print "Test platform connect for XMPP<br>";
       $app_id='';
        $app_secret='';
        $my_url = "";
        $uid = '';
        $access_token = get_access_token($app_id,$app_secret,$my_url);
        print "access_token: ".$access_token."<br>";
  
        $options = array(
          'uid' => $uid,
          'app_id' => $app_id,
          'server' => 'chat.facebook.com',
         );
  
        // prints options used
        print "server: ".$options['server']."<br>";
        print "uid: ".$options['uid']."<br>";
        print "app id: ".$options['app_id']."<br>";
  
        if (xmpp_connect($options, $access_token)) {
          print "Done<br>";
        } else {
          print "An error ocurred<br>";
        }
  
      }
  
      _main();
  
  </pre>
  
  <p>Docs: <a href="https://developers.facebook.com/docs/chat/" rel="nofollow">https://developers.facebook.com/docs/chat/</a></p>