レシートに印刷されるQRコードに含まれる取引日時にスペース文字が含まれる
取引に関連する情報を、QRコード形式でレシートに印刷する機能を使おうとしています。
QRコードにはURLとして「置換え文字列」の「transactionDateTime」をパスパラメータとして含む予定です。
この際、transactionDateTimeには「2022-03-31 16:00:43」のような値が与えられます。
この値には、スペースなどのURLセーフでない文字が含まれているようです。
設定画面のヘルプツールチップなどから、QRコードにエンコードされる文字列にはURLも想定されているように読み取れますが、スペースは「%20」 などの安全な形式には変換されないのでしょうか?
現代的なブラウザであれば、URLに安全でない文字列が含まれていた場合は内部的に無害化(スペースなら%20への変換)をするようですが、一部のモバイルブラウザではサポートされていない状況もあるようです。
https://github.com/mozilla-mobile/fenix/issues/3306
モバイルブラウザ側のサポートを待つことも一つの方法かなとも考えられますが、QRコードはモバイル端末から読み取ることが主なユースケースと思われますので、QRコードへの印字時点え適切なURLに変換して頂くのが適切な対処かと考えております。
答え
@kogai
ご申告の通り、スペースはエンコードされたほうがいいかと思いますので、
エンコードできるように対応させていただきます。
対応方法としましては変数に
|urlencode
をつけていただくとエンコードされるような仕組みを想定しています。例)
{transactionDateTime} → 2022-03-31 16:00:43
{transactionDateTime|urlencode} → 2022-03-31%2016%3A00%3A43
尚、対応時期は未定となっておりますので、対応完了しましたらこちらのスレッドでご報告いたします。
ご不便をおかけしますが、ご確認お願いいたします。
@スマレジ 東本 ご回答ありがとうございます!
対応方法としましては変数に
|urlencode
をつけていただくとエンコードされるような仕組みを想定しています。対応頂けるとのこと、ありがとうございます。
よろしくお願い致します。
動作確認をしている中で、追加の情報がありましたのでコメントしておきます。
ある種のQRコードアプリでは、ブラウザ遷移の際にスペースを%20にエンコードせずに扱っているようです。
(前述の通り、このようなQRコードアプリの仕様は間違ったものとは考えておりません)
私共がこのような症状を確認したのは以下のQRコードアプリですが、URLの仕様上他にも「QRコードには安全なURLがエンコードされている」ことが前提となるQRコードアプリは存在していると思われます。
この機能の使われ方を考えるとQRコードアプリによる読み取りは必ず起こるので、現行の仕様ではそもそも取引日時は利用が難しい、という認識に改まっております。
(元々は一部のブラウザでのみ発生し得るという認識でしたので、例外的な状況と捉えて許容範囲としておりました)
ただしQRコードにURL以外のデータをエンコードするのであればこの限りではありません。
@kogai
本件ですが、本日リリースしましたスマレジ・アプリver.4.16.0にて
|urlencode
と指定するとURLがエンコードされるように修正しましたので、ご確認お願いいたします。@スマレジ 東本
機能としては確認できました。
早速のご対応ありがとうございます。
iOS POSアプリにまつわるアップデート告知の配信、ユーザー向けドキュメントの更新やPOS管理画面の店舗の設定画面の表示などは今後順次アナウンス・対応がされていくと理解しています。
@kogai
ご確認いただきありがとうございます。
今後は管理画面にその旨記載予定です。
※現時点では対応時期未定です。