I am trying to connect to a Facebook chat using C #.
I can get the access code and access token, but in the end it does not work, when we try to authenticate for the chat, it gives an error saying that it is not authenticated.
I think I'm wrong ComposeResponse. Please help me.:)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Net.Sockets;
using System.IO;
using System.Security.Cryptography;
using System.Net;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string url = Request.Url.AbsoluteUri;
if (Request.QueryString["code"] == null)
{
Response.Redirect(GetFacebookOAuthUrl());
}
var Demo = GetMAccessToken(Request.QueryString["code"]);
TcpClient FacebookClient = new TcpClient();
FacebookClient.Connect("chat.facebook.com", 5222);
NetworkStream myns = FacebookClient.GetStream();
string xml = "<?xml version='1.0'?>" +
"<stream:stream " +
"id='1' " +
"to='chat.facebook.com' " +
"xmlns='jabber:client' " +
"xmlns:stream='http://etherx.jabber.org/streams' " +
"version='1.0' >";
StreamWriter mySw = new StreamWriter(myns);
mySw.WriteLine(xml);
mySw.Flush();
byte[] serverResponseByte = new byte[1024];
int myBytesRead = 0;
StringBuilder myResponseAsSB = new StringBuilder();
do
{
myBytesRead = myns.Read(serverResponseByte, 0, serverResponseByte.Length);
myResponseAsSB.Append(System.Text.Encoding.UTF8.GetString(serverResponseByte, 0, myBytesRead));
} while (myns.DataAvailable);
myResponseAsSB.Clear();
xml = "<auth " +
"xmlns='urn:ietf:params:xml:ns:xmpp-sasl' " +
"mechanism='X-FACEBOOK-PLATFORM' />";
mySw.WriteLine(xml);
mySw.Flush();
do
{
myBytesRead = myns.Read(serverResponseByte, 0, serverResponseByte.Length);
myResponseAsSB.Append(System.Text.Encoding.UTF8.GetString(serverResponseByte, 0, myBytesRead));
} while (myns.DataAvailable);
myResponseAsSB.Replace("<challenge xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">", "");
myResponseAsSB.Replace("</challenge>", "");
byte[] myregularstrigbytes = Convert.FromBase64String(myResponseAsSB.ToString());
string myregularstring = System.Text.Encoding.UTF8.GetString(myregularstrigbytes);
string response = ComposeResponse(myregularstring, Demo);
byte[] myResponseByte = Encoding.UTF8.GetBytes(response.ToString());
string myEncodedResponseToSend = Convert.ToBase64String(myResponseByte);
xml = String.Format("<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">{0}</response>", myEncodedResponseToSend);
mySw.WriteLine(xml);
mySw.Flush();
myResponseAsSB.Clear();
do
{
myBytesRead = myns.Read(serverResponseByte, 0, serverResponseByte.Length);
myResponseAsSB.Append(System.Text.Encoding.UTF8.GetString(serverResponseByte, 0, myBytesRead));
} while (myns.DataAvailable);
string result_ = myResponseAsSB.ToString();
}
private string ComposeResponse(string serverresponse, string AccessToken)
{
string version = serverresponse.Split('&')[0].Split('=')[1];
string method = serverresponse.Split('&')[1].Split('=')[1];
string nonce = serverresponse.Split('&')[2].Split('=')[1];
string appId = "421025367912155";
string Response = "api_key=" + appId
+ "&call_id=" + 0
+ "&method=" + method
+ "&nonce=" + nonce
+ "&access_token=" + AccessToken
+ "&v='1.0'";
return Response;
}
public string GetMAccessToken(string Code)
{
string AccessToken;
string RequestToken = "https://graph.facebook.com/oauth/access_token?" +
"client_id=421025367912155" +
"&redirect_uri=http://localhost:2155/FBintegration/" +
"&client_secret=10d4cfc72892a8c291ff0a8f6fc0003f" +
"&code=" + Code ;
WebRequest req = WebRequest.Create(RequestToken);
WebResponse Response = req.GetResponse();
Stream dataStream = Response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
string[] Res = responseFromServer.Split(new char[] {'&'},StringSplitOptions.RemoveEmptyEntries);
AccessToken = Res[0];
AccessToken = AccessToken.Replace("access_token=", "");
return AccessToken;
}
public string GetFacebookOAuthUrl()
{
string RedirectUrl = "https://www.facebook.com/dialog/oauth?scope=xmpp_login" +
"&client_id=421025367912155" +
"&redirect_uri=" + new System.Uri("http://localhost:2155/FBintegration/");
return RedirectUrl;
}
}
source
share