OpenSocialなプラットフォームで提供されているREST APIの実装を、Laravel 5.0.0で行いました。

API提供元より支給されたサンプルは純粋なPHPコードです。
外部システムとの連携では サンプルコードをできるるだけそのまま実装する のが鉄則ですが、サンプルに従ってPEARHttp/Request2OAuthを、Laravelで利用する際に一苦労がありました。

利用バージョンはこちら。

  • PHP 5.4
  • Laravel 5.0.0

Http/Request2

HTTP/Request2ライブラリ
http://pear.php.net/package/HTTP_Request2/

PEARComposerで管理することが可能です。
しかしながらPHP拡張にパスが通っていてすぐに利用できることが前提っぽい実装になっているため、ひと工夫が必要です。

composer.jsonを次のように修正します。

1{
2    "require": {
3        "pear/http_request2": "2.2.1"
4    },
5    "include-path": [
6        "vendor/pear/net_url2",
7        "vendor/pear/http_request2"
8    ]
9}

次にcomposer updateを実行してライブラリを更新しましょう。

1$ composer update

最後にvender以下のオートロードを更新します。

1$ composer dumpautoload

これでPEARのHttp/Request2が利用できるようになりました。

LaravelからはHTTP_Request2\HTTP_Request2とバックスラッシュ付きで呼び出してください。

1php$http_request = new \HTTP_Request2($endpoint_url, \HTTP_Request2::METHOD_POST, $http_options);

PEARについては以下の記事を参考にいたしました。 ありがとうございます。

composerで入れたパッケージがautoloadで見つからなくてエラーになっちゃう場合の対処法 http://qiita.com/milano/items/1461d715a90b185da866

OAuth

OAuthライブラリ
http://code.google.com/p/oauth/

OAuthはおーおーすと読みます。


Laravel 5上で利用できるOAuthのラッパーは、いくつもGitHubなどで公開されていますので、近道は可能です。

今回はサンプルコードをベースに実装することが前提のため、意地になってピュアなOAuthを使います。

こんなエラーが

エラーその1. OAuthException

はじめに、OAuthをDLして直接Requireしてみます。 するとCannot redeclare class OAuthExceptionが発生して処理がストップしてしまいます。

OAuth.phpを開き、とりあえず「OAuthExceptionをOAuthException2」と、イケてない感じにリネームしてみます。

エラーその2. Class not found

その次にPHPを叩くと、次のようにOAuthSignatureMethod_HMAC_SHA1が見つからないとエラーが出てしまいました。

1FatalErrorException in TestController.php line 79:
2Class ‘App\Http\Controllers\OAuthSignatureMethod_HMAC_SHA1’ not found

解決方法

stackoverflowでまったく同様のお悩みを持っていた方がおりましたので、以下のアドバイスに従って対策を入おこないます。

stackoverflow
Use OAuth 1 Class in Symfony2
http://stackoverflow.com/questions/18831030/use-oauth-1-class-in-symfony2

要するに、 オートロードのお作法に従って1クラス1ファイル に作り直すという内容です。

回答者が親切にも対応済みのファイルをGitHub公開してくださっていますが、私は、すべて修正を終えてからGitHubリポジトリに気が付きました。しっかり見ることが大切です。。。

app以下に設置すると、app以下の名前空間配下になってしまいます。 そのため、/path/to/laravelProject/lib/Oauth以下にファイルを設置し、composer.jsonを修正して名前空間を別に定義しました。

1"psr-4": {
2    "App\\": "app/",
3    "OAuth\\": "lib/OAuth"
4}

composer updateし、phpコードからuseすることで、めでたくOAuthが利用できるようになりました。

1use OAuth\OAuthConsumer;
2use OAuth\OAuthRequest;
3use OAuth\OAuthSignatureMethodHMACSHA1;
4use OAuth\OAuthUtil;
5

cURL

おまけ。

OpenSocialのサンプルコードでHTTP_RequestではなくcURLを利用する機会も多くありますので導入手順を記載します。 cURLはかーると読みます。

laravelにcURLを導入するのはたったの3ステップです。 GitHubで公開されているphp-curlを利用します。

php-curl
https://github.com/anlutro/php-curl

php-curlのドキュメント通りに、導入を進めます。

  • 1.composer.json composer.jsonを修正してphp-curlを追記します。
1"require": {
2    "laravel/framework": "5.0.*",
3    "anlutro/curl": "1.4.*"
4},
  • 2.update composet updateしてcomposer dumpautoloadします。

  • 3.config 3config/app.phpにエイリアスを登録します。
    エイリアスのみで、service providerへの追記は不要です。

1'cURL' => 'anlutro\cURL\Laravel\cURL'
2

これでPHPコードから\cURL::で、cURLを呼び出すことができます。


PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

竹澤 有貴,栗生 和明,新原 雅司,大村 創太郎
出版社:ソシム  発売日:2018-09-26

Amazonで詳細を見る

PHPフレームワーク Laravel入門

掌田津耶乃
出版社:秀和システム  発売日:2017-09-16

Amazonで詳細を見る

初めてのPHP

David Sklar
出版社:オライリージャパン  発売日:2017-03-18

Amazonで詳細を見る