こんにちは、takaです。
GMOの決済処理をLaravelで実装しようとしていました。
ローカル環境では動いていたのですが、テスト環境ではなぜか動かなかったので色々触ってみて解決できたので、備忘録として記載していきます。
動作環境
Laravelのバージョンを確認します。
$ php artisan -V
Laravel Framework 6.20.15
appフォルダ下にLibraryフォルダを作成し、Gmo関連のファイルをぶち込んでいます。
名前空間は例えばこんな感じ。
namespace App\Library\Gmo\Client\Input;
ローカルでは、クレジットカードの登録やら、決済処理が動きましたが、テスト環境のサーバーでは動かない状況です。
まず環境変数を確認
今回の原因ではありませんでしたが、環境変数が入力されているか確認しましょう。
.envファイルの以下の項目ですね。
GMO_SHOP_ID=
GMO_SHOP_PASS=
GMO_SITE_ID=
GMO_SITE_PASS=
GMO_GET_TOKEN_URL=
GMO_NO_INITIAL=
auto-loadの実行
フロントで関数を確認すると以下のエラーは出ました。
Class 'App\Library\Gmo\Client\Input\SaveMemberInput' not found
classあるんだけどなと思いつつ、色々調べて解決策がわかりました。
テストサーバーにssh接続し以下を実行します。
$ composer dump-autoload
これを行うことで名前空間を再認識させることができます。
これで解決する方もいるかもしれませんが、私の場合は「composer dump-autoload」実行時にエラーがでていました。
Class App\Library\Gmo\Client\Common\ConnectUrlMap located in ./app/Library/gmo/client/Common/ConnectUrlMap.php does not comply with psr-4 autoloading standard. Skipping.
これは、名前空間とフォルダ名が一致していないのが原因で発生します。
今回の例では、
名前空間は先頭が大文字でしたが、
namespace App\Library\Gmo\Client\Input;
フォルダは小文字になっていました。
app/library/gmo/client/input
なのでフォルダ名を変更します。
library -> Library
gmo -> Gmo
client -> Client
input -> Input
※appフォルダは小文字のままでOK
そして、「composer dump-autoload」を実行できました。
参考記事 : Laravelで名前空間を指定してオートロードされなかったら見る場所。
コード内のファイルパス変更
「composer dump-autoload」実行できフロントで確認すると、また別のエラーが起きていました。
parse_ini_file(/home/my/project/pass/app/Library/gmo/conf/log.properties): failed to open stream: No such file or directory
見てみると、コード内にファイルパスを記載している箇所があったので修正します。
修正前
$prop_path = app_path().”/Library/gmo/conf/connector.properties.honban”;
修正後
$prop_path = app_path().”/Library/Gmo/Conf/connector.properties.honban”;
これで解決です!!
まとめ
以上、外部モジュールの名前空間を読み込む方法でした。
誰かの手助けになれば幸いです。