[超級簡單]講解如何用PHP實現LINE Pay API!

  • 在 PHP 中實現 LINE Pay API 之前我應該??做哪些準備?
  • 如何在 PHP 中實現 LINE Pay API?

目錄

  1. [前提] 環境
  2. 使用 PHP 實現 LINE Pay API 的準備工作
  3. 使用 PHP 實現 LINE Pay API
  4. 概括? ?

[前提] 環境

這次我們將使用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那就沒問題了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82912.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82912.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82912.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos7.x下,使用寶塔進行主從復制的原理和實踐

操作原理&#xff1a; 一、主庫配置 1.修改 MySQL 配置文件 # 編輯主庫配置文件&#xff08;路徑根據實際系統可能不同&#xff09; vim /etc/my.cnf # 添加以下配置 [mysqld] server-id 1 # 唯一 ID&#xff0c;主庫設置為 1 log-bin mysql-bin …

從零實現基于Transformer的英譯漢任務

1. model.py&#xff08;用的是上一篇文章的代碼&#xff1a;從0搭建Transformer-CSDN博客&#xff09; import torch import torch.nn as nn import mathclass PositionalEncoding(nn.Module):def __init__ (self, d_model, dropout, max_len5000):super(PositionalEncoding,…

c#建筑行業財務流水賬系統軟件可上傳記賬憑證財務管理系統簽核功能

# financial_建筑行業 建筑行業財務流水賬系統軟件可上傳記賬憑證財務管理系統簽核功能 # 開發背景 軟件是給岳陽客戶定制開發一款建筑行業流水賬財務軟件。提供工程簽證單、施工日志、人員出勤表等信息記錄。 # 財務管理系統功能描述 1.可以自行設置記賬科目&#xff0c;做憑…

MySQL 8.0 OCP 1Z0-908 題目解析(2)

題目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…

XA協議和Tcc

基于 XA 協議的兩階段提交 (2PC)。這是一種分布式事務協議&#xff0c;旨在保證在多個參與者&#xff08;通常是不同的數據庫或資源管理器&#xff09;共同參與的事務中&#xff0c;所有參與者要么都提交事務&#xff0c;要么都回滾事務&#xff0c;從而維護數據的一致性。 你…

數據分析-圖2-圖像對象設置參數與子圖

from matplotlib import pyplot as mp mp.figure(A figure,facecolorgray) mp.plot([0,1],[1,2]) mp.figure(B figure,facecolorlightgray) mp.plot([1,2],[2,1]) #如果figure中標題已創建&#xff0c;則不會新建窗口&#xff0c; #而是將舊窗口設置為當前窗口 mp.figure(A fig…

跳轉語句:break、continue、goto -《Go語言實戰指南》

在控制流程中&#xff0c;我們有時需要跳出當前循環或跳過當前步驟&#xff0c;甚至直接跳轉到指定位置。Go 提供了三種基本跳轉語句&#xff1a; ? break&#xff1a;跳出當前 for、switch 或 select。? continue&#xff1a;跳過本輪循環&#xff0c;進入下一輪。? goto&a…

Linux中find命令用法核心要點提煉

大家好&#xff0c;歡迎來到程序視點&#xff01;我是你們的老朋友.小二&#xff01; 以下是針對Linux中find命令用法的核心要點提煉&#xff1a; 基礎語法結構 find [路徑] [選項] [操作]路徑&#xff1a;查找目錄&#xff08;.表當前目錄&#xff0c;/表根目錄&#xff09;…

MQTT協議詳解:物聯網通信的輕量級解決方案

MQTT協議詳解&#xff1a;物聯網通信的輕量級解決方案 引言 在物聯網(IoT)快速發展的今天&#xff0c;設備間高效可靠的通信變得至關重要。MQTT(Message Queuing Telemetry Transport)作為一種輕量級的發布/訂閱協議&#xff0c;已成為物聯網通信的首選解決方案。本文將深入探…

list基礎用法

list基礎用法 1.list的訪問就不能用下標[]了,用迭代器2.emplace_back()幾乎是與push_back()用法一致&#xff0c;但也有差別3.insert(),erase()的用法4.reverse()5.排序6.合并7.unique()&#xff08;去重&#xff09;8.splice剪切再粘貼 1.list的訪問就不能用下標[]了,用迭代器…

