[超级简单]讲解如何用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',  // 按照特定格式生成UUID
        mt_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那就没问题了。

相关推荐
牛油果子哥q4 分钟前
C++模板万字深度精讲:函数/类模板特化、全特化与偏特化、SFINAE机制、类型萃取、模板元编程入门、工程实战落地
开发语言·c++·面试
神仙别闹18 分钟前
基于C++ 实现 L 系统分形树
开发语言·c++
君顾119 分钟前
AI智能商城实战指南:从架构设计到部署落地的完整技术方案
java·开发语言·多商户
脉动数据行情125 分钟前
Python WebSocket 国内商品期货|螺纹钢 & 铁矿石实时行情监听
开发语言·python·websocket
AI行业应用研究34 分钟前
2026年主流报名工具测评报告:眨眼猫会务智能体报名小程序为何成为多场景首选?
java·开发语言·小程序
额额额对了37 分钟前
Linux C 多线程编程基础:从内存模型到生命周期管理
linux·开发语言·算法
尼古拉斯-托尔斯泰-赵四1 小时前
Go 语言,你需要了解的一些规则
开发语言·后端·golang
程序猿_极客1 小时前
【免费】分享一套优质的基于Php+Mysql的电子购物网站的设计与实现,校园小卖部系统
数据库·mysql·php·购物商城系统
郝学胜-神的一滴1 小时前
C++20 高级编程 004:从初始化、内存到const系列关键字
开发语言·算法·编程·软件构建·c++20