Plugin Directory

Changeset 2689189


Ignore:
Timestamp:
03/05/2022 03:16:44 AM (3 years ago)
Author:
growniche
Message:

LINE Messaging API SDK for PHP をやめて、直接 LINE Messaging API を利用することにした。(ChannelSecret不要)
カスタム投稿に対応した。

Location:
line-auto-post/trunk
Files:
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • line-auto-post/trunk/line-auto-post.php

    r2543176 r2689189  
    55  Plugin URI: https://s-page.biz/line-auto-post/
    66  Description: WordPressの投稿をLINE公式アカウント経由で連動配信することができるプラグインです。
    7   Version: 1.0.3
     7  Version: 1.0.4
    88  Author: growniche
    99  Author URI: https://www.growniche.co.jp/
     
    1919     * このプラグインのバージョン
    2020     */
    21     const VERSION = '1.0.2';
     21    const VERSION = '1.0.4';
    2222
    2323    /**
     
    6262
    6363    /**
    64      * OPTIONSテーブルのキー:ChannelSecret
    65      */
    66     const OPTION_KEY__CHANNEL_SECRET = self::PLUGIN_PREFIX . 'channel-secret';
    67 
    68     /**
    6964     * 画面のslug:トップ
    7065     */
     
    8277
    8378    /**
    84      * パラメータ名:ChannelSecret
    85      */
    86     const PARAMETER__CHANNEL_SECRET = self::PLUGIN_PREFIX . 'channel-secret';
    87 
    88     /**
    8979     * パラメータ名:LINEメッセージ送信チェックボックス
    9080     */
     
    9787
    9888    /**
    99      * TRANSIENTキー(一時入力値):ChannelSecret ※4文字+41文字以下
    100      */
    101     const TRANSIENT_KEY__TEMP_CHANNEL_SECRET = self::PLUGIN_PREFIX . 'temp-channel-secret';
    102 
    103     /**
    10489     * TRANSIENTキー(不正メッセージ):ChannelAccessToken
    10590     */
     
    10792
    10893    /**
    109      * TRANSIENTキー(不正メッセージ):ChannelSecret
    110      */
    111     const TRANSIENT_KEY__INVALID_CHANNEL_SECRET = self::PLUGIN_PREFIX . 'invalid-channel-secret';
    112 
    113     /**
    11494     * TRANSIENTキー(エラー):LINEメッセージ送信失敗
    11595     */
     
    160140     */
    161141    const REGEXP_CHANNEL_ACCESS_TOKEN = '/^[a-zA-Z0-9+\/=]{100,}$/';
    162     /**
    163      * 正規表現:ChannelSecret
    164      */
    165     const REGEXP_CHANNEL_SECRET = '/^[a-z0-9]{30,}$/';
    166142
    167143    /**
     
    242218     */
    243219    static function getNotice($message, $type) {
    244         return 
     220        return
    245221            '<div class="notice notice-' . $type . ' is-dismissible">' .
    246222            '<p><strong>' . esc_html($message) . '</strong></p>' .
     
    265241            // 投稿画面にチェックボックスを表示
    266242            add_action('add_meta_boxes', [$this, 'add_send_checkbox'], 10, 2 );
     243            // カスタム投稿の場合
     244            $custom_post_slags = array_keys(get_post_types(array( 'line_auto_post' => true )));
     245            foreach ($custom_post_slags as $custom_post_slag) {
     246                // カスタム投稿(公開)した時のコールバック関数を定義
     247                add_action('publish_'.$custom_post_slag, [$this, 'send_to_line'], 1, 6);
     248            }
    267249        }
    268250        // 管理画面を表示中、且つ、ログイン済、且つ、特権管理者or管理者or編集者or投稿者の場合
     
    291273            'high'
    292274        );
     275        // カスタム投稿の場合
     276        $custom_post_slags = array_keys(get_post_types(array( 'line_auto_post' => true )));
     277        foreach ($custom_post_slags as $custom_post_slag) {
     278            add_meta_box(
     279                // チェックボックスのID
     280                self::PARAMETER__SEND_CHECKBOX,
     281                // チェックボックスのラベル名
     282                'LINEメッセージ送信',
     283                // チェックボックスを表示するコールバック関数
     284                [$this, 'show_send_checkbox'],
     285                // カスタム投稿画面に表示
     286                $custom_post_slag,
     287                // 投稿画面の右サイドに表示
     288                'advanced',
     289                // 優先度(最優先)
     290                'high'
     291            );
     292        }
    293293    }
    294294
     
    328328        // ChannelAccessTokenをOPTIONSテーブルから取得
    329329        $channel_access_token = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_ACCESS_TOKEN), self::ENCRYPT_PASSWORD);
    330         // ChannelSecretをOPTIONSテーブルから取得
    331         $channel_secret = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_SECRET), self::ENCRYPT_PASSWORD);
    332         // ChannelAccessTokenとChannelSecretが設定されている場合
    333         if (strlen($channel_access_token) > 0 && strlen($channel_secret) > 0) {
     330        // ChannelAccessTokenが設定されている場合
     331        if (strlen($channel_access_token) > 0) {
    334332            // 投稿のタイトルを取得
    335333            $title = sanitize_text_field($post->post_title);
     
    348346            $message = $title . "\r\n" . $body30 . "\r\n" . $link;
    349347            // LINEに送信
    350             require_once( dirname(__FILE__).'/LINE/LINEBot/Response.php');
    351             require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient/Curl.php');
    352             require_once( dirname(__FILE__).'/LINE/LINEBot/Constant/MessageType.php');
    353             require_once( dirname(__FILE__).'/LINE/LINEBot/MessageBuilder.php');
    354             require_once( dirname(__FILE__).'/LINE/LINEBot/Constant/Meta.php');
    355             require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient.php');
    356             require_once( dirname(__FILE__).'/LINE/LINEBot/HTTPClient/CurlHTTPClient.php');
    357             require_once( dirname(__FILE__).'/LINE/LINEBot.php');
    358             require_once( dirname(__FILE__).'/LINE/LINEBot/MessageBuilder/TextMessageBuilder.php');
    359             $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient($channel_access_token);
    360             $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => $channel_secret]);
    361             $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($message);
    362             $response = $bot->broadcast($textMessageBuilder);
     348            $contents = file_get_contents(
     349                'https://api.line.me/v2/bot/message/broadcast',
     350                false,
     351                stream_context_create(
     352                    array(
     353                        'http' => array(
     354                            'method' => 'POST',
     355                            'header' => array(
     356                                'Content-Type: application/json;',
     357                                'Authorization: Bearer '.$channel_access_token
     358                            ),
     359                            'content' => json_encode(
     360                                array(
     361                                    "messages" => array(
     362                                        array(
     363                                            "type" => "text",
     364                                            "text" => $message
     365                                        )
     366                                    )
     367                                )
     368                            )
     369                        )
     370                    )
     371                )
     372            );
    363373            // 送信に成功した場合
    364             if ($response->getHTTPStatus() === 200) {
     374            if ($contents !== false) {
    365375                // LINE送信に成功した旨をTRANSIENTに5秒間保持
    366376                set_transient(self::TRANSIENT_KEY__SUCCESS_SEND_TO_LINE, 'LINEに送信しました', self::TRANSIENT_TIME_LIMIT);
     
    468478            $invalid_channel_access_token = self::getNotice($invalid_channel_access_token, self::NOTICE_TYPE__ERROR);
    469479        }
    470         // ChannelSecretの不正メッセージ
    471         if (false !== ($invalid_channel_secret = get_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET))) {
    472             $invalid_channel_secret = self::getNotice($invalid_channel_secret, self::NOTICE_TYPE__ERROR);
    473         }
    474480        // ChannelAccessTokenのパラメータ名
    475481        $param_channel_access_token = self::PARAMETER__CHANNEL_ACCESS_TOKEN;
    476         // ChannelSecretのパラメータ名
    477         $param_channel_secret = self::PARAMETER__CHANNEL_SECRET;
    478482        // ChannelAccessTokenをTRANSIENTから取得
    479483        if (false === ($channel_access_token = get_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN))) {
     
    482486        }
    483487        $channel_access_token = esc_html($channel_access_token);
    484         // ChannelSecretをTRANSIENTから取得
    485         if (false === ($channel_secret = get_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET))) {
    486             // 無ければoptionsテーブルから取得
    487             $channel_secret = self::decrypt(get_option(self::OPTION_KEY__CHANNEL_SECRET), self::ENCRYPT_PASSWORD);
    488         }
    489         $channel_secret = esc_html($channel_secret);
    490488        // nonceフィールドを生成・取得
    491489        $nonce_field = wp_nonce_field(self::CREDENTIAL_ACTION__SETTINGS_FORM, self::CREDENTIAL_NAME__SETTINGS_FORM, true, false);
     
    498496            {$complete_message}
    499497            {$invalid_channel_access_token}
    500             {$invalid_channel_secret}
    501498            <form action="" method='post' id="line-auto-post-settings-form">
    502499                {$nonce_field}
     
    504501                    <label for="{$param_channel_access_token}">Channel Access Token:</label>
    505502                    <input type="text" name="{$param_channel_access_token}" value="{$channel_access_token}"/>
    506                 </p>
    507                 <p>
    508                     <label for="{$param_channel_secret}">Channel Secret:</label>
    509                     <input type="text" name="{$param_channel_secret}" value="{$channel_secret}"/>
    510503                </p>
    511504                {$submit_button}
     
    525518                // ChannelAccessTokenをPOSTから取得
    526519                $channel_access_token = trim(sanitize_text_field($_POST[self::PARAMETER__CHANNEL_ACCESS_TOKEN]));
    527                 // ChannelSecretをPOSTから取得
    528                 $channel_secret = trim(sanitize_text_field($_POST[self::PARAMETER__CHANNEL_SECRET]));
    529520                $valid = true;
    530521                // ChannelAccessTokenが正しくない場合
     
    535526                    $valid = false;
    536527                }
    537                 // ChannelSecretが正しくない場合
    538                 if (!preg_match(self::REGEXP_CHANNEL_SECRET, $channel_secret)) {
    539                     // ChannelSecretの設定し直しを促すメッセージをTRANSIENTに5秒間保持
    540                     set_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET, "Channel Secret が正しくありません。", self::TRANSIENT_TIME_LIMIT);
    541                     // 有効フラグをFalse
    542                     $valid = false;
    543                 }
    544                 // 有効フラグがTrueの場合(ChannelAccessTokenとChannelSecretが入力されている場合)
     528                // 有効フラグがTrueの場合(ChannelAccessTokenが入力されている場合)
    545529                if ($valid) {
    546530                    // 保存処理
    547531                    // ChannelAccessTokenをoptionsテーブルに保存
    548532                    update_option(self::OPTION_KEY__CHANNEL_ACCESS_TOKEN, self::encrypt($channel_access_token, self::ENCRYPT_PASSWORD));
    549                     // ChannelSecretをoptionsテーブルに保存
    550                     update_option(self::OPTION_KEY__CHANNEL_SECRET, self::encrypt($channel_secret, self::ENCRYPT_PASSWORD));
    551533                    // 保存が完了したら、完了メッセージをTRANSIENTに5秒間保持
    552534                    set_transient(self::TRANSIENT_KEY__SAVE_SETTINGS, "初期設定の保存が完了しました。", self::TRANSIENT_TIME_LIMIT);
    553535                    // (一応)ChannelAccessTokenの不正メッセージをTRANSIENTから削除
    554536                    delete_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_ACCESS_TOKEN);
    555                     // (一応)ChannelSecretの不正メッセージをTRANSIENTから削除
    556                     delete_transient(self::TRANSIENT_KEY__INVALID_CHANNEL_SECRET);
    557537                    // (一応)ユーザが入力したChannelAccessTokenをTRANSIENTから削除
    558538                    delete_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN);
    559                     // (一応)ユーザが入力したChannelSecretをTRANSIENTから削除
    560                     delete_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET);
    561539                }
    562                 // 有効フラグがFalseの場合(ChannelAccessToken、ChannelSecretが入力されていない場合)
     540                // 有効フラグがFalseの場合(ChannelAccessTokenが入力されていない場合)
    563541                else {
    564542                    // ユーザが入力したChannelAccessTokenをTRANSIENTに5秒間保持
    565543                    set_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_ACCESS_TOKEN, $channel_access_token, self::TRANSIENT_TIME_LIMIT);
    566                     // ユーザが入力したChannelSecretをTRANSIENTに5秒間保持
    567                     set_transient(self::TRANSIENT_KEY__TEMP_CHANNEL_SECRET, $channel_secret, self::TRANSIENT_TIME_LIMIT);
    568544                    // (一応)初期設定の保存完了メッセージを削除
    569545                    delete_transient(self::TRANSIENT_KEY__SAVE_SETTINGS);
  • line-auto-post/trunk/readme.txt

    r2543176 r2689189  
    2727
    2828== Frequently Asked Questions ==
    29  
     29
    3030== Changelog ==
    3131
     
    3838= 1.0.3 =
    3939* 2021-06-06 WordPress 5.7.2 に対応
     40= 1.0.4 =
     41* 2022-03-05 LINE Messaging API SDK for PHP をやめて、直接 LINE Messaging API を利用(ChannelSecret不要)
     42* 2022-03-05 カスタム投稿に対応
Note: See TracChangeset for help on using the changeset viewer.