Facebook Graph API ، كيفية الحصول على البريد الإلكتروني للمستخدمين؟

StackOverflow https://stackoverflow.com/questions/3611682

سؤال

أنا أستخدم واجهة برمجة تطبيقات الرسم البياني ، لكن لا يمكنني معرفة كيفية الحصول على عنوان بريد إلكتروني للمستخدمين المسجلين.

إن مقدمة الرسم البياني "يمكن أن توفر واجهة برمجة تطبيقات الرسم البياني الوصول إلى جميع بيانات تسجيل الحساب الأساسية التي تطلبها عادةً في نموذج تسجيل لموقعك ، بما في ذلك الاسم وعنوان البريد الإلكتروني وصورة الملف الشخصي وعيد الميلاد"

كل شيء جيد وجيد ، لكن كيف يمكنني الوصول إلى هذه المعلومات؟

هذا ما لدي حتى الآن:

$json = $facebook->api('/me');

$first = $json['first_name']; // gets first name
$last = $json['last_name'];
هل كانت مفيدة؟

المحلول

الطريقة الوحيدة للحصول على عنوان البريد الإلكتروني للمستخدمين هي طلب أذونات ممتدة في حقل البريد الإلكتروني. يجب أن يسمح لك المستخدم برؤية هذا ولا يمكنك الحصول على عناوين البريد الإلكتروني لأصدقاء المستخدم.

http://developers.facebook.com/docs/authentication/permissions

يمكنك القيام بذلك إذا كنت تستخدم Facebook Connect عن طريق تمرير SCOPE = البريد الإلكتروني في سلسلة GET من مكالمتك إلى مربع حوار AUTH.

أوصي باستخدام SDK بدلاً من file_get_contents لأنه يجعل من الأسهل بكثير إجراء OAUTH المصادقة.

نصائح أخرى

// Facebook SDK v5 for PHP
// https://developers.facebook.com/docs/php/gettingstarted/5.0.0

$fb = new Facebook\Facebook([
  'app_id' => '{app-id}',
  'app_secret' => '{app-secret}',
  'default_graph_version' => 'v2.4',
]);

$fb->setDefaultAccessToken($_SESSION['facebook_access_token']);
$response = $fb->get('/me?locale=en_US&fields=name,email');
$userNode = $response->getGraphUser();
var_dump(
    $userNode->getField('email'), $userNode['email']
);

افتح base_facebook.php أضف Access_Token في الوظيفة getLoginUrl()

array_merge(array(
                  'access_token' => $this->getAccessToken(),
                  'client_id' => $this->getAppId(),
                  'redirect_uri' => $currentUrl, // possibly overwritten
                  'state' => $this->state),
             $params);

واستخدم نطاق إذن البريد الإلكتروني

if ($user) {
   echo $logoutUrl = $facebook->getLogoutUrl();
} else {
   echo $loginUrl = $facebook->getLoginUrl(array('scope' => 'email,read_stream'));
}

للحصول على البريد الإلكتروني للمستخدم ، يجب عليك تسجيل الدخول إلى المستخدم باستخدام حساب Facebook الخاص به باستخدام email الإذن. استخدم ذلك في Facebook PHP SDK (انظر على جيثب) كالتالي.

تحقق أولاً مما إذا كان المستخدم قد تم تسجيل الدخول بالفعل:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();
if ($user) {
    try {
        $user_profile = $facebook->api('/me');
    } catch (FacebookApiException $e) {
        $user = null;
    }
}

إذا لم يكن له ، يمكنك عرض رابط تسجيل الدخول يطلب email الإذن :

if (!$user) {
    $args = array('scope' => 'email');
    echo '<a href="' . $facebook->getLoginUrl() . '">Login with Facebook</a>';
} else {
    echo '<a href="' . $facebook->getLogoutUrl() . '">Logout</a>';
}

عندما يتم تسجيله في البريد الإلكتروني ، يمكن العثور على البريد الإلكتروني في $user_profile مجموعة مصفوفة.

امل ان يساعد !

يمكنك استرداد عنوان البريد الإلكتروني من ملف تعريف المستخدم في المستخدم. هنا مقتطف شفرة

<?php

    $facebook = new Facebook(array(
      'appId'  => $initMe["appId"],
      'secret' => $initMe["appSecret"],
    ));

    $facebook->setAccessToken($initMe["accessToken"]);
    $user = $facebook->getUser();

    if ($user) {
        $user_profile = $facebook->api('/me');
        print_r($user_profile["email"]);
    }
?>

فقط أضف كتلة الرمز هذه على إرجاع الحالة ، وابدأ في تمرير كائن سلسلة الاستعلام {}. ل JavaScript Devs

بعد تهيئة SDK الخاص بك.

