javascript - PHP:发布有关提交表单的推文

标签 javascript php html wordpress twitter

我有一个模板,其中包含供用户填写的表单。用户使用其 Twitter 帐户成功登录后,用户将被重定向到包含表单的模板。现在,我正在尝试实现一项功能,其中在用户提交表单后,将在用户的 Twitter 时间轴上发布推文。

我正在使用 Abraham 的 twitteroauth 来实现 Twitter OAuth,并代表用户发布推文。

我还使用 save_post Hook 来触发一个函数,该函数将在表单提交后立即将推文发布到用户的 Twitter 帐户上。

代码:

<pre>
<?php
/*
 *Template Name: Callback 
*/

?>  
<?php

    session_start();
    require "twitteroauth/autoload.php";
    use Abraham\TwitterOAuth\TwitterOAuth;

    define('CONSUMER_KEY', "XXXXXXXXXXX");
    define('CONSUMER_SECRET', "XXXXXXXXXXX");
    define('OAUTH_CALLBACK', "http://localhost/wordpress/index.php/callback/");

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

    if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token'])
    {
        echo "Opps! Something went wrong!";
    }

    else
    {
        $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
        $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));

        //print_r($access_token);

        $_SESSION['access_token'] = $access_token;

        $access_token = $_SESSION['access_token'];

        //print_r($_REQUEST['oauth_verifier']);

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


        $handle = $access_token['screen_name'];
        $o_token = $access_token['oauth_token'];
        $o_token_secret = $access_token['oauth_token_secret'];
        $user_id = $access_token['user_id'];
        $o_verifier = $_REQUEST['oauth_verifier'];

        function cron_tweet()
        {
            $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $o_token, $o_token_secret);
            $response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
        }

        add_action('save_post', cron_tweet);

    }


?>


<script>

    var count = 0

    function addNewMessage(count)
        {       
                if(count > 5)
                {
                    window.alert("NO MORE THAN 5!");
                }
                else
                {
                    var celeb = document.createElement("input");
                    celeb.type = "text";
                    celeb.name = "tweet" + count;
                    celeb.placeholder = "Tweet" + " " + count;
                    celebrity.appendChild(celeb);

                    var date = document.createElement("input");
                    date.type = "datetime-local";
                    date.name = "date" + count;
                    date.placeholder = "message-date" + " " + count;
                    celebrity.appendChild(date);

                    celebrity.appendChild(document.createElement("br"));
                    celebrity.appendChild(document.createElement("br"));
                }
        }        

    function postResults()
    {
        <?php
           $post_information = array(
        'post_title' => 'New Tweet Schedule',
        'post_content' => 'Mandatory content',
        'post_status' => 'publish',
        'post_type' => 'schedule_tweet',
        );

        $post_id = wp_insert_post( $post_information );

        add_post_meta($post_id, 'twitter_handle', $handle, true);
        add_post_meta($post_id, 'oauth_token', $o_token, true);
        add_post_meta($post_id, 'oauth_token_secret', $o_token_secret, true);
        add_post_meta($post_id, 'user_id', $user_id, true);

        add_post_meta($post_id, 'tweet_1', $_POST['tweet1'], true);
        add_post_meta($post_id, 'tweet_2', $_POST['tweet2'], true);
        add_post_meta($post_id, 'tweet_3', $_POST['tweet3'], true);
        add_post_meta($post_id, 'tweet_4', $_POST['tweet4'], true);
        add_post_meta($post_id, 'tweet_5', $_POST['tweet5'], true);

        add_post_meta($post_id, 'date_1', $_POST['date1'], true);
        add_post_meta($post_id, 'date_2', $_POST['date2'], true);
        add_post_meta($post_id, 'date_3', $_POST['date3'], true);
        add_post_meta($post_id, 'date_4', $_POST['date4'], true);
        add_post_meta($post_id, 'date_5', $_POST['date5'], true);


        ?>
    }

</script>

<form method = "POST">

    <fieldset>
        <a style = "color:red" onclick = "addNewMessage(++count)">Schedule a tweet</a>
        <div id = "celebrity"/>
    </fieldset>

    <br>
    <fieldset>
        <input type="hidden" name="submitted" id="submitted" value="true" />
        <?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
        <button type="submit" onclick = "postResults()"><?php _e('Add Campaign', 'framework') ?></button>
    </fieldset>


</form>

如上所示,我定义了以下钩子(Hook),以便在用户单击 Submit 按钮后立即触发函数 cron_tweet:

function cron_tweet()
        {
            $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $o_token, $o_token_secret);
            $response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
        }

        add_action('save_post', cron_tweet);

cron_tweet 函数基本上尝试在用户的 Twitter 帐户上发布推文。

但是,上面的代码似乎没有按预期工作。用户提交表单后,用户的 Twitter 帐户上不会发布任何推文。

我的代码似乎有什么问题?我错过了什么吗?

最佳答案

您发现任何错误吗?我看到的最有可能的问题是在 cron_tweet 范围内看不到 $o_token$o_token_secret

一种解决方案是将这些详细信息保存到 session 变量中:

        $handle = $access_token['screen_name'];
        $_SESSION['o_token'] = $access_token['oauth_token'];
        $_SESSION['o_token_secret'] = $access_token['oauth_token_secret'];
        $user_id = $access_token['user_id'];
        $o_verifier = $_REQUEST['oauth_verifier'];

        function cron_tweet()
        {
            $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['o_token'], $_SESSION['o_token_secret']);
            $response = $connection->post("statuses/update", array('status' => 'Versionuyyu 1.0'));
        }

关于javascript - PHP:发布有关提交表单的推文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32150903/

相关文章:

php - 构建 cron 作业调度程序

java - HTML 部署中的 LibGDX 未捕获运行时异常

javascript - 使用Array.filter后如何获取多个值?

javascript - 更改 css 子元素导航树

php - 正则表达式反向引用

jquery - HTML/CSS/JQUERY - 悬停在菜单上时下拉菜单消失

javascript - contenteditable div 内有很多 span 标签

javascript - Angular 4 功能模块

javascript - 我想将数据库中的数据显示到我的jade模板中

javascript - Preg_replace 在 Content PHP 中获取图片链接