[超级简单]讲解如何用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那就没问题了。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理6 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1236 天前
matlab画图工具
开发语言·matlab
dustcell.6 天前
haproxy七层代理
java·开发语言·前端