質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.28%

  • PHP

    15629questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • LINE Messaging API

    58questions

phpでlineのbotを作成

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 103

aieuo

score 1

前提・実現したいこと

phpのline-bot-sdkをつかいLineのbotを作っているのですがメッセージを送ってもClass LINE\LINEBot\HTTPClient\CurlHTTPClient not found と出てうまくできません
どのようにすればいいですか?

発生している問題・エラーメッセージ

Stack trace:
#0{main}
thrown in /app/index.php on line 5
PHP Fatal error: Uncaught Error: Class 'Class LINE\LINEBot\HTTPClient\CurlHTTPClient' not found in /app/index.php:5

試したこと

ファイルを置く場所やLINE\LINEBot\~~~の書き方が間違えているのかと思いいろいろと変えてみたのですがうまくできません
LINEという名前のフォルダがないのですがそれが関係しているのでしょうか?

補足情報(言語/FW/ツール等のバージョンなど)

このサイトを参考にして作っています

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

実際に試してみましたので、その時の手順を載せておきます。

 LINEプロバイダ作成

https://developers.line.me/console/register/messaging-api/provider/
※メールアドレスでアカウントの認証が必要です。

  1. 下記からLINE Developerアカウントを作成します。
  2. プロバイダ作成します。
  3. アプリ作成します。
  4. LINEで作成したチャンネルQRコードを読み取って友達になっておきます。

 Herokuアカウント作成

https://signup.heroku.com/login
※メールアドレスでアカウントの認証が必要です。

  1. Herokuアカウント作成します。
  2. New > アプリ作成します。
  3. PHPを選択します。

 LINE Messaging API 設定

https://developers.line.me/console/channel/プロバイダID/basic/

  1. アクセストークン(ロングターム)を設定します。(適当に24時間で作成)
  2. Webhook URLにHerokuのApp URLを登録します。(https://Herokuのアプリ名.herokuapp.com/)
    URLはhttps://dashboard.heroku.com/apps/アプリ名/settingsDomainにあります

 Heroku設定にトークン設定

https://dashboard.heroku.com/apps/アプリ名/settings

Herokuアプリ画面>SettigsからReveal Config Varsボタンクリックして、LINEのアクセストークン、チャンネル鍵を登録します。

  • CHANNEL_ACCESS_TOKEN:LINE Developer プロバイダで設定したアクセストークン(ロングターム)のトークン文字列をコピペ
  • CHANNEL_SECRET:LINE Developer プロバイダのChannel Secretの文字列をコピペ

 Herokuコマンドインストール(Windows)

下記からherokuアプリをダウンロード、インストールします。
https://devcenter.heroku.com/articles/getting-started-with-php#set-up

 Herokuコマンドインストール(Linux)

cd /tmp
curl -LO https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz
tar zxf heroku-cli-linux-x64.tar.gz

#解説に書いてある通りです。
sudo mkdir -p /usr/local/lib /usr/local/bin
sudo mv ./heroku-cli-v6.14.43-なんかのID-linux-x64 /usr/local/lib/
sudo ln -s /usr/local/lib/heroku-cli-v6.14.43-なんかのID-linux-x64/bin/heroku /usr/loca/bin/
rm -f heroku-cli-linux-x64.tar.gz

 Github, Dropbox

プロジェクトディレクトリ作成して、composerlinecorp/line-bot-sdkをインストールします。

cd プロジェクトディレクトリ
composer require linecorp/line-bot-sdk

上記と同じプロジェクトディレクトリにindex.phpを下記のように新規作成します。
文字コードはUTF-8、改行コードはLFで作成してください。(たぶんShift_JISCR+LFだとうまく動きません)

<?php
require_once __DIR__.'/vendor/autoload.php';

$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN'));
$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]);

$signature = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];

