最近Opencartをイジっていた。
公式で認められた統合会計ツール Square Payment で会計を行おうとした時、エラーが発生した。
“Confirm Order” を押下するとリクエストが飛ぶのだが返り値は 500、 UI上の警告メッセージも空。
ユーザー側では原因を特定できないため、サーバーのログを確認するとウェブサーバーに以下の記載が:
2019/02/06 15:53:49 [error] 29847#29847: *5250 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined function Squareup\bcmul() in /srv/opencart/html/system/library/squareup/api.php:788
Stack trace:
#0 /srv/opencart/html/catalog/controller/extension/payment/squareup.php(201): Squareup\Api->lowestDenomination(2730, 'JPY')
#1 /srv/opencart/storage/modification/system/engine/action.php(79): ControllerExtensionPaymentSquareup->checkout()
#2 /srv/opencart/html/catalog/controller/startup/router.php(25): Action->execute(Object(Registry))
#3 /srv/opencart/storage/modification/system/engine/action.php(79): ControllerStartupRouter->index()
#4 /srv/opencart/html/system/engine/router.php(67): Action->execute(Object(Registry))
#5 /srv/opencart/html/system/engine/router.php(56): Router->execute(Object(Action))
#6 /srv/opencart/html/system/framework.php(165): Router->dispatch(Object(Action), Object(Action))
#7 /srv/opencart/html/vqmod/vqcache/vq2-system_startup.php(104): require_once('/srv/opencart/h...')
#8 /srv/opencart/html/index.php(23): start('catalog" while reading response header from upstream, client: <IP>, server: store.puliyo.com, request: "POST /index.php?route=extension/payment/squareup/checkout HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:", host: "store.puliyo.com", referrer: "https://store.puliyo.com/index.php?route=checkout/checkout"
2019/02/06 15:57:21 [error] 29848#29848: *5285 FastCGI sent in stderr: "PHP message: PHP Fatal error: Uncaught Error: Call to undefined function Squareup\bcmul() in /srv/opencart/html/system/library/squareup/api.php:788
結構わかりやすいエラーでよかった。 ぐぐると一発でわかった。
原因は使用しているPHPに bcmul() が不足しているからである。
bcmul() は bcmath ライブラリの一部。
以下コマンドを実行しライブラリをインストールしてしまえばホイ解決。
sudo apt install php-bcmath
それでもダメな人はサーバー再起動とキャッシュ削除してみて。