🔖

決済サービス審査を通すための特商法ページを自動生成するPHPライブラリを作った

に公開

はじめに

決済サービスの審査で「特定商取引法に基づく表示ページの記載が不十分です」の回答で落とされた経験はないだろうか。

フリーランスや個人事業主がネットで商品やサービスを売ろうとするとき、必ずぶつかる壁がある。それが特商法ページだ。

  • 「会社概要と何が違うの?」
  • 「何を書けばいいか分からない」
  • 「コピペで作ったら審査が通らなかった」

こういった声をよく聞く。自分自身もその一人だったので、解決するためのPHPライブラリを作ってOSSとして公開した。

https://github.com/369work/tokusho-generator


使い方

Webツールとして(非エンジニア向け)

Composerの知識がなくても、ブラウザ上のフォームから特商法ページを生成できます。

git clone https://github.com/369work/tokusho-generator.git
cd tokusho-generator
composer install
cd web
php -S localhost:8080

ブラウザで http://localhost:8080 を開くとフォームが表示されます。入力して「特商法ページを生成する」を押すとHTMLファイルをダウンロードできます。

PHPライブラリとして(エンジニア向け)

以下はライブラリとして組み込む場合のコード例。


作ったもの

tokusho-generator — 特定商取引法に基づく表示ページを自動生成するPHPライブラリ。

composer require 369work/tokusho-generator

use Tokusho\TokushoGenerator;

$generator = new TokushoGenerator([
    'company_name'      => '山田太郎商店',
    'responsible_name'  => '山田太郎',
    'address'           => '〒150-0001 東京都渋谷区神宮前1-2-3',
    'phone'             => '03-1234-5678',
    'email'             => 'info@example.com',
    'price_description' => '各商品ページに記載の価格(税込)',
    'payment_methods'   => 'クレジットカード(Visa / Mastercard)',
    'payment_timing'    => '購入手続き完了時',
    'shipping_fee'      => '送料無料(デジタル納品)',
    'delivery_timing'   => '決済完了後、即時ダウンロード可能',
    'return_policy'     => '商品の性質上、購入後の返品・返金はお断りしています。',
]);

$generator->validate(); // 記載漏れがあれば例外
echo $generator->toHTML(); // 特商法ページのHTMLを出力

これだけで、デザイン済みの特商法ページHTMLが生成される。


なぜ作ったか

決済サービスの審査は意外と厳しい

決済サービスでビジネスアカウントを作成・審査を通すとき、特商法ページのURLの提出が求められる。そしてページの内容が不十分だと審査が落ちる。

具体的に落ちやすいのは以下のパターンだ:

  • 「販売価格」「送料」「返品ポリシー」などの項目が抜けている
  • 記載はあるが内容が曖昧すぎる(「お問い合わせください」だけなど)
  • 会社概要ページに混在していて、特商法ページとして独立していない

「何を書けばいいか」問題

エンジニアでない個人事業主がコピペや ChatGPT で作ったページには、法的に必要な項目が抜けていることが多い。特に見落とされがちなのが:

  • 動作環境(ソフトウェア・デジタルコンテンツを売る場合)
  • 継続契約に関する事項(サブスク型サービスの場合)
  • 契約不適合責任(品質や欠陥に関する販売者の責任)

これらは特商法施行規則で定められた追加記載事項だが、一般にはあまり知られていない。


機能

1. バリデーション

$errors = $generator->check(); // エラー配列を返す(例外なし)

// または例外を使う
try {
    $generator->validate();
} catch (ValidationException $e) {
    foreach ($e->getErrors() as $field => $errors) {
        echo "[{$field}] " . implode(', ', $errors) . "\n";
    }
}

必須項目が空の場合、フォーマット不備がある場合にエラーを返す。

2. HTML生成

// スタンドアロンHTML(<html>〜</html>全体)
$html = $generator->toHTML();

// 埋め込み用(<main>以下のみ)
$html = $generator->toHTML(['standalone' => false]);

出力されるHTMLはセマンティックマークアップ・アクセシビリティ(WCAG 2.1 AA)・レスポンシブ対応済み。

3. カスタムフィールド

use Tokusho\Field\FieldDefinition;

$generator->addField(new FieldDefinition(
    key: 'license_number',
    label: '古物商許可番号',
    required: true,
    type: 'text',
));

業種に応じて独自の項目を追加できる。


対応している特商法フィールド

キー ラベル 必須
company_name 販売業者名
responsible_name 代表者・責任者の氏名
address 所在地
phone 電話番号
email メールアドレス
price_description 販売価格
payment_methods 支払方法
payment_timing 支払時期
shipping_fee 送料
delivery_timing サービス提供時期
return_policy 返品・キャンセルポリシー
software_requirements 動作環境 任意
subscription_terms 継続契約に関する事項 任意
warranty_policy 契約不適合責任 任意

設計のこだわり

フレームワーク非依存

LaravelでもCakePHPでも素のPHPでも使える。依存はPHP 8.1以上のみ。

WordPressプラグインのコアとして設計

このライブラリをラップする形でWordPressプラグインを開発中。管理画面でウィザード形式の入力UIを提供し、非エンジニアでも使えるようにする予定。

テスト済み

PHPUnitによるテストを tests/ に用意している。バリデーション・HTML生成・XSSエスケープなどをカバー。


今後の予定

  • WordPressプラグイン版の完成・WordPress.orgへ申請中
  • Composerパッケージとしてpackagist.orgに登録
  • 法改正時の通知・自動アップデート対応
  • Pro版(有料)機能の検討

おわりに

「決済サービス審査を通すための特商法ページ」に特化したツールはあまり見当たらなかったので作った。

WordPressプラグイン版が完成したら、エンジニアでない個人事業主にも気軽に使ってもらえるようになる。

GitHubのStarをもらえると開発の励みになります🙏

https://github.com/369work/tokusho-generator


免責事項

このライブラリは特商法ページの作成を補助するツールです。
生成されたページの法的有効性・完全性・決済サービス審査の通過を保証するものではありません。
実際の運用にあたっては、最新の法令および各サービスの規約をご自身でご確認ください。

本ライブラリの使用によって生じたいかなる損害・不利益についても、作者は一切の責任を負いません。

Discussion