try {
    $events = $bot->parseEventRequest(file_get_contents('php://input'), $signature);
}
catch(\LINE\LINEBot\Exception\InvalidSignatureException $e) {
    error_log("parseEventRequest failed. InvalidSignatureException => ".var_export($e, true));
}
catch(\LINE\LINEBot\Exception\UnknownEventTypeException $e) {
    error_log("parseEventRequest failed. UnknownEventTypeException => ".var_export($e, true));
}
catch(\LINE\LINEBot\Exception\UnknownMessageTypeException $e) {
    error_log("parseEventRequest failed. UnknownMessageTypeException => ".var_export($e, true));
}
catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) {
    error_log("parseEventRequest failed. InvalidEventRequestException => ".var_export($e, true));
}


foreach ($events as $event) {
    if (!($event instanceof \LINE\LINEBot\Event\MessageEvent)) {
        error_log('Non message event has come');
        continue;
    }

    if (!($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage)) {
        error_log('Non text message has come');
        continue;
    }

    $bot->replyText($event->getReplyToken(), $event->getText());
}

?>

同じくプロジェクトディレクトリにProcfileを下記のように新規作成します。
文字コードはUTF-8、改行コードはLFで作成してください。(たぶんShift_JISCR+LFだとうまく動きません)

web: vendor/bin/heroku-php-nginx
  1. Githubにレポジトリを作成して、ローカルのソースをプッシュします。(Dropboxの場合はDeploy設定をしてDeployするのみです)
  2. https://dashboard.heroku.com/apps/Deployから、Githubの設定を行います。
  3. Deploy BranchボタンクリックしてHerokuにGithubからデプロイします。

※ ソースに問題がある場合はデプロイに失敗します。

 Herokuコマンドでログ確認

CMDやターミナルなどを開いて、下記コマンドを入力する。メールアドレスとパスワードを確認されるので、それぞれ入力しておきます。

heroku logs --app Herokuアプリ名 --tail -s app

LINEで友達になったチャンネルに、メッセージを送信すると、下記のように画面にオウム返しにメッセージが表示されます。

                      > テストです。
< テストです。

LINEメッセージを友達になったチャンネルに送ると、同じメッセージが表示されます。その時のログです。
エラーがあると、デバッグメッセージが表示されます。

xxx app[api]: Build started by user メールアドレス
xxx app[api]: Build succeeded
xxx app[web.1]: Going down, terminating child processes...
xxx app[api]: Release v14 created by user メールアドレス
xxx app[web.1]: Optimizing defaults for 1X dyno...
xxx app[web.1]: 4 processes at 128MB memory limit.
xxx app[web.1]: Starting php-fpm...
xxx app[api]: Deploy デプロイID by user メールアドレス
xxx app[web.1]: Starting nginx...
xxx app[web.1]: [xxx] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0
xxx app[web.1]: [xxx] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0

ブラウザでアクセスしたりすると、下記のようなエラーメッセージが表示されます。

xxx app[web.1]: [xxx] parseEventRequest failed. InvalidSignatureException => , LINE\LINEBot\Exception\InvalidSignatureException::__set_state(array(
xxx app[web.1]:    'message' => 'Request does not contain signature',
xxx app[web.1]:    'code' => 0,
xxx app[web.1]:    'string' => '',
xxx app[web.1]:    'file' => '/app/vendor/linecorp/line-bot-sdk/src/LINEBot/Event/Parser/EventRequestParser.php',
xxx app[web.1]:    'line' => 61,
xxx app[web.1]:    'trace' =>
xxx app[web.1]:   array (
xxx app[web.1]:     0 =>
xxx app[web.1]:     array (
xxx app[web.1]:       'file' => '/app/vendor/linecorp/line-bot-sdk/src/LINEBot.php',
xxx app[web.1]:       'function' => 'parseEventRequest',
xxx app[web.1]:       'line' => 193,
xxx app[web.1]:       'class' => 'LINE\\LINEBot\\Event\\Parser\\EventRequestParser',
xxx app[web.1]:       'type' => '::',
xxx app[web.1]:       'args' =>
xxx app[web.1]:       array (
xxx app[web.1]:         0 => '',
xxx app[web.1]:         1 => 'チャンネル鍵',
xxx app[web.1]:         2 => NULL,
xxx app[web.1]:       ),
xxx app[web.1]:     ),
xxx app[web.1]:     1 =>
xxx app[web.1]:     array (
xxx app[web.1]:       'file' => '/app/index.php',
xxx app[web.1]:       'line' => 12,
xxx app[web.1]:       'function' => 'parseEventRequest',
xxx app[web.1]:       'type' => '->',
xxx app[web.1]:       'class' => 'LINE\\LINEBot',
xxx app[web.1]:       'args' =>
xxx app[web.1]:       array (
xxx app[web.1]:         0 => '',
xxx app[web.1]:         1 => NULL,
xxx app[web.1]:       ),
xxx app[web.1]:     ),
xxx app[web.1]:   ),
xxx app[web.1]:    'previous' => NULL,
xxx app[web.1]: ))

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/23 21:37 編集

    回答ありがとうございます。
    教えていただいた通りにrequire_once()の部分を書き換えると違うエラーが出ます
    多分僕もindex.phpはvenderと同じフォルダに置いていると思います

    コマンドでcomposerのインストールができているか調べたら、それはできていました

    インターネットで調べても情報が古いのや、あまり詳しく書いているのがないので

    https://www.dropbox.com/sh/hsmfpwzjhlzd0dq/AACWx-gMFDQEo7auY_5Di-ENa?dl=0
    ここにあげているので何か間違えているところがあったら教えていただきたいです

    キャンセル

  • 2017/12/23 22:34

    頂いたソースは、私の環境だと問題なく動いています。PHPのバージョンやサーバー設定は問題ないでしょうか?
    私の環境は、Apache-2.2+PHP-5.6と、Apache-2.4+PHP-7.1で動作確認しました。

    キャンセル

  • 2017/12/24 15:48 編集

    すみません、リンクの解説を全部読んでませんでした。Heroku サービスと繋げてということなのですね。。。Dropboxは使ってないので、Git Hubと連携して試してみました。Dropboxでもソースを作成したら「Heroku上で、Deploy」はしなけれなりません。

    ■Messaging API
    ----
    https://developers.line.me/ja/
    https://developers.line.me/console/channel/開発者ID/basic/

    ・アクセストークン(ロングターム)を設定
    ・作成したチャンネルと友達になっておく。
    ・Webhook URLにHerokuのApp URLを登録(https://Herokuアプリ名.herokuapp.com/)
     ※URLは「https://dashboard.heroku.com/apps/アプリ名/settings」の「Domain」にある

    ■Heroku設定にトークン設定
    ----
    https://dashboard.heroku.com/apps/アプリ名/settings
    ※Reveal Config Vars でLINEのアクセストークン、チャンネル鍵を登録
    CHANNEL_ACCESS_TOKEN
    CHANNEL_SECRET

    ■HerokuコマンドをLinuxにインストール
    ----
    cd /tmp
    curl -LO https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz
    tar zxf heroku-cli-linux-x64.tar.gz
    ↓解説に書いてある通りです。
    sudo mkdir -p /usr/local/lib /usr/local/bin
    sudo mv ./heroku-cli-v6.14.43-なんかのID-linux-x64 /usr/local/lib/
    sudo ln -s /usr/local/lib/heroku-cli-v6.14.43-なんかのID-linux-x64/bin/heroku /usr/loca/bin/
    rm -f heroku-cli-linux-x64.tar.gz

    ■Herokuコマンドでログ確認
    ----
    heroku logs --app Herokuアプリ名 --tail -s app

    Build succeeded
    [24/Dec/2017:05:56:42 +0000] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0
    [24/Dec/2017:05:56:52 +0000] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0

    ↑LINEメッセージを友達になったチャンネルに送ると、同じメッセージが表示されます。その時のログです。
     エラーがあると、デバッグメッセージが表示されます。

    キャンセル

  • 2017/12/24 20:08

    早速試していただいてありがとうございます
    gothubでやってうまく動いたということなので、githubでやってみるとLINE¥LINEBot...
    の場所は行けたのですが、その後の1つ目のcatchで止まってしまいます。

    僕はwindowsにphpの環境をインストールしてやっていたのですが、それがうまくできていなかったのかな?
    リンク先のページ最後まで読むには登録しないといけないですよね。すみません
    dropboxでのやり方の説明ありがとうございます

    キャンセル

  • 2017/12/24 21:46

    ひとつ目の「catche()」はメッセージシグネチャーが不正だというメッセージです。LINEアプリからメッセージ送ってるのではなくて、ブラウザなどでアクセスするとそのようなエラーが表示されます。

    APIとして勝手に他人にメッセージをバンバン遅れたら、セキュリティ問題になってしまいます。ですので、POST送信した時のチャンネルトークンキーを読んで、正しいチャンネルかどうかの整合性確認をしてから返信しなければなりません。

    最近のPHPフレームワークでは、よくフォームページで「クロスサイト・リクエスト・フォージュリ(Cross Site Request Forgery)csrf_token()」のような機能があるのですが、これと似ています。勝手に外部サイトやクライアントからPOSTできないようにする仕組みです。

    キャンセル

  • 2017/12/25 20:06

    なるほど...
    lineから送ってもなぜかそのエラーが出ます...

    他の方が書いているコードに変えたらうまく動きました!
    本当に色々とありがとうございます

    キャンセル

  • 2017/12/25 20:51

    とりあえずできたということでよかったです。
    どのようにコードを変えたのでしょう? 動いたコードを質問や回答に追記しておいて頂けると、私も他の閲覧している方々も参考になると思います。(面倒かもしれませんが…)

    キャンセル

  • 2017/12/25 21:47 編集

    変えたコードをよく見てみると書き方が違うだけで内容はほとんど同じでした。

    違うところはアクセストークンをherokuで登録?してそこから取ってくるか、直接入れるかだけで、作り直した時に僕がherokuに登録するのを忘れていたのでそれが原因でエラーが出ていたのだと思います。

    すみません

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.28%

関連した質問

  • 解決済

    パーフェクトPHPの8章のミニブログのエラー解決について

    現在 パーフェクトPHPを通して、 PHPを学んでいます。 そこで、 7章で、フレームワークの土台を作成しました。 miniblogというディレクトリの配下に、 core , w

  • 解決済

    slack botを使おうとして

    現在windowsでのコマンドプロンプトで行おうとしており、http://toach.click/slack-botkit/のページに沿って導入しようとしていましたが,token=

  • 解決済

    php ヒアドキュメントエラー?

    コードは修正されnetbeansが何も言わなくなりました。 実行環境はubuntuですが、 ファイルに書き込めないと言っています。 確かにセキュリティーを考えるとファイルを勝

  • 解決済

    phpのエラーが解決できません。

    Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identif

  • 解決済

    php 2つの連想配列の比較

    プログラム独学者です。2回目の質問になります。 今、連想配列$rbm Array ( [alice] => 6 [betty] => 5 [cathy] => 4 [

  • 解決済

    PHPExcel エラー表示でファイルが開かない

    PHPExcelをダウンロードし、ローカルで動作確認をしようとしましたが 下記のようなエラーが出てファイルが開きません。 フォルダの階層等色々変更をしてみましたが、どこが違って

  • 解決済

    LINE APIで画像のおうむ返し

    LINE APIで画像のおうむ返しをしたいのですが、できません。 LINE API Reference (https://devdocs.line.me/ja/#conten

  • 解決済

    Parse error : syntax error, unexpected '{' in

    動画や画像をアップロードする機能なんですが 私が見る限りエラーが起こっているような所が見当たりません 発生している問題・エラーメッセージ Parse error</b>:

同じタグがついた質問を見る

  • PHP

    15629questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • LINE Messaging API

    58questions