WooCommerceのStripe決済で「Net Revenue From Stripe」と「Stripe Fee」に小数点が混入する問題
Eコマースというのが「電子商取引」なら、WooCommerceはなんだろう?
「イー・コマース」の次に来るのが、「ウー・コマース」だとしたら…?
WooCommerceとは
WooCommerceはWordPressというサイト構築システム・コンテンツ管理システムでECサイトを構築するためのプラグインです。
非常によくできていて、世界中で多数のウェブショップがWooCommerceを採用しています。
詳細は以下リンク先サイトをご覧ください。
あるいはこちら。
日本語対応も進み、今後さらに導入サイトが拡大するものと思われます。だってEC-CUBEよりもカスタマイズの柔軟性が段違い…という話はさておき。
ウェブショップにおいて重要なのは、クレジットカード決済。
WooCommerceではPaypal(ペイパル)という、日本ではそれほど普及していない(世界的に見ればとんでもなく広く普及している)決済サービスの他に、Stripe(ストライプ)を公式にサポートしています。
Stripe決済導入
Stripe決済導入について、詳しくは下記リンク先サイトをご覧ください。
本記事では、2017年2月現在、Stripeの導入に当たってちょっと気になる点を指摘しておきます。
注文の詳細ページで表示されるカスタムフィールド内の「Net Revenue From Stripe」と「Stripe Fee」に小数点が導入されて困っちゃう問題。
多通貨対応
日本で用いるのはもちろん日本円(JPY)なわけですが、米ドル(USD)やその他、Stripeは多通貨決済に対応しています。
しかしこれ、実際には対応しきれていないというか、多通貨決済には非常に厄介な点があります。
小数点です。
日本円でも一応は銭(せん)という、円の百分の一で表される単位がありますが、事実上決済は円の単位に丸められて実行されます。
しかし、ドルにとってのセントなど一般的な決済に利用される単位として、小数点の利用が必須である場合もあります。
で、もちろんStripeはドルを基軸通貨として設計されているため、小数点の扱いをデフォルトとしているようです。
過去に指摘された問題点
この問題に関して、以下のリンク先サイトで指摘されています。
一応、2017年2月現在はStriperという外部プラグインを利用することなく、WooCommerce本体とほぼほぼシームレスに組み込まれた決済プラグインとして導入できます。
またリンク先サイトで指摘された100倍価格の請求問題はありません。
現在残っている問題点
で、2017年2月現在何が問題になるかというと、先ほども書いた通り、注文の詳細ページで表示されるカスタムフィールド内の「Net Revenue From Stripe」と「Stripe Fee」に小数点が導入されて困っちゃうんですね。
まぁ、この値を参照するときに100倍するというプログラムにすれば問題ありませんし、デノミネーションを実行する政治力があればそちらに賭けるというのも解決策としてはあり得ますが、今のところちょっとした気持ち悪さ、落ち着きのなさを感じてしまうのも事実なわけでありまして。
問題の所在
問題は以下のファイルのプログラム。
/wp-content/plugins/woocommerce-gateway-stripe/woocommerce-gateway-stripe.php
328, 329行目(一部抜粋)
number_format( $result->balance_transaction->fee / 100, 2, '.', '' )
number_format( $result->balance_transaction->net / 100, 2, '.', '' )
PHPの関数で小数点を丸めるフォーマットを指定している部分。ここで「** / 100」という記載により価格を百分の一とし、小数点を'.'(ピリオド)で表示しつつ、小数点以下2桁に丸めるという働きをしています。
Stripe側のアカウント設定で日本円(JPY)とした場合、正価の値(100倍しない値)が返ってくるよう“改善”されたようですが、その先のコードで100倍を前提とした処理がなされてしまっているというお話かと。
というわけで、これを日本仕様とするためには当該記載を書き換える必要があるようです。
number_format関数を使う場合、使わなくする場合、あるいはその他の部分を改良する場合と様々に対処法は考えられるわけですが、残念ながらそのすべてをテストする訳にもいかず、また修正が及ぼす影響についても逐一テストできるわけではないため、ここでは修正例をお示しできません。
ご自身の責任の範囲で、修正を試みるか無視するか対応をご判断下さい。