レシートに印刷されるQRコードに含まれる取引日時にスペース文字が含まれる

カテゴリ: その他

取引に関連する情報を、QRコード形式でレシートに印刷する機能を使おうとしています。

https://help.smaregi.jp/hc/ja/articles/202518483-%E3%83%AC%E3%82%B7%E3%83%BC%E3%83%88%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B

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

    ご確認いただきありがとうございます。

    今後は管理画面にその旨記載予定です。

    ※現時点では対応時期未定です。