
CIH合同会社が開発する暗号資産決済ゲートウェイ「CIHPAY」を、OpenCart 4.1系のECサイトに組み込むための決済プラグインを実装した。本稿はその開発ログである。JPYC(日本円ステーブルコイン)をPolygonネットワーク上で、しかもガス代不要(EIP-3009 transferWithAuthorization)で受け取れるのが特徴だ。
アーキテクチャ:ゲートウェイ本体+カート連携プラグイン
CIHPAYは2層構成になっている。決済処理の本体(ウォレット接続・EIP-3009署名・リレー送金・コールバック)は cih-pay.com/pay/ に1つだけ置く「ゲートウェイ本体」。各ECカート(OpenCart / EC-CUBE / WooCommerce / Welcart)側には、署名付きURLを生成してゲートウェイへリダイレクトし、Webhookで入金を受け取るだけの軽量な「連携プラグイン」を置く。ショップは shops.json の shop_id で引き分けるため、本体は1つのまま、カートが増えても1行追加するだけで対応できる。
決済フローの契約(GET+HMAC)
OpenCartの「注文を確定する」で、プラグインは注文金額を整数JPY(JPYC 1:1)に換算し、次のGETリクエストでゲートウェイの入口へリダイレクトする。
GET https://cih-pay.com/pay/index.php
?shop_id&order_id&amount&return_url&nonce&mode&masscon_address&hmac
HMAC = hash_hmac('sha256',
"shop_id|order_id|amount|return_url|nonce|mode|masscon_address",
shop_secret)
shop_secret(64桁hex)はCIH-Webが発行する共有秘密鍵で、改ざん防止のHMAC-SHA256署名に使う。ゲートウェイ側は署名検証後にセッションを生成し、支払い画面(pay.php)へ進める。
ガスレス送金:EIP-3009 × Polygon
CIHPAYの最大の特徴は、購入者がPOL(Polygonのガス代)を1枚も持っていなくても決済できる点だ。JPYCはEIP-3009(transferWithAuthorization)に対応しており、購入者はウォレットで署名するだけ。実際のオンチェーン送金はリレーサービス(jpyc-relayer)がガス代を肩代わりして実行する。Polygon Mainnet(chain_id 137)上でJPYCコントラクトへ着金する。暗号資産決済の最大のハードルである「ガス代の用意」を消してあるのが実務上の強みである。
OpenCart 4.1プラグインの構造とハマりどころ
拡張コードは cihpay。cihpay.ocmod.zip をInstaller→Paymentsの順で導入する。実装で踏んだ落とし穴を残しておく。
- zipを
upload/で包まない。 OpenCart 4.1のInstallerはupload/を剥がさずextension/cihpay/<そのままのパス>に展開するため、admin/・catalog/・install.jsonをzip直下に置く。 - POSTはhtmlspecialchars済みで渡る。
system/library/request.phpの clean() が ENT_COMPAT のため、JSON貼り付け欄の二重引用符が"になる。save()側でhtml_entity_decode()してからjson_decode()する。 - zipファイル名は
<code>.ocmod.zip。code がそのままextension/<code>/になる。
Webhook:ボディ全体のHMACで冪等受信
決済完了時、ゲートウェイは shops.json の webhook_url(OpenCartでは index.php?route=extension/cihpay/webhook)へJSONをPOSTする。受信側は生リクエストボディの hash_hmac('sha256', body, shop_secret) を X-CIH-Signature ヘッダと照合し、timestampの許容(15分)と冪等性(既にpaidなら200)を担保して注文を入金済みにする。
結果:実機で本番JPYC決済に成功
OpenCart 4.1.0.4の実機で、注文→ウォレット接続→EIP-3009署名→リレー送金→コールバックまで通し、Polygon上で実際のJPYC着金(オンチェーンtx確認済み)まで成功した。現在このOpenCart向けCIHPAY(JPYC)決済プラグインは v1.0.0 として運用可能な段階にある。EC-CUBE向け(CihPay v0.2.1)も同一のゲートウェイ契約で近日リリース予定だ。
キーワード:JPYC, USDC, ステーブルコイン, Polygon, EIP-3009, gasless payment, Web3決済, OpenCart plugin, EC-CUBE, WooCommerce, HMAC-SHA256, transferWithAuthorization