LINE Pay自動決済を試してみる #LINE_API

はじめに

こんにちは、中村です。

LINE Payには、決済が必要なタイミングでユーザーによる追加承認を行わずに直接サービス提供者サーバーとLINE Payサーバー間で決済が可能となる自動決済機能が用意されています。今回は、自動決済の仕組みを公式アカウントを使いながらご紹介していきます。

LINE Pay自動決済を試してみる

今回の公式アカウント上での想定シナリオはこちらです。実際には5の後に会員限定のコンテンツの送信等を行ったりするイメージです。

  1. ユーザーが公式アカウントへメッセージを送信
  2. 公式アカウントがユーザーへ決済用リンクを送信
  3. LINE Payで決済(自動決済用の自動決済キーを発行)
  4. ユーザーが公式アカウントへ決済完了メッセージを送信
  5. 公式アカウントがユーザーへ決済済みのメッセージの送信

インフラ

上記のシナリオのため公式アカウント用のWebhook決済要求を承認した後に遷移する加盟店のURLLINE Payユーザーが決済を取り消した場合に遷移するURLの3つを用意します。自動決済はローカルから実行可能なので今回は作成しません。構成図の通り、API Gateway・Lambda・DynamoDBを利用します。

黄色い線は、サービス事業者サーバー側からユーザーへメッセージ送信を示しています。送信には、@line/bot-sdkを利用しています。また構築はこちらの記事を参考にしてください。

飲み物注文ボットサンプル with LINE Pay を作ってみた #LINE_API

ソースコード

公開しているコードは、Typescriptを使って開発しています。そのためLambdaにデプロイするためにはコンパイルが必要です。
先述の通り、公式アカウントはテキストメッセージのみを受け付けます。

githubに簡単なソースコードを公開していますのでこちらをご利用ください。

公式アカウント用Webhook

function/botのソースをLambdaにデプロイします。 またデプロイにあたり、下記の情報が必要です。

  • 公式アカウント channelAccessToken(function/bot/index.ts L7)
  • 公式アカウント channelSecret(function/bot/index.ts L13)
  • DynamoDB TableName(function/bot/index.ts L78)
  • LINE Pay決済承認後遷移URL(function/bot/index.ts L112)
  • LINE Payキャンセル後遷移URL(function/bot/index.ts L114)
  • LINE Pay channelId(function/bot/index.ts L128)
  • LINE Pay channelSecret(function/bot/index.ts L9)

LINE Pay決済承認後遷移先Webhook

function/confirmのソースをLambdaにデプロイします。 またデプロイにあたり、下記の情報が必要です。

  • 公式アカウント channelAccessToken(function/confirm/index.ts L7)
  • DynamoDB TableName(function/confirm/index.ts L26)
  • LINE Pay channelId(function/confirm/index.ts L65)
  • LINE Pay channelSecret(function/confirm/index.ts L9)

LINE Payキャンセル後遷移先Webhook

function/cancelのソースをLambdaにデプロイします。 またデプロイにあたり、下記の情報が必要です。

  • 公式アカウント channelAccessToken(function/cancel/index.ts L3)

LINE Pay自動決済プログラム

実行にあたり、下記の情報が必要です。
コメントアウトしていますが、自動決済キー無効化の関数も用意してあります。

  • LINE Pay channelId(function/regkey/index.ts L6)
  • LINE Pay channelSecret(function/regkey/index.ts L7)

テスト

まずは、公式アカウントでLINE Payの決済を行います。決済承認直前に、次回以降の支払い時にパスワード入力が不要になり、自動的に決済される旨のメッセージが表示されています。

DynamoDBにLINEのuserIdと自動決済キーが保存されていますので、これらを使い自動決済プログラムをローカル実行します。function/regkeyでプログラムを実行します。

$ node index.js

プログラム内では、商品名をRegkeyを使って決済したことがわかるように変更しています。LINE Payから決済されていることが確認できます。

まとめ

自動決済は1度ユーザーに承認をしてもらうことで、次回以降の決済承認をパスできることができます。これにより例えばウォークスルー決済でLINE Payを利用することが可能となります。