【WordPress】WooCommerceで困ったこと

WooCommerceで悩んだお話

最近は誰でもECサイトを運用することができて様々なサイトがあふれかえっています。

専用のASPを使うのが手っ取り早いのですが、カスタマイズが難しい+手数料が厳しいということもあってWordPressで頑張る方も多いと思います。

WordPressでECサイト制作の代表的なプラグインが「WooCommerce」です。

WooCommerce
オンラインストアを数日で公開し、長期的な成長を続けるために必要なものがすべて揃っています。 はじめての販売から数百万ドルの収益まで、Woo はあなたと共にあります。

日本語のドキュメントが少ないと感じるのですが世界的に使われているようです。

数年前にWooCommerceでECサイトを作成した人が退職してしまったということで保守を頼まれたのですがバグだらけでなかなか大変でした。

スポンサーリンク

決済のバグ

決済種別は銀行振込、代引き、クレジットカードの3つでした。

クレジットカードはGMO PGと契約しており下記のプラグインで連携されていました。

GMO PG 決済 for WooCommerce | 職人工房 | WooCommerce 機能拡張プラグイン販売
利用可能決済 クレジット決済(3Dセキュア & 定期購入対応) コンビニ決済 キャリア決済 楽天ペイ決済 Pay-easy決済 ネット銀聯決済 多通貨決済定期購入(アップデートサポート付)の説明導入サポートはこちらから注意:御社のサイトにて定期購入決済(クレジット決済)を利用されるま場合は別途定期購入プラグインが必要で...

初回購入時に入力されたカード情報がGMOに登録されてユーザIDと紐づけされます。

サイト側ではカード情報を全ては持っておらずカードNoをGMOに送信します。

ここで問題が。。。

カード決済エラーになる事象が頻繁に発生しました。

プラグインのアップデート等が影響していそうな感じですが調べてみると下記のような状態になっていました。

ユーザAさん
GMO側
カードNo1 カード下4桁0001 VISA
カードNo2 カード下4桁0002 JCB

サイト側
カードNo1 カード下4桁0002 JCB

GMO側で保持している0001のカードは解約されているため決済エラーが発生していました。

さらに調べてみるとユーザ側でカードの登録・削除ができるためサイト側で保持するカードNoにズレが発生しているようでした。

本来であれば下記のようになるべき。

サイト側
カードNo1 カード下4桁0001 VISA
カードNo2 カード下4桁0002 JCB
No2をGMOに送信

しかしカード情報を削除することができるため、No1を消したあとに新規登録すると同じNo1で登録されてしまうため不可思議な状況になってしまいました。

GMO側でNo1を削除することは可能なんですがNo2をNo1にすることはできないそうで。。。

このままでは永遠に決済できないのでプラグインをいじることにしました。

下記ファイルですがバージョン違いがあるかもです。

plugins/wc4jp-gmo-pg/includes/gateways/gmopg/class-wc-gateway-addon-gmopg-cc.php

ソース166行目ぐらい

$send_data['SeqMode'] = 1;
$send_data['Method'] = 1;
foreach($card_list['CardSeq'] as $key => $value){
	if ($value === end($card_list['CardSeq'])) {
		$end_card_seq = $value;
	}
	if($card_list['DefaultFlag'][$key] == 1)$send_data['CardSeq'] = $value;
}
if(empty($send_data['CardSeq']) && isset($end_card_seq)){
	$send_data['CardSeq'] = $end_card_seq;
}
//下記追加
if($user_id==1){
	$send_data['CardSeq'] = 2;
}

非常に不細工&力技ですがこれでなんとかなりそうでした。

果たしてこの仕様が修正される日はくるのでしょうか。。。

コメント

タイトルとURLをコピーしました