QUAN SÁT https://developers.facebook.com/docs/chat/
Dịch vụ và API mà tài liệu này bao gồm đã không còn được dùng nữa với việc phát hành API nền tảng v2.0. Sau khi phiên bản 1.0 không được dùng nữa, chat.facebook.com sẽ không còn khả dụng nữa.
Quan trọng! Đọc đến đây và có thể bạn muốn làm điều gì đó hoàn toàn khác so với bất cứ điều gì liên quan đến câu hỏi này.
Tôi đang tạo cuộc trò chuyện bằng WebForms C # kết nối với API trò chuyện của Facebook.
Tôi cũng đã xem xét câu hỏi SO này (và tất cả các liên kết). Một số phần không còn phù hợp vì Facebook yêu cầu auth_token
bây giờ.
Để tái tạo điều này, bạn nên thiết lập ứng dụng web Facebook, sử dụng appId
và tài khoản người dùng với quyền xmpp_login được đặt. Sau đó, tạo một Chat.aspx
mã có mã phía sau và dán mã này cho phù hợp. Và thay thế những người dùng được mã hóa cứng để tương tác.
Tôi có hai (có thể là ba) vấn đề mà tôi tin rằng tôi không thể thành công với mục tiêu gửi tin nhắn trò chuyện.
- Quy trình được lưu ý như
// finishes auth process
trong tài liệu không khớp với mô tả tài liệu (Tôi không nhận được bất kỳ hồi đáp nào sau khi tôi nhận được thông báo thành công dựa trên SSL / TLS của mình từ Facebook.) - Tôi không biết phần 'gửi tin nhắn trò chuyện' sẽ được thiết lập như thế nào và vì tôi không nhận được bất kỳ tin nhắn nào từ Facebook nên rất khó để biết được điều gì có thể xảy ra.
Đây là toàn bộ mã của tôi, trên PasteBin .
Tôi cũng có một số người trợ giúp để thêm quyền xmpp_login và các quyền đó .. đã bị xóa để rõ ràng.
Các biến toàn cục:
public partial class Chat : Page
{
public TcpClient client = new TcpClient();
NetworkStream stream;
private SslStream ssl;
private string AppId { get; set; }
public string AppSecret { get; set; }
public string AppUrl { get; set; }
public string UserId { get; set; }
public string AccessToken { get; set; }
private string _error = string.Empty;//global error string for watch debugging in VS.
public const string FbServer = "chat.facebook.com";
private const string STREAM_XML = "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" version=\"1.0\" xmlns=\"jabber:client\" to=\"chat.facebook.com\" xml:lang=\"en\" xmlns:xml=\"http://www.w3.org/XML/1998/namespace\">";
private const string AUTH_XML = "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='X-FACEBOOK-PLATFORM'></auth>";
private const string CLOSE_XML = "</stream:stream>";
private const string RESOURCE_XML = "<iq type=\"set\" id=\"3\"><bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"><resource>fb_xmpp_script</resource></bind></iq>";
private const string SESSION_XML = "<iq type=\"set\" id=\"4\" to=\"chat.facebook.com\"><session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/></iq>";
private const string START_TLS = "<starttls xmlns=\"urn:ietf:params:xml:ns:xmpp-tls\"/>";
Sau đó, trong Page_Load
tất cả các bước cần thiết được thực hiện (hoặc được cho là). Đáng chú ý là SendMessage("test");
. Tôi chỉ cố gắng đặt nó ở đó để xem liệu nó có thành công trong việc gửi tin nhắn trò chuyện hay không ... SetUserNameAndAuthToken
đặt mã xác thực và tên người dùng của tôi thành các biến toàn cục. AuthToken hoạt động.
protected void Page_Load(object sender, EventArgs e)
{
this.AppId = "000000082000090";//TODO get from appsettings.
//AddAdditionalPermissions("xmpp_login");//TODO handle xmpp_login persmission
this.AppSecret = "d370c1bfec9be6d9accbdf0117f2c495"; //TODO Get appsecret from appsetting.
this.AppUrl = "https://fbd.anteckna.nu";
SetUserNameAndAuthToken();
Connect(FbServer);
// initiates auth process (using X-FACEBOOK_PLATFORM)
InitiateAuthProcess(STREAM_XML);
// starting tls - MANDATORY TO USE OAUTH TOKEN!!!!
StartTlsConnection(START_TLS);
// gets decoded challenge from server
var decoded = GetDecodedChallenge(AUTH_XML);
// creates the response and signature
string response = CreateResponse(decoded);
//send response to server
SendResponseToServer(response);
SendMessage("test");
// finishes auth process
FinishAuthProcess();
// we made it!
string streamresponseEnd = SendWihSsl(CLOSE_XML);
}
Vì vậy, tôi nhận được phản hồi sau đó tôi gửi phản hồi đến máy chủ:
private void SendResponseToServer(string response)
{
string xml = String.Format("<response xmlns=\"urn:ietf:params:xml:ns:xmpp-sasl\">{0}</response>", response);
string response2 = SendWihSsl2(xml);
if (!response2.ToLower().Contains("success"))
_error = response2;
}
Quá trình này mất 1 phút 40 giây ... và phản hồi là:
<success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'/>
Cuối cùng, tôi thực hiện FinishAuthPorcess ()
private void FinishAuthProcess()
{
string streamresponse = SendWithSsl(STREAM_XML);
if (!streamresponse.Contains("STREAM:STREAM"))
_error = streamresponse;
string streamresponse2 = SendWihSsl(RESOURCE_XML);
if (!streamresponse2.Contains("JID"))
_error = streamresponse2;
string streamresponse3 = SendWihSsl(SESSION_XML);
if (!streamresponse3.Contains("SESSION"))
_error = streamresponse2;
}
Tất cả các phản hồi là ""
. Nhìn vào Read
phương thức trong SendWithSsl
: nó là 0 byte. Cố gắng gửi tin nhắn cũng cho tôi 0 byte Đọc dữ liệu từ Facebook. Tôi không biết tại sao?