The file write wasn't permitted, so per the original instructions I'll return the complete HTML directly. Here is the single self-contained document: ```html
POS バージョン 11.5 以降、Shopify 管理画面で任意の割引コードからスキャン可能な QR コードを生成できる。POS スタッフがレジで読み取っても、顧客がオンラインストアのセッションで使っても適用される。
既存・新規どの割引コードでも、Shopify Admin から QR コードを書き出せる。店頭 POP・チラシ・レシート・SNS など印刷/画面どちらにも載せられる。
レジ担当が読み取れば店頭チェックアウトに割引が乗り、顧客が自分でスキャンすればオンラインストアのカートに割引が乗る。同じ QR が両チャネルで効く。
Shopify が使う割引 URL は次の固定フォーマット。{shop} と {CODE} を差し込むだけの素直な形だ。
{CODE} の埋め込み方。単純なコードはそのまま、特殊文字を含むコードは「二重」に URL エンコードされる。この非対称が事故りやすいポイント(→ セクション 4)。英数字だけのコードは変換不要。そのまま /discount/SUMMER20 になる。
記事の例 : 割引コード SAVE 10% は、最終的な QR URL では SAVE%252010%2525 になる。
| 段階 | 空白 「 」 | パーセント 「%」 | 文字列 |
|---|---|---|---|
| 元のコード | (空白) |
% |
SAVE 10% |
| 1回目のエンコード | %20 |
%25 |
SAVE%2010%25 |
| 2回目のエンコード (%→%25 をもう一度) |
%2520 |
%2525 |
SAVE%252010%2525 |
% 自身が再び %25 に化ける。だから %20 → %2520、%25 → %2525 となる。記事に明記された SAVE%252010%2525 はこの二段エンコードの結果と一致する。記事「What this means for discount apps」より : No changes are required。既存の割引アプリはそのまま動く。
アプリが割引コードを生成するなら、そのコードに対し「ストアの割引 URL を符号化した QR」を発行できるようになった、という位置づけ。
https://{shop}.myshopify.com/discount/{CODE} と、特殊文字の二重エンコードを Shopify と同じに揃えること。https://{shop}.myshopify.com/discount/{CODE}。ここに割引コードを差し込むだけ。QR にはこの URL が符号化される。
空白や % 等を含むコードは2回 URL エンコードされる。SAVE 10% → SAVE%252010%2525。実装では encode を二段で適用する。
英数字のみの SUMMER20 は変換不要でそのまま入る。エンコード処理を一律で書いても結果が変わらないよう、両ケースを必ずテストする。
同じ QR を POS スタッフが読んでも顧客がオンラインで読んでも適用される。チャネルごとに別 QR を作る必要は無い。
この機能は POS バージョン 11.5 以降が前提。アプリで割引 QR を共有リンクとして配るなら、Shopify と同一のエンコードを自前で実装して一致させる必要がある。QR 生成用の API / Webhook 仕様はこの記事に 記載なし = 別途確認が必要。
https://{shop}.myshopify.com/discount/{CODE} で組み立て、特殊文字は二重 URL エンコードして Shopify と完全一致させる。…/discount/{CODE} という割引 URL で、特殊文字を含むコードは二重 URL エンコード。