1

Abraham Williams の oAuth ライブラリを使用してステータスを更新しています。このアプリケーションには UI がありません (Twitter からの資格情報のプロンプト以外にはありません。代わりに、ユーザーはブラウザーに URL を入力します。

URL が呼び出されると、「ツイートを投稿できませんでした。エラー: 理由: 1」というエラーが表示されます。

いくつかのテスト コードを挿入しましたが、遷移の間にセッションが失われているように見えます: $_SESSION['tweetmsg'] は index.php の最初の呼び出しで設定されていますが、connect.php への切り替えが発生すると、セッションが失われたかのように。何か案は?

ソースコードは次のとおりです。

index.php

<?php
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";
session_start();
if (empty($_SESSION['access_token'])) {
  $_SESSION['tweetmsg'] = create_tweet_text();
  print "<script>self.location='./connect.php');</script>";
}

$connection = new TwitterOAuth(
  CONSUMER_KEY,
  CONSUMER_SECRET,
  $_SESSION['access_token']['oauth_token'],
  $_SESSION['access_token']['oauth_token_secret']
);

if (!isset($_SESSION['tweetmsg'])) {
  exit('No tweet value in session or from form');
}
$tweetmsg = $_SESSION['tweetmsg'];
$result = $connection->post('statuses/update', array('status' => $tweetmsg));
unset($_SESSION['tweetmsg']);
if (200 === $connection->http_code) {
  echo 'Tweet Posted: '.$tweetmsg;
}
else {
  echo 'Could not post Tweet. Error: '.$httpCode.' Reason: '.
  session_destroy();
}
function create_tweet_text () {
  return 'this is a test';
}

connect.php

?php
session_start();
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
$request_token = $connection->getRequestToken(OAUTH_CALLBACK.'callback.php');

$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

$url = $connection->getAuthorizeURL($request_token);
print "<script>self.location='$url';</script>";

callback.php

<?php
session_start();
include_once '../../winsinclude/tw_config.php';
require_once "../../winsinclude/twitteroauth.php";
require_once "../../winsinclude/OAuth.php";

if (
  isset($_REQUEST['oauth_token']) 
  && $_SESSION['oauth_token'] !== $_REQUEST['oauth_token']
) {
  echo 'Session expired';
}
else {
  $connection = new TwitterOAuth(
    CONSUMER_KEY,
    CONSUMER_SECRET,
    $_SESSION['oauth_token'],
    $_SESSION['oauth_token_secret']
  );
  $_SESSION['access_token'] = $connection->getAccessToken($_REQUEST['oauth_verifier']);
  print "<script>self.location='index.php';</script>";
}
4

1 に答える 1

0

最近、Twitter は oAuth の多くの http URL を非アクティブ化し、それらを https に相当するものに置き換えました。インクルードにURL 文字列http://twitter.com/oauth/request_tokenが表示される場合は、https://dev.twitter.com/discussions/10803 に従って、すべての呼び出しを https に変更する必要があることを意味します。 .

于 2012-10-13T11:36:40.853 に答える