الخطوة 1: // احصل على حالة تسجيل الدخول

$(document).ready(function($) {
    FB.getLoginStatus(function(response) {
        statusChangeCallback(response);
        console.log(response);
    });
  });

سيؤدي ذلك إلى التحقق من تحميل المستند والحصول على حالة تسجيل الدخول إلى ما إذا كان قد تم تسجيل الدخول إلى المستخدمين.

ثم الوظيفة CheckLoginState يسمى ، والاستجابة مرور إلى StatusChangeCallback

function checkLoginState() {
    FB.getLoginStatus(function(response) {
      statusChangeCallback(response);
    });
  }

الخطوة 2: دعك تحصل على بيانات الاستجابة من الحالة

function statusChangeCallback(response) {
    // body...
    if(response.status === 'connected'){
      // setElements(true);
      let userId = response.authResponse.userID;
      // console.log(userId);
      console.log('login');
      getUserInfo(userId);

    }else{
      // setElements(false);
      console.log('not logged in !');
    }
  }

هذا أيضا معرف المستخدم الذي يتم تعيينه على المتغير ، ثم أ getuserinfo تم استدعاء FUNC لجلب معلومات المستخدم باستخدام الرسم البياني api.

function getUserInfo(userId) {
    // body...
    FB.api(
      '/'+userId+'/?fields=id,name,email',
      'GET',
      {},
      function(response) {
        // Insert your code here
        // console.log(response);
        let email = response.email;
        loginViaEmail(email);
      }
    );
  }

بعد تمرير معرف المستخدم كوسيطة ، تجلب الوظيفة جميع المعلومات المتعلقة بذلك معرف المستخدم. ملاحظة: في حالتي ، كنت أبحث عن البريد الإلكتروني ، حيث سمحت لي بتشغيل وظيفة يمكنها تسجيل المستخدم عبر البريد الإلكتروني فقط.

// تسجيل الدخول عبر البريد الإلكتروني

function loginViaEmail(email) {
    // body...
    let token = '{{ csrf_token() }}';

    let data = {
      _token:token,
      email:email
    }

    $.ajax({
      url: '/login/via/email',    
      type: 'POST',
      dataType: 'json',
      data: data,
      success: function(data){
        console.log(data);
        if(data.status == 'success'){
          window.location.href = '/dashboard';
        }

        if(data.status == 'info'){
          window.location.href = '/create-account'; 
        }
      },
      error: function(data){
        console.log('Error logging in via email !');
        // alert('Fail to send login request !');
      }
    });
  }

https://graph.facebook.com/me

سيعطيك معلومات حول المستخدم المسجل حاليًا ، ولكن ستحتاج إلى توفير رمز OAuth. نرى:

http://developers.facebook.com/docs/reference/api/user

يمكن الحصول على البريد الإلكتروني في الملف الشخصي باستخدام إذن موسع ، لكنني أعتقد أنه لا يمكن استخدام البريد الإلكتروني لتسجيل الدخول إلى FB. في تطبيقي ، أردت أن أعرض حسابات Mulitple FB للمستخدم في قائمة ، أردت أن أعرض رسائل البريد الإلكتروني لتسجيل الدخول لحسابات FB كمعرف فريد للحسابات المعنية ، لكنني لم أتمكن من الحصول عليها من FB ، كل ما حصلت عليه كان البريد الإلكتروني الأساسي في ملف تعريف المستخدم ولكن في حالتي ، يختلف بريد إلكتروني تسجيل الدخول الخاص بي والبريد الإلكتروني الأساسي.

تأكد من نشر تطبيق Facebook الخاص بك. من أجل تلقي بيانات للبريد الإلكتروني ، يجب إتاحة تطبيق public_profile و user_friends لتطبيقك للجمهور.

يمكنك تعطيله لاحقًا لأغراض التطوير وما زالت تحصل على حقل بريد إلكتروني.

يمكن أن تكون الأدوات التالية مفيدة أثناء التطوير:

تصحيح الرمز المميز للوصول: لصق في رمز الوصول للحصول على التفاصيل

https://developers.facebook.com/tools/debug/accesstoken/

Graph API Explorer: اختبار طلبات إلى واجهة برمجة تطبيقات الرسم البياني بعد لصقها في رمز الوصول الخاص بك

https://developers.facebook.com/tools/explorer

تأكد من تحديد رقم الإصدار من واجهة برمجة التطبيقات بالكامل على أنه شيء مثل "v2.11" و لا "2.11"

لست متأكدًا من ما هو افتراضي إذا كان هذا غير صحيح ، لكن لدي بعض الأخطاء الغريبة التي تحاول استرداد البريد الإلكتروني فقط عندما فاتني v.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top