Created
April 3, 2018 02:49
-
-
Save noriyukitakei/fc3560679f368da41c3bfc545b72ff9b to your computer and use it in GitHub Desktop.
OAuthコンシューマーのメッセージ一覧&投稿画面
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// セッションを開始します。 | |
session_start(); | |
// usernameというセッション変数に何もセットされていなかったら、 | |
// すなわち未認証だったら、ログイン画面にリダイレクトします。 | |
if (!isset($_SESSION['username'])) { | |
// ログイン画面にリダイレクトする前に、ログイン後に | |
// 戻る画面の戻り先のURL(つまり本画面のURL)をセッションに格納します。 | |
$_SESSION['back'] = $_SERVER["REQUEST_URI"]; | |
header('Location: /login.php'); | |
exit; | |
} | |
// データベースの接続に必要なPDOインスタンスを作成します。 | |
$pdo = new PDO('mysql:dbname=consumer;host=localhost', 'root', 'password'); | |
// メッセージが投稿されたらデータベースに反映します。 | |
if (!empty($_POST["post"])) { | |
// OAuthコンシューマー(Twitter)に投稿を反映します | |
$stmt = $pdo->prepare('INSERT INTO messages VALUES(:username,:message)'); | |
$stmt->execute(array(':message' => $_POST["message"], ':username' => 'ntakei')); | |
// ここからはOAuthプロバイダー(Facebook)側の投稿APIを叩いて、OAuthコンシューマー(Twitter)に | |
// 投稿された内容をOAuthプロバイダー(Facebook)側にも反映する処理を行います。 | |
// ログインユーザーに紐づくアクセストークンを取得します。 | |
$stmt2 = $pdo->prepare('SELECT access_token FROM consumer_users WHERE username = ?'); | |
$stmt2->execute(array($_SESSION['username'])); | |
$result = $stmt2->fetch(PDO::FETCH_ASSOC); | |
// なぜか明示的にこのpplication/x-www-form-urlencodedヘッダーを入れないとエラーになるので、入れます | |
$header = [ | |
'Content-Type: application/x-www-form-urlencoded' | |
]; | |
$curl = curl_init(); | |
curl_setopt($curl, CURLOPT_URL, 'https://[OAuthプロバイダーのホスト名]/post_message.php'); // 投稿APIのURLを指定します | |
curl_setopt($curl, CURLOPT_POST, true); // POSTリクエストを有効にします | |
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 出力を有効にします | |
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // SSL証明書の検証を無効にします(オレオレ証明書対策) | |
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // HTTPヘッダーを送ります。 | |
curl_setopt($curl, CURLOPT_POSTFIELDS, "message=".$_POST["message"]."&access_token=".$result["access_token"]); // 投稿内容とアクセストークンをPOSTでリクエストするためのリクエストレスポンスを生成します。 | |
// 投稿APIを実行します。 | |
$result = curl_exec($curl); | |
curl_close($curl); | |
} | |
$stmt3 = $pdo->prepare('SELECT * FROM messages'); | |
$stmt3->execute(); | |
?> | |
<html> | |
<head> | |
<meta charset="UTF-8"> | |
<title>Twitterメッセージ一覧画面</title> | |
</head> | |
<h1>Twitterメッセージ一覧画面</h1> | |
<body> | |
<form action="/messages.php" method="POST"> | |
<input type="text" name="message" value=""> | |
<input type="submit" name="post" value="投稿"> | |
</form> | |
<table border="1"> | |
<tr> | |
<td>ユーザー名</td><td>メッセージ</td> | |
</tr> | |
<?php | |
while($result = $stmt3->fetch(PDO::FETCH_ASSOC)){ | |
echo("<tr>"); | |
echo("<td>".$result['username']."</td>"); | |
echo("<td>".$result['message']."</td>"); | |
echo("</tr>"); | |
} | |
?> | |
</table> | |
</body> | |
</html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment