LINE Pay 串接筆記

在正式商店還沒申請下來時,我們可以直接申請 Sandbox 進行串接測試。不過要注意的是 Sandbox 不會保留交易紀錄,所以如果有要接退費 api 會失敗。

一、申請 Sandbox

進入 Sandbox 網頁,點「註冊sandbox帳號」。
側邊會開啟註冊表單,輸入後送出。
信箱會收到 LINE Pay 寄來的測試帳號信件。

二、取得認證訊息

合作商店中心,輸入信箱收到的 sandbox 帳密登入。
點選商家中心右上角的「測試環境」,會開啟一個新視窗。
點選左側選單「管理付款連結→管理連結金鑰」,進入頁面後點「查詢」。
LINE Pay 會寄一封驗證碼信到註冊信箱,輸入信中的驗證碼。
此時可以在下方欄位看到 Channel ID 和 secret。

三、安裝 SDK

我安裝的是 LINE Pay SDK for PHP 這個套件。
用 composer 安裝。
composer require yidas/line-pay-sdk ~3.0.0
搭配 Laravel 範例程式:
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Http\Request;
  7. use yidas\linePay\Client;
  8.  
  9. class LinePayController extends Controller
  10. {
  11. /**
  12. * 請求付款
  13. */
  14. public function checkout()
  15. {
  16. $linePay = new Client([
  17. 'channelId' => 'Channel ID',
  18. 'channelSecret' => 'Channel Secret Key',
  19. 'isSandbox' => config('app.env') == 'production' ? false : true,
  20. ]);
  21.  
  22. $response = $linePay->request([
  23. 'amount' => '訂單金額',
  24. 'currency' => 'TWD',
  25. 'orderId' => '訂單 ID',
  26. 'packages' => [
  27. [
  28. 'id' => '商店 ID',
  29. 'amount' => '商店消費金額',
  30. 'products' => [
  31. [
  32. 'name' => '商品名稱',
  33. 'quantity' => '商品數量',
  34. 'price' => '商品金額',
  35. ],
  36. ],
  37. ],
  38. ],
  39. 'redirectUrls' => [
  40. 'confirmUrl' => '付款授權頁面',
  41. 'cancelUrl' => '付款取消頁面',
  42. ],
  43. ]);
  44. if ($response->isSuccessful()) {
  45. // 付款請求成功
  46. return redirect()->away($response->getPaymentUrl());
  47. } else {
  48. // 付款請求失敗,記錄錯誤訊息
  49. logger('付款失敗:(' . $response['returnCode'] . ') ' . $response['returnMessage'] . '。');
  50. }
  51. }
  52.  
  53. /**
  54. * 付款授權頁面
  55. */
  56. public function confirm(Request $request)
  57. {
  58. // 已付款,更新訂單為已付款
  59.  
  60. return redirect()->route('orders.show');
  61. }
  62.  
  63. /**
  64. * 付款取消頁面
  65. */
  66. public function cancel(Request $request)
  67. {
  68. // 取消付款
  69.  
  70. return Inertia::render('Order/Cancel', [
  71. 'message' => '付款取消。',
  72. 'url' => route('orders.index'),
  73. ]);
  74. }
  75. }

留言