- 在 PHP 中實現 LINE Pay API 之前我應該??做哪些準備?
- 如何在 PHP 中實現 LINE Pay API?
目錄
- [前提] 環境
- 使用 PHP 實現 LINE Pay API 的準備工作
- 使用 PHP 實現 LINE Pay API
- 概括? ?
[前提] 環境
這次我們將使用SandBox環境(測試環境) 。
我們將實現RequestAPI的執行。
使用 PHP 實現 LINE Pay API 的準備工作
我們將解釋在 PHP 中實現 LINE Pay API 所需的前期準備工作。
步
沙盒生成

創建一個沙盒。
一旦生成,一封電子郵件將發送到您的電子郵件地址。
登錄LINE Pay我的頁面

點擊并登錄。
您的登錄詳細信息將在您之前收到的電子郵件中提供。
鏈接密鑰管理

登錄后,進入“ 支付鏈接管理”?“ 鏈接密鑰管理”,輸入您的密碼(您登錄時使用的密碼),點擊 確認。
鏈接密鑰管理參考

記下 頻道 ID和 頻道密鑰。
PHP 實現 INE ay API
在 PHP 中實現 LINE Pay API。
<?php
// 設置頻道ID,用于標識API請求的來源
$channel_id = '您的頻道ID';// 設置秘密鑰匙,用于生成請求簽名
$channel_secret_key = '你的秘密鑰匙';// 設置Line支付API的URL(沙盒環境),用于測試
$line_url = 'https://sandbox-api-pay.line.me';
// 如果是生產環境,可以將URL更改為實際生產環境的URL
// $line_url = 'https://api-pay.line.me';// 定義請求路徑,這里指的是創建支付請求的API路徑
$path = '/v3/payments/request';// 生成一個唯一的UUID,用于標識當前請求
$nonce = gen_uuid();// 構造請求體,這里用JSON格式定義了支付請求的相關信息
$body = json_encode(array("amount" => 1, // 支付金額,單位是日元(JPY)"currency" => "JPY", // 貨幣類型,這里使用的是日元"orderId" => "testOrderId", // 訂單ID,用于標識當前的支付訂單"packages" => array(array( // 商品包信息"id" => "testPackages1", // 商品包的ID'name' => "packages", // 商品包的名稱"amount" => 1, // 商品包的金額"products" => array(array( // 商品詳細信息"id" => "testProducts1", // 商品ID"name" => "products", // 商品名稱"quantity" => 1, // 商品數量"price" => 1 // 商品單價)))),"redirectUrls" => array( // 用戶支付完成后需要重定向的URL"confirmUrl" => "https://myPage", // 支付完成后的確認URL"cancelUrl" => "https://myPage" // 支付取消后的URL)
));// 輸出請求體內容,便于調試時查看生成的JSON數據
echo $body;// 生成請求簽名,使用HMAC SHA-256算法
// 簽名的生成規則:簽名 = base64(HMAC-SHA256(頻道密鑰 + 請求路徑 + 請求體 + UUID, 頻道密鑰))
$signature = base64_encode(hash_hmac('sha256', $channel_secret_key . $path . $body . $nonce, $channel_secret_key, true));// 設置HTTP請求頭,包含必要的認證信息
$header = array('Content-Type:' . 'application/json', // 請求內容類型,設置為JSON格式'X-LINE-ChannelId:' . $channel_id, // 頻道ID,用于標識發送請求的渠道'X-LINE-Authorization-Nonce:' . $nonce, // 使用的UUID,防止重放攻擊'X-LINE-Authorization:' . $signature // 請求簽名,用于驗證請求的合法性
);/************************************************************ 執行API請求***********************************************************/// 初始化cURL會話
$curl = curl_init();// 設置cURL選項
curl_setopt($curl, CURLOPT_URL, $line_url . $path); // 設置請求的URL
curl_setopt($curl, CURLOPT_HTTPHEADER, $header); // 設置請求頭
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 將返回結果以字符串形式輸出
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 禁用SSL驗證(用于開發環境,生產環境請開啟)
curl_setopt($curl, CURLOPT_POST, true); // 設置為POST請求
curl_setopt($curl, CURLOPT_POSTFIELDS, $body); // 設置請求體內容// 執行cURL請求并獲取返回結果
$result = curl_exec($curl);// 關閉cURL會話
curl_close($curl);// 輸出API請求的響應結果
echo $result;// 生成UUID函數,用于創建唯一的標識符
function gen_uuid()
{return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x', // 按照特定格式生成UUIDmt_rand(0, 0xffff), // 生成一個隨機的16位數mt_rand(0, 0xffff),mt_rand(0, 0xffff),mt_rand(0, 0x0fff) | 0x4000, // 確保UUID符合UUIDv4格式mt_rand(0, 0x3fff) | 0x8000,mt_rand(0, 0xffff),mt_rand(0, 0xffff),mt_rand(0, 0xffff));
}
?>
運行上述內容。
{"returnCode": "0000","returnMessage": "Success.","info": {"paymentUrl": {"web": "https://sandbox-web-pay.line.me/web/payment/wait?transactionReserveId=hoge...","app": "linesandbox://pay/payment/hoge..."},"transactionId": 2020122500646238200,"paymentAccessToken": "911163781279"}
}
如果返回如上這樣的JSON那就沒問題了。