LINE PayのAPIをPHPで実装してみた
LINEが「LINE Pay」サービスの提供を開始した。
LINE Payは、銀行やコンビニでチャージできる、プリペイド方式の決済システムだ。詳しくは、LINEの公式ページに説明されている。
もはや日本の若者でLINEを知らない人はいないだろう。だからLINE Payの広がりを見越して、自社サイトに導入してみた。
開発言語はPHPで、その実装サンプルを紹介する。
事前準備
最初にLINEに書類を提出し、審査に通過する必要がある。
審査に通過したら管理画面にログインし、[連動キー管理]から[Channel ID]と[Channel Secret Key]を取得しておく。
他に[決済サーバIP管理]から、自社サーバーのIPアドレスを登録しておく必要があるが、詳しくはLINEPayの導入マニュアルを参照のこと。
実装サンプル
以下、PHPの実装サンプル。必要最低限のオプションを設定し、APIを呼び出している。APIは、[request]と[confirm]の2つだけで、とてもシンプルだ。
ソースコードの[Channel ID]と[Channel Secret Key]を、先ほど取得したキーに書き換えておくこと。あとサンドボックスで試験する場合は、接続URLを適宜修正しておく。
<?php if(!$_GET['transactionId']) { // ----------------------------------- 決済reserve $header = array( 'Content-Type: application/json; charset=UTF-8', 'X-LINE-ChannelId: 1461962654', 'X-LINE-ChannelSecret: ed0e387b51243d52c7cf26a9a215cc26', ); $postData = array( 'productName' => "Test Item", 'amount' => 800, 'currency' => "JPY", 'confirmUrl' => "https://hogehoge.com/linepay.php", 'orderId' => "00001", ); $ch = curl_init("https://api-pay.line.me/v2/payments/request"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSLVERSION, 1); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); $rs = json_decode(curl_exec($ch), true); curl_close($ch); if($rs['returnCode'] == "0000") { header("Location: {$rs['info']['paymentUrl']['web']}"); } else { echo "エラー番号:{$rs['returnCode']}"; } } else { // ----------------------------------- 決済confirm $header = array( 'Content-Type: application/json; charset=UTF-8', 'X-LINE-ChannelId: 1461962654', 'X-LINE-ChannelSecret: ed0e387b51243d52c7cf26a9a215cc26', ); $postData = array( 'amount' => 800, 'currency' => "JPY", ); $ch = curl_init("https://api-pay.line.me/v2/payments/{$_GET['transactionId']}/confirm"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSLVERSION, 1); curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, 'TLSv1'); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData)); $rs = json_decode(curl_exec($ch), true); curl_close($ch); if($rs['returnCode'] == "0000") { echo "決済成功:{$rs['returnCode']}"; } else { echo "エラー番号:{$rs['returnCode']}"; } } ?>
ポイントは、request APIを叩くと、戻りのURLに引数[transactionId]が追加されることだろう。
あとなぜか、商品名を日本語にするとエラーになってしまう…。しかしこれは今後、改善されるのかも知れない。
導入した感想
LINEPayは前払い方式なので、代金回収の手間がなくて良い。手数料についても、導入から2年間(ただし月商100万円以下)なら無料と、太っ腹だ。
銀行振込と違って夜間でも即日決済できるし、振込金額を間違えることもない。お客様を特定するのも簡単だ。
ただ認知度が低いためか、まだまだ利用は少ないのが現実だ。
zozo town(ゾゾタウン)も導入しているようだし、これから広がってくれればありがたいサービスだと思う。