У меня большая проблема с этим кодом. Я пытаюсь написать свое первое приложение для facebook. Но этот код не может получить электронную почту от пользователя, и я не знаю, почему. Кто-нибудь может мне помочь?
require_once 'phpmailer.php'; require_once 'facebook.php'; error_reporting(0); //Application Configurations $app_id = 'MY APP ID'; $app_secret = 'MY SECRET ID'; $site_url = 'MY SITE URL'; // Create our application instance $facebook = new Facebook(array( 'appId' => $app_id, 'secret' => $app_secret, 'cookie'=>true, )); $user = $facebook->getUser(); if($user == 0){ $user = $facebook->getUser(); } if($user){ $user_profile=$facebook->api('/me'); $logoutUrl= $facebook->getLogoutUrl(); if(empty($_POST['send'])){ echo"<form method='POST'>"; echo"Hi ".$user_profile['name']."</br>"; echo"<textarea name='message' rows='6' cols='80'>"; echo"</textarea>"; echo"<input type='submit' name='send' value='send'>"; echo"</form>"; } if(!empty($_POST['send'])&& empty($_POST['message'])){ echo "Empty message"; } if(!empty($_POST['send'])){ $mail = new PHPMailer(); $mail->SetFrom($_POST['mail'],$user_profile['name']); $mail->CharSet="utf-8"; $address="therimsilua@gmail.com"; $mail->AddAddress($address," "); $mail->Subject="message from facebook"; $wiadomosc='Message from user'.$user_profile['name'].'</br>'.$_POST['message']; $mail->MsgHTML($message); if($mail->Send()){ echo "Send to: ".$user_profile['email']; } else{ echo "Error:".$mail->ErrorInfo; } } } else { $perm = array('scope'=>'email'); $loginUrl =$facebook->getLoginUrl($perm); }
в настройке приложения у меня есть адрес электронной почты для пользователей и друзей, так где же ошибка? Это приложение прекрасно работает без ограничений
require_once "facebook.php"; $facebook = new Facebook(array('appId' => '482455065177441', 'secret' => '0e484981225df74f1170c29185aa8690')); $user_fb = $facebook->getUser(); if($user_fb == 0) { $user_fb = $facebook->getUser(); } if ($user_fb) // Check user's FB user ID has getting or not { $user_profile = $facebook->api('/me'); $logoutUrl = $facebook->getLogoutUrl(); echo $user_profile['email']; echo $user_profile['first_name']; echo $user_profile['last_name']; } else // user's FB user ID has not getting load login url with email permission { $perms = array('scope' => 'email'); $loginUrl = $facebook->getLoginUrl($perms); echo "<script> top.location.href='" . $loginUrl . "'</script>"; }
Вы делаете это правильно, но адрес электронной почты будет отображаться только для пользователей, которые установили параметры конфиденциальности для своих писем, чтобы они показывались всем, в противном случае он не отобразит вас по электронной почте пользователя.
Facebook не будет возвращать электронную почту пользователя, если и только если пользователь отказывает в доступе во время аутентификации. Попробуйте распечатать print_r($user_profile)
из запроса facebook api. или вы можете использовать opauth в библиотеке аутентификации php, и она проста в использовании. Надеюсь, что это поможет