2025年第十六屆藍橋杯大賽軟件賽C/C++大學B組題解

第十六屆藍橋杯大賽軟件賽C/C大學B組題解 試題A: 移動距離 問題描述 小明初始在二維平面的原點&#xff0c;他想前往坐標(233,666)。在移動過程中&#xff0c;他只能采用以下兩種移動方式&#xff0c;并且這兩種移動方式可以交替、不限次數地使用&#xff1a; 水平向右移動…

BGP實驗練習2

需求&#xff1a; 1.AS1存在兩個環回&#xff0c;一個地址為192.168.1.0/24&#xff0c;該地址不能再任何協議中宣告 AS3存在兩個環回&#xff0c;該地址不能再任何協議中宣告 AS1還有一個環回地址為10.1.1.0/24&#xff0c;AS3另一個環回地址是11.1.1.0/24 最終要求這兩…

【溫濕度物聯網】記錄1:寄存器配置

一&#xff0c;及哦地址 基地址base的定義&#xff1a; ↓ 定義完是這個&#xff1a; GPIOA的地址就是以上的代表 2寄存器&#xff1a; 通過bsrr來改變odr寄存器&#xff0c;左移16位就是把0-15位的給移到高位的保留區&#xff0c;這樣就歸零了 3&#xff0c;項目寄存器實操…

MCP項目實例 - client sever交互

1. 項目概述 項目目標 構建一個本地智能輿論分析系統。 利用自然語言處理和多工具協作&#xff0c;實現用戶查詢意圖的自動理解。 進行新聞檢索、情緒分析、結構化輸出和郵件推送。 系統流程 用戶查詢&#xff1a;用戶輸入查詢請求。 提取關鍵詞&#xff1a;從用戶查詢中…

運維體系架構規劃

運維體系架構規劃是一個系統性工程&#xff0c;旨在構建高效、穩定、安全的運維體系&#xff0c;保障業務系統的持續運行。下面從規劃目標、核心模塊、實施步驟等方面進行詳細闡述&#xff1a; 一、規劃目標 高可用性&#xff1a;確保業務系統 724 小時不間斷運行&#xff0c…

zst-2001 上午題-歷年真題 計算機網絡(16個內容)

網絡設備 計算機網絡 - 第1題 ac 計算機網絡 - 第2題 d 計算機網絡 - 第3題 集線器不能隔離廣播域和沖突域&#xff0c;所以集線器就1個廣播域和沖突域 交換機就是那么的炫&#xff0c;可以隔離沖突域&#xff0c;有4給沖突域&#xff0c;但不能隔離廣播域&#xf…

Python之with語句

文章目錄 Python中的with語句詳解一、基本語法二、工作原理三、文件操作中的with語句1. 基本用法2. 同時打開多個文件 四、with語句的優勢五、自定義上下文管理器1. 基于類的實現2. 使用contextlib模塊 六、常見應用場景七、注意事項 Python中的with語句詳解 with語句是Python…

我的五周年創作紀念日

五年前的今天&#xff0c;我在CSDN發布了第一篇《基于VS2015的MFC學習筆記&#xff08;常用按鈕button&#xff09;》&#xff0c;文末那句"歡迎交流"的忐忑留言&#xff0c;開啟了這段充滿驚喜的技術旅程。恍然發覺那些敲過的代碼早已成長為參天大樹。 收獲 獲得了…

Realtek 8126驅動分析第四篇——multi queue相關

Realtek 8126是 5G 網卡&#xff0c;因為和 8125 較為接近&#xff0c;第四篇從這里開始也無不可。本篇主要是講 multi queue 相關&#xff0c;其他的一些內容在之前就已經提過&#xff0c;不加贅述。 1 初始化 1.1 rtl8126_init_one 從第一篇我們可以知道每個 PCI 驅動都注…

使用PHP對接日本股票市場數據

本文將介紹如何通過StockTV提供的API接口&#xff0c;使用PHP語言來獲取并處理日本股票市場的數據。我們將以查詢公司信息、查看漲跌排行榜和實時接收數據為例&#xff0c;展示具體的操作流程。 準備工作 首先&#xff0c;請確保您已經從StockTV獲得了API密鑰&#xff0c;并且…