Facebook SDK - получите подробную информацию о потенциальном клиенте - ASP .net API ядра - PullRequest
0 голосов
/ 08 июля 2019

Что я пытаюсь сделать, так это получить свои ссылки на Facebook со своей страницы в основном API-интерфейсе webhook ASP.net, получить сведения о потенциальных клиентах и ​​сохранить их в моей базе данных mongoDB.

У меня возникла проблема с получением моегопривести подробности в API из-за токена.

А потом я увидел в документах для разработчиков на Facebook: a.Получить токен обычного пользователя.б.Преобразуйте его в долгоживущий токен c.С токеном доступа долгоживущего пользователя запросите токен страницы [..] Этот токен долгоживущей страницы не имеет даты истечения срока действия;Вы можете жестко закодировать его в простых RTU-интеграциях, чтобы получить данные о потенциальных клиентах.

Проблема в том, что я получил этот маркер страницы, как они показывают в своих документах, но он истек через час после того, как я его получил.Но они говорят здесь, это не истекает.Поэтому я не понимаю, как мне поступить.

Я получил токен из Интернета, сохранил его в своей базе данных, а когда появляется потенциальный клиент, поищу его в моей базе данных, чтобы выполнить запрос на получениепривести детали страницы.

Я пытался с токеном приложения, но у меня была ошибка, что мне нужен токен пользователя, но получение токена пользователя из API кажется неправильным.

Скажитея, если я что-то пропущу.Очень нужна ваша помощь здесь!Спасибо!

У меня есть мой Angular Web и мой основной API ASP.net.Я попытался с помощью токена приложения и токена страницы, полученного из Интернета.

Веб:

///Login

FB.login(response => {
  if (response.authResponse) {
    this.userId = response.authResponse.userID;
    FB.api('me/accounts', responsePages => {
      this.ngzone.run(() => {
        this.pages = responsePages.data.map(elem => {
          let page = new FacebookPage();
          page.access_token = elem.access_token;
          page.category = elem.category;
          page.id = elem.id;
          page.name = elem.name;
          FB.api(page.id + "/subscribed_apps?access_token=" + page.access_token, res => {
            if (res.data.length > 0 && res.data[0].name === facebookAPPName && res.data[0].id === facebookAPPId)
              page.connected = true;
            else page.connected = false;
          })
          return page;
        });    
      });
    })
  }
  else {
    console.log('User login failed');
  }
}, { scope: ['manage_pages', 'leads_retrieval'] });

///Link Page

FB.api(this.userId+"/accounts", res => {
      let accessToken = res.data.filter(elem => elem.name === page.name[0].access_token;
       FB.api('/' + page.id + '/subscribed_apps',
      'post',
      { access_token: page.access_token, subscribed_fields: ['leadgen'] },
       (response) => {
        console.log('Successfuly subscribed ' + JSON.stringify(response))
        page.connected = true;
        page.access_token = accessToken;
        this.facebookService.link(page).subscribe(()=>{
                  this.spinner.hide();
        },
        err => { console.log(err); this.spinner.hide();})
      })
    })

API:

[HttpPost]
        public IActionResult Post([FromBody]FacebookLead data)
        {
            var entry = data.entry.FirstOrDefault();
            var change = entry?.changes.FirstOrDefault();

            var leadId = change.value.leadgen_id;

            var client = new HttpClient();

            var page = this.facebookService.Get(change.value.page_id);

            var request = client.GetAsync("https://graph.facebook.com/v3.3/" + leadId + "?access_token=" + page.access_token);

            request.Wait();

            var res = request.Result.Content.ReadAsStringAsync();

            res.Wait();

            var result = res.Result;

            return Ok();
        }

Ожидаемый вывод - это детальлидерство, без истечения срока действия токена в API.Но я получаю сообщение об ошибке: токен истек или токен приложения не работает

...