###前提・実現したいこと
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/ツール等のバージョンなど)
このサイトを参考にして作っています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答1件
0
ベストアンサー
実際に試してみましたので、その時の手順を載せておきます。
LINEプロバイダ作成
https://developers.line.me/console/register/messaging-api/provider/
※メールアドレスでアカウントの認証が必要です。
- 下記からLINE Developerアカウントを作成します。
- プロバイダ作成します。
- アプリ作成します。
- LINEで作成したチャンネルQRコードを読み取って友達になっておきます。
Herokuアカウント作成
https://signup.heroku.com/login
※メールアドレスでアカウントの認証が必要です。
- Herokuアカウント作成します。
- New > アプリ作成します。
- PHPを選択します。
LINE Messaging API 設定
https://developers.line.me/console/channel/プロバイダID/basic/
- アクセストークン(ロングターム)を設定します。(適当に24時間で作成)
- Webhook URLにHerokuのApp URLを登録します。(https://Herokuのアプリ名.herokuapp.com/)
URLはhttps://dashboard.heroku.com/apps/アプリ名/settings
のDomain
にあります
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)
bash
1cd /tmp 2curl -LO https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz 3tar zxf heroku-cli-linux-x64.tar.gz 4 5#解説に書いてある通りです。 6sudo mkdir -p /usr/local/lib /usr/local/bin 7sudo mv ./heroku-cli-v6.14.43-なんかのID-linux-x64 /usr/local/lib/ 8sudo ln -s /usr/local/lib/heroku-cli-v6.14.43-なんかのID-linux-x64/bin/heroku /usr/loca/bin/ 9rm -f heroku-cli-linux-x64.tar.gz
Github, Dropbox
プロジェクトディレクトリ作成して、composerでlinecorp/line-bot-sdkをインストールします。
bash
1cd プロジェクトディレクトリ 2composer require linecorp/line-bot-sdk
上記と同じプロジェクトディレクトリにindex.php
を下記のように新規作成します。
文字コードはUTF-8
、改行コードはLF
で作成してください。(たぶんShift_JIS、CR+LFだとうまく動きません)
php
1<?php 2require_once __DIR__.'/vendor/autoload.php'; 3 4$httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient(getenv('CHANNEL_ACCESS_TOKEN')); 5$bot = new \LINE\LINEBot($httpClient, ['channelSecret' => getenv('CHANNEL_SECRET')]); 6 7$signature = $_SERVER["HTTP_" . \LINE\LINEBot\Constant\HTTPHeader::LINE_SIGNATURE]; 8 9try { 10 $events = $bot->parseEventRequest(file_get_contents('php://input'), $signature); 11} 12catch(\LINE\LINEBot\Exception\InvalidSignatureException $e) { 13 error_log("parseEventRequest failed. InvalidSignatureException => ".var_export($e, true)); 14} 15catch(\LINE\LINEBot\Exception\UnknownEventTypeException $e) { 16 error_log("parseEventRequest failed. UnknownEventTypeException => ".var_export($e, true)); 17} 18catch(\LINE\LINEBot\Exception\UnknownMessageTypeException $e) { 19 error_log("parseEventRequest failed. UnknownMessageTypeException => ".var_export($e, true)); 20} 21catch(\LINE\LINEBot\Exception\InvalidEventRequestException $e) { 22 error_log("parseEventRequest failed. InvalidEventRequestException => ".var_export($e, true)); 23} 24 25 26foreach ($events as $event) { 27 if (!($event instanceof \LINE\LINEBot\Event\MessageEvent)) { 28 error_log('Non message event has come'); 29 continue; 30 } 31 32 if (!($event instanceof \LINE\LINEBot\Event\MessageEvent\TextMessage)) { 33 error_log('Non text message has come'); 34 continue; 35 } 36 37 $bot->replyText($event->getReplyToken(), $event->getText()); 38} 39 40?>
同じくプロジェクトディレクトリにProcfile
を下記のように新規作成します。
文字コードはUTF-8
、改行コードはLF
で作成してください。(たぶんShift_JIS、CR+LFだとうまく動きません)
web: vendor/bin/heroku-php-nginx
- Githubにレポジトリを作成して、ローカルのソースをプッシュします。(Dropboxの場合はDeploy設定をしてDeployするのみです)
- https://dashboard.heroku.com/apps/のDeployから、Githubの設定を行います。
- Deploy BranchボタンクリックしてHerokuにGithubからデプロイします。
※ ソースに問題がある場合はデプロイに失敗します。
Herokuコマンドでログ確認
CMDやターミナルなどを開いて、下記コマンドを入力する。メールアドレスとパスワードを確認されるので、それぞれ入力しておきます。
bash
1heroku logs --app Herokuアプリ名 --tail -s app
LINEで友達になったチャンネルに、メッセージを送信すると、下記のように画面にオウム返しにメッセージが表示されます。
> テストです。 < テストです。
LINEメッセージを友達になったチャンネルに送ると、同じメッセージが表示されます。その時のログです。
エラーがあると、デバッグメッセージが表示されます。
log
1xxx app[api]: Build started by user メールアドレス 2xxx app[api]: Build succeeded 3xxx app[web.1]: Going down, terminating child processes... 4xxx app[api]: Release v14 created by user メールアドレス 5xxx app[web.1]: Optimizing defaults for 1X dyno... 6xxx app[web.1]: 4 processes at 128MB memory limit. 7xxx app[web.1]: Starting php-fpm... 8xxx app[api]: Deploy デプロイID by user メールアドレス 9xxx app[web.1]: Starting nginx... 10xxx app[web.1]: [xxx] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0 11xxx app[web.1]: [xxx] "POST / HTTP/1.1" 200 5 "-" "LineBotWebhook/1.0
ブラウザでアクセスしたりすると、下記のようなエラーメッセージが表示されます。
log
1xxx app[web.1]: [xxx] parseEventRequest failed. InvalidSignatureException => , LINE\LINEBot\Exception\InvalidSignatureException::__set_state(array( 2xxx app[web.1]: 'message' => 'Request does not contain signature', 3xxx app[web.1]: 'code' => 0, 4xxx app[web.1]: 'string' => '', 5xxx app[web.1]: 'file' => '/app/vendor/linecorp/line-bot-sdk/src/LINEBot/Event/Parser/EventRequestParser.php', 6xxx app[web.1]: 'line' => 61, 7xxx app[web.1]: 'trace' => 8xxx app[web.1]: array ( 9xxx app[web.1]: 0 => 10xxx app[web.1]: array ( 11xxx app[web.1]: 'file' => '/app/vendor/linecorp/line-bot-sdk/src/LINEBot.php', 12xxx app[web.1]: 'function' => 'parseEventRequest', 13xxx app[web.1]: 'line' => 193, 14xxx app[web.1]: 'class' => 'LINE\LINEBot\Event\Parser\EventRequestParser', 15xxx app[web.1]: 'type' => '::', 16xxx app[web.1]: 'args' => 17xxx app[web.1]: array ( 18xxx app[web.1]: 0 => '', 19xxx app[web.1]: 1 => 'チャンネル鍵', 20xxx app[web.1]: 2 => NULL, 21xxx app[web.1]: ), 22xxx app[web.1]: ), 23xxx app[web.1]: 1 => 24xxx app[web.1]: array ( 25xxx app[web.1]: 'file' => '/app/index.php', 26xxx app[web.1]: 'line' => 12, 27xxx app[web.1]: 'function' => 'parseEventRequest', 28xxx app[web.1]: 'type' => '->', 29xxx app[web.1]: 'class' => 'LINE\LINEBot', 30xxx app[web.1]: 'args' => 31xxx app[web.1]: array ( 32xxx app[web.1]: 0 => '', 33xxx app[web.1]: 1 => NULL, 34xxx app[web.1]: ), 35xxx app[web.1]: ), 36xxx app[web.1]: ), 37xxx app[web.1]: 'previous' => NULL, 38xxx app[web.1]: ))
投稿2017/12/23 07:46
編集2017/12/24 12:33総合スコア1652
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/23 12:37 編集
2017/12/23 13:34
2017/12/24 06:48 編集
2017/12/24 11:08
2017/12/24 12:46
2017/12/25 11:06
2017/12/25 11:51
2017/12/25 12:47 編集