LINE PayのAPIをPHPで実装してみた

line

LINEが「LINE Pay」サービスの提供を開始した。

LINE Payは、銀行やコンビニでチャージできる、プリペイド方式の決済システムだ。詳しくは、LINEの公式ページに説明されている。

もはや日本の若者でLINEを知らない人はいないだろう。だからLINE Payの広がりを見越して、自社サイトに導入してみた。

開発言語はPHPで、その実装サンプルを紹介する。

事前準備

最初にLINEに書類を提出し、審査に通過する必要がある。

審査に通過したら管理画面にログインし、[連動キー管理]から[Channel ID]と[Channel Secret Key]を取得しておく。

linepay_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(ゾゾタウン)も導入しているようだし、これから広がってくれればありがたいサービスだと思う。

Pocket

« »