ランドリー室をキャッシュレス対応できないか検討してみた Stripeアプリ開発(超プロトタイプ)
運営している賃貸物件「ハイドレンジア箱根」には共用のランドリー室があります。入居者向けに使えるように大家さんである著者の妻(建築家)がフルリノベーションの際に作ったものです。全自動洗濯機が2台、ガス式の乾燥機が2台という構成で運用しています。
タダで使ってもらうには電気代もかかるわけで、いっそコインランドリーにしようということでコインボックスを設置して集金しています。
しかし、今どき100円玉をじゃらじゃらもっていくというのもスマートじゃないですよね。これをDIYでキャッシュレス決済システムにできないものか。ちょっとした技術検討をしてみました。
現状のランドリー室の仕組み
全自動洗濯機は一般的な家庭用洗濯機です。これを設置してコンセントにつなぐと誰でも使えてしまいます。入居者から支払いを受けた上で使っていただきたかったので、コインボックスを設置しました。
コインボックスは100V電源をオフ・オン+タイマー制御をするものなので、コインを入れないと電源が入らない、という接続になっています。
これをコインではなく、キャッシュレスで切り替えしたいのです。
システム開発に使える技術
最近は、カード決済を代行してくれるサービスが色々登場しています。特に、API(Application Programming Interface)を提供することにより、ユーザ(この場合、決済代行の依頼したい事業者)が自分のサービスに手軽にカード決済機能を統合できるようになっています。こういうのをPaaS (Platform as a Service)とでも呼ぶのでしょうか。
多くの場合、自分のWebサイトとPaaS業者のAPIを組み合わせてECサイトを作るなどのユースケースに使用できます。そうすると、サイトのユーザ(この場合、一般消費者)は、自サイト上の商品をクレジットカードなどで支払うことができるわけです。
PaaS型のサービスを使えば、大家さんである事業者が、カード決済のしくみを自分のサービス(この場合、コインランドリー)の支払に利用できるはずです。
カード代行サービスと言っても、APIではなく支払画面等のアプリケーションも含めて提供する業者もあります。こういう形式をSaaS(サーズ、Software as a Service)と呼んだりするのでしょう。著者テック大家さんとしては、コインランドリーの支払アプリ(Webアプリ)を作りたいので、APIを提供してくれるPaaSタイプのサービスを選びたいのです。
APIはプログラマーが使うものです。PaaS業者は、彼らのサービスをより多くのプログラマー(開発者)に使ってもらいたいわけです。そのため、開発のためのドキュメントや開発コードサンプルなどを充実させて公開しているのが一般的です。
たとえば、以下のようなサービスがあります。
Stripe
1つ目はStripeです。世界中のカード決済に対応しています。
APIやSDKなど開発者向けの情報も充実しています。とにかく開発者向けの情報が手厚いイメージです。ドキュメントページで表示されるテストコードやAPIの戻り値などが本物に近い形で表示されるのでかなり便利。
また、テストモードを使うと、疑似カード番号を使って、自分で開発したWebアプリの決済を実際に動作させることができます。結果は、ダッシュボード上で決済一覧として手軽に確認できます。
Square
2つめはSquareです。こちらは、決済端末がいくつか用意されていて、スマホやタブレットと組み合わせたものもあります。対面でのキャッシュレス決済を手軽に導入できます。
開発者向けの情報も充実しています。
Stripeを使って検証
ここでは、さくっと手軽に動作確認の意味を込めまして、Stripeを使っていきます。
仕様としては、以下のようなユースケースで考えます。
まず、コインランドリーの使用者がQRコードなどを使って、大家さんが用意するWebサイト(Webアプリ)にアクセスします。
Webアプリが表示されると、ブラウザ上にはコインランドリーの支払のための決済画面(Stripeのダイアログボックス)が提示されます。
ここでカード番号を入力して200円の支払いが行えます(ここは、洗濯機を使う時間に応じた支払になる)。
決済をすると、サーバー経由でランドリーが動作します。
200円の支払で洗濯機が30分動作して停止します。
ちなみに、ランドリーが動作する部分はIoTのスマートプラグ(Switchbot)を使ってみました。Switchbotに関しては別記事で取り上げるつもりです。お楽しみに!
以上のようなユースケースを実現するためのWebアプリは、ReactというJavaScript/TypeScriptのフレームワークを使って開発します。
Stripeでアプリを開発するためにはWebアプリのバックエンドも必要になります。ここでは、Firebase FunctionsやRealtime DatabaseというこれまたPaaS型のサービスを使うことにしました。なぜなら、料金が従量制でちょっと試すだけなら支払いが0円になるからです。サーバーを借りるコストが0で実現できるというわけですね。
決済が実行された結果は、Stripeの管理画面(ダッシュボード)上の支払一覧で確認できるというわけです。
このシステムは、最終的にはコインボックスの支払額に応じて15分とか30分といった一定時間のみ通電されて、時間が来たら電源が切れるというしくみにします。通電のオフ/オンを擬似的に検証する意味でSwtichbotのスマートプラグを使ってみました。
SwitchbotはAPIが公開されており、インターネット経由でリモートからオフ・オンが可能です。これを使ってプログラミングします。つまり、Stripeの決済が終わったらクラウド(Google Cloud Tasksを使用)でタイマーを開始すると同時にスマートプラグをオンにするプログラムです。このコードは、タイマーが終了するときにSwitchbot API経由でスマートプラグをオフにします。
タイマー動作中は新たな支払ができないようにWebアプリで「使用中」の状態を提示します。そのために、Realtime Database上でコインタイマーの状態管理をするわけです。
ちなみに、Firebase のRealtime Databaseを使った理由は、ArduinoのFrameworkがサポートしているからです。最終的にはSwtichbotで実現した部分はArduinoのWiFiモジュールとGPIOなどを使って現状のコインボックスにつなぐことを考えています。
ソースコードはGithubで公開しています(以下のリンク参照↓)
プロトタイプの動作
プロトタイプはFirebaseにホスティングしていますが、最初に以下の様が画面が表示されます。
ここでカード情報(テストサイトなのでダミーのカード番号)を入力します。
すると、Switchbotのスマートプラグに接続した電球が光る、というイメージです。
実際に決済が行われたどうかは、Stripeのダッシュボードで確認することができます。以下のような画面です。
終わりに
コインボックスで運用しているランドリールームを、キャッシュレスにするためのシステム開発をしてみました。一応、プロトタイプとしては動作するものが完成したわけです。
ただ、ユーザが毎回カード番号を入力するという手間が必要なのと、はやり手軽に交通系などタッチ式の支払を検討したいです。そのため、このプロトは動作確認のみで留めておくことにしました。
また、今回のプロトタイプではSwitchbotで100V電源の制御を行いました。一方で、まだ現金(コイン)で支払いたいケースもあるかもしれません。そう考えると今あるシステムに、ある程度ハードウェアの開発と統合も必要に感じます。
もう少し検討したいところです。
ディスカッション
コメント一覧
まだ、コメントがありません