ARCHITECTURE
全体構成
注文は必ず先にデータベースへ保存し、メール・スプレッドシート・PDFは後続の処理として分けて動かします。外部サービスが止まっても、注文は失われません。
WordPress本体(正本を持つ)非同期処理データベース
ORDER FLOW
注文が保存されるまでと、その後
店舗が「発注を確定」した瞬間
リンクのトークンを検証ハッシュ照合。休止・無効ならここで拒否。ブラウザから店舗IDは受け取りません。
入力をサーバー側で検証商品・箱数・発送日(公開中・締切前・上限内)・備考(HTML除去)を再チェック。
1つのDBトランザクションで保存冪等性キーが同じなら既存の発注書番号を返し、二重登録しません。店舗・商品・宛先・期限はスナップショットで保存。
完了画面を返す「保存成功」を先に表示。メール到達は別枠で、あとから更新します。
保存のあと(非同期)
メールをキューへ登録宛先ごとに1通ずつ。送信失敗でも注文は成立のまま。指数バックオフで自動再試行。
スプレッドシートへupsert注文番号をキーに反映。再送しても重複行は作りません。
Webhookで到達状態を更新署名を検証し、発注書番号・メッセージID・宛先を照合して delivered/bounce を記録。
滞留・失敗を監視未達・確認中30分超・連携滞留・Cron停止を、管理画面と通知で知らせます。
MODULES
仕様書の機能と、実装のしかた
| 機能(仕様書) | WordPressでの実装 | ポイント |
|---|---|---|
| 店舗専用リンク(第3章) | rewrite ruleで /order/s/{token} を専用テンプレートに割り当て | トークンはハッシュ保存・128bit以上・noindex・サイトマップ除外 |
| 注文・明細・請求データ(第10章) | 専用テーブルを dbDelta で作成(投稿タイプは使わない) | 集計・整合性・トランザクションを確実にするため |
| 管理画面(第14章) | WordPress管理メニュー配下に7画面。権限(capability)を分けて付与 | 2要素認証・ログイン試行制限・操作ログ |
| 期限計算(第4・7章) | 営業日カレンダー+契約書設定値(日数・時刻・営業日の定義)を管理値として保持 | 注文時点の期限を保存し、設定変更の影響を受けない |
| メール・到達管理(第6章) | 配信サービスのAPI+Webhook受信用のRESTエンドポイント | WordPress標準のwp_mailは到達イベントを返せないため使いません |
| スプレッドシート連携(第11章) | Google Sheets API(サービスアカウント)。認証情報は公開領域の外へ | WordPress DBが正本、Sheetsは閲覧・集計用の複製 |
| PDF(第9章) | mPDF+日本語フォント埋め込み(請求書・明細・領収証) | 文字が選択・検索できる、印刷向けのPDF |
| Excel/CSV(第11章) | PhpSpreadsheetで、注文一覧・発送一覧・請求明細・メール結果を出力 | Sheetsが止まっていても、手動出力で運用を継続 |
SAKURA
さくらインターネットで確認したいこと
サーバー環境
- 対応するPHP・MySQLのバージョン
- サーバーCronの利用可否(疑似Cronより優先)
- 外向き通信(メールAPI・Google API)の可否
- SSL・WAF・ディスク容量
メール配信の基盤
- さくらの標準メールでは「到達(delivered)」の通知を受け取れません
- Webhook対応の配信サービス(Amazon SES/SendGrid/Mailgun 等)が別途必要です
- アカウント・送信ドメイン認証(SPF・DKIM)の準備が必要です
バックアップ・更新
- DB・ファイルの日次バックアップ(同一サーバー外にも保管)
- 本体・PHP・プラグイン更新は、検証環境で確認してから本番へ
- 更新失敗時に、直前の状態へ戻せる手順書
PHASES
進め方(案)
止まってはいけない「受注〜発送」を先に固め、その上に連携と請求を載せる順番です。各フェーズの終わりに、受入試験の該当項目を一緒に確認します。
フェーズ1 受注と発送の土台
店舗専用リンク/店舗発注(入力・確認・完了)/商品・発送日・期限計算/発注書一覧・詳細・取消/発送状態の更新。受入 A-01〜A-03・A-08・A-09・A-11〜A-13
フェーズ2 メール到達とデータ連携
宛先別メール・到達状況・再送/Webhook/Sheets連携/Excel・CSV出力/監視・障害時の動作。受入 A-04〜A-07
フェーズ3 請求・帳票・運用
月次請求の集計と検証/請求書・明細・領収証PDF/バックアップ・復元/運用手順書・障害対応手順書。受入 A-10・A-14 + 公開判定
納品物(仕様書 16.1 に沿って)
- WordPress実装(店舗発注・管理画面・DB・権限・帳票・連携・メール到達管理)
- 環境設定書(さくら/PHP・MySQL/Cron/SSL/WAF/秘密情報)
- 運用手順書(店舗・商品・発送日/取消/発送更新/再送/請求/領収証)
- 障害対応手順書(メール・Sheets・DB・Cron・バックアップ異常の切り分けと復旧)
- 試験結果(受入A-01〜A-14/復元試験/ブラウザー確認)
※ 費用・スケジュールは、下記の確認事項が固まってからご提案します。
QUESTIONS
実装前に、確認させてください
仕様書の「確定待ち」を中心に、動かし始める前にそろえておきたい点です。
1
変更・取消期限の正式な文言日数・「営業日」の定義(土日祝のみか、独自の休業日を含むか)・締切時刻・期限超過後の扱い(契約書の文言)。※ 仕様書 確定待ち No.1〜3
2
メール配信基盤到達(delivered/bounce)を受け取れる配信サービスの選定と、アカウント・費用の負担、送信元ドメイン。
3
請求書・領収証の様式既存の請求書のひな形、適格請求書の登録番号、振込先、端数処理(切捨て等)、消費税(軽減税率8%)の扱い。
4
発送済みの後の訂正返品・値引・請求訂正の運用(誰が、どの手順で)。デモは「訂正を申請する」で権限者へ回付する形にしています。
5
さくらインターネットの契約プランPHP・MySQLのバージョン、Cronの利用可否、外向き通信、WAF、メール送信の制限。
6
店舗・宛先・単価の初期データ30店舗の店舗名・住所・宛先メールアドレス一覧、商品の単価・税率、初期の発送日と受付上限。
7
管理者の役割と人数受注/発送管理/請求/システム管理の担当を分けるか。権限の切り分けと2要素認証の対象。
8
スプレッドシートの使い方誰が閲覧するか、集計用のシート構成、共有先。Excel運用を優先する場合は、出力機能を厚くします。
9
バックアップの保持期間日次30世代+月次12世代 など。別保管先の指定。※ 仕様書 確定待ち No.7
10
公開日と保守運用開始の希望日。公開後の保守(更新・障害対応)の範囲と連絡方法。