LINE Pay APIでオンライン決済を実装する(Go言語,golang)
はじめに
最近はキャッシュレス市場が凄くアツいですよね。ヤフー、メルカリなど大手が続々と参入しています。LINEも平成最後の超Payトク祭として4月はかなり大きいキャンペーンをやっていました。
あまり使われているイメージが無いですが、LINEは決済APIも提供しているんですよね。今回はそのAPIを実装する方法をご紹介します。
LINE PAYについて知る
公式サイトをざっと見てみます。
今回はオンライン決済なので、手数料は3.45%(デジコンは5.5%)かかりそうです。
他のオンライン決済サービスと比較すると手数料は普通な感じでした。
ただ、毎回カード情報を打ち込まなくていい + LINE上ならログインレスで使えるので、LINEの上で決済するようなアプリを作る場合は便利です。例えばLINE BOTとの親和性は高そうです。
LINE PAYのAPIドキュメントを読み込む
どんな言語で実装するにしてもこれだけは避けて通れない道ですね。下のURLから技術連動ガイドをダウンロードして上から下まで全部読みましょう。
https://pay.line.me/jp/developers/documentation/download/tech
(ちなみに私はドキュメントを読んで初めて継続決済があることに気づきました...)
LINE PAYでオンライン決済(一般決済)を実装する
決済の実装については、LINEの方が素晴らしい記事を書いていらっしゃいました。
今回はGo言語に焦点を当てて実装方法を紹介したいと思います。
LINE Pay API SDKを使う準備をする。
サンドボックス環境で試す場合は以下のように宣言します。ちなみに環境変数は direnv を使って管理しています。
package main
import (
"github.com/gotokatsuya/line-pay-sdk-go/linepay"
)
func main() {
pay, err := linepay.New(
os.Getenv("LINE_PAY_CHANNEL_ID"),
os.Getenv("LINE_PAY_CHANNEL_SECRET"),
linepay.WithSandbox(),
)
}
決済を予約する。
決済に必要な情報(商品名、金額、通貨、ユーザー承認後のリダイレクトURL、、注文ID)を入力してAPIを叩きます。
注文IDはユニークであれば何でも良さそうです。このサンプルでは uuid を使って生成しています。
reserveRequest := &linepay.ReserveRequest{
ProductName: "basic demo product",
Amount: 1,
Currency: "JPY",
ConfirmURL: os.Getenv("LINE_PAY_CONFIRM_URL"),
OrderID: uuid.New().String(),
}
reserveResponse, _, err := pay.Reserve(context.Background(), reserveRequest)
決済を完了させる。
予約時に指定した情報(金額、通貨)と発行されたトランザクションIDを指定して、決済は完了となります。
confirmRequest := &linepay.ConfirmRequest{
Amount: reserveRequest.Amount,
Currency: reserveRequest.Currency,
}
_, _, err := pay.Confirm(context.Background(), reserveResponse.Info.TransactionID, confirmRequest)
サンプルコード
決済機能の実装サンプルは、exampleディレクトリに置いてあるのでそちらをご参考ください。継続決済についても需要があればサンプルを書いてみます。
* サンプルでは実装を簡易にするためにセッションで情報を管理していますが、プロダクションではデータベースに保存した方が良いです。
* サンプルではエラーコードのハンドリングをしていないのでご注意ください。
余談:Go言語でSDKを作るときに参考にしているもの
こういったAPIを叩くようなライブラリを作るときは基本的には go-github を参考にしています。
クエリパラメータを組み立てるときは go-querystring が便利です。