この記事は公開されてから1年以上経過しているため、情報が古い可能性がございます。
ご注意ください。

このWordPress pluginを配布しています

この記事はtomita@atuwebがお届けします。

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を次のように修正します。

{
    "require": {
        "pear/http_request2": "2.2.1"
    },
    "include-path": [
        "vendor/pear/net_url2",
        "vendor/pear/http_request2"
    ]
}

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

$ composer update

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

$ composer dumpautoload

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

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

$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が見つからないとエラーが出てしまいました。

FatalErrorException in TestController.php line 79:
Class ‘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を修正して名前空間を別に定義しました。

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

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

use OAuth\OAuthConsumer;
use OAuth\OAuthRequest;
use OAuth\OAuthSignatureMethodHMACSHA1;
use OAuth\OAuthUtil;

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を修正してphp-curlを追記します。
"require": {
    "laravel/framework": "5.0.*",
    "anlutro/curl": "1.4.*"
},

2.composet updateしてcomposer dumpautoloadします。

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

'cURL' => 'anlutro\cURL\Laravel\cURL'

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



2015年12月17日 タイトルを「ちょっとだけ」変更
2015年11月15日 cURLについて追記

スポンサーリンク
ad_336
ad_336
  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存