2015-05-18 28 views
8

Na przykład zadzwonić/owinąć auth.sentCode metodą (link poniżej):Jak wykonać wywołanie api protokołu Telegram MTProto?

https://core.telegram.org/method/auth.sendCode

próbowałem:

var url = "https://149.154.167.40"; 
var data = "(auth.sendCode \"PHONE_CODE+NO\" 0 APP_ID \"SECRET_HASH\" \"en\")"; 
using (var wc = new WebClient()) 
{ 
var result = wc.UploadData(url, GetBytes(data)); 
} 

otrzymuję ten wyjątek (i wewnętrzny wyjątek)

Podstawowe połączenie zostało zamknięte: Wystąpił nieoczekiwany błąd na wysłania. (Uwierzytelnienie nie powiodło się, ponieważ zdalny został zamknięty strumienia transportowego.)

+0

Nie mam doświadczenia z tym protokołem, ale przez większość czasu widzę wyjątki takie jak to jest problem SSL/TLS. Widzę, że używasz zakodowanego adresu IP - czy jest możliwe, że są podpisane przez siebie certyfikaty, które Twoja aplikacja odrzuca? (Alternatywnie: czy ten punkt końcowy zdecydowanie obsługuje https? Dostałem podobne błędy od wysyłania żądań https do punktu końcowego http.) –

+1

Myślę, że do teraz nie ma przykładu, po prostu niezatwierdzona biblioteka w githhub –

+0

napisałem jakiś kod (w vb.net), aby zacząć tutaj http://stackoverflow.com/a/32809138/44080 –

Odpowiedz

2

Ci zacząć z this SO post

trzeba by zrozumieć, jak do wygenerowania authkey pierwszy.

Dokumentacja Telegram-API nie jest bardzo dobrze napisana, ale jeśli będziesz ją studiować ... w końcu ją zdobędziesz.

Działa poprzez generowanie authkey pomogłoby budować wzorzec i funkcje, które można następnie wykorzystać do walki z resztą API

Cheers.

1

przypadku próby uzyskania dostępu do https://149.154.167.40 za pomocą przeglądarki internetowej, można zobaczyć, że protokół https nie jest włączona. Jeśli spojrzysz na numer here, istnieje lista subdomen, które implementują https, możesz wypróbować jedną z nich, aby wysłać żądanie API. Nie jestem pewien, czy telegram blokuje twoje żądanie z powodu zasady CROSS-ORIGIN, ponieważ nagłówek access-control-allow-origin:* jest obecny w odpowiedzi. Jeśli to nie zadziała, możesz zaimplementować własny uścisk dłoni, tak jak robi to aplikacja Android pod numerem here. Mam nadzieję, że ci to pomoże.

1

Użyj TLSharp. Aby uwierzytelnić użytkownika, po prostu uruchom ten kod

var hash = await client.SendCodeRequest(phoneNumber); 

    var code = "1234"; //code that you receive from Telegram 

    var user = await client.MakeAuth(phoneNumber, hash, code);