Line-Pay API V3 – PHP 範例一

這次簡單的分享並記錄一下Line-pay API V3版本的介接,主要是最近自己有碰到所以就單純的紀錄一下,那基本上API的詳細資訊都可以透過line官方提供的文件來參考,這邊就不多說每個API與文件上的相關敘述,主要是說明一下簡單的如何申請測試帳號與用php 做API介接的實例。

步驟一(申請測試環境sandbox):

A.透過line的申請網頁來申請一組帳號,之後便會寄一組帳密到您的信箱。

步驟二(API介接):

A.Line-PAY的V3 API比較複雜的地方就是在Header的簽張(Signature),那我們後面都是用POST來實作API,所以這邊只介紹POST的簽張如何組成,而這邊用PHP來實作。

KeyData typeRequiredDescription
Content-TypeStringYapplication/json
X-LINE-ChannelIdStringY金流整合資訊 – Channel ID
X-LINE-Authorization-NonceStringYUUID or timestamp(時間戳)
X-LINE-AuthorizationStringYHMAC Base64 簽章

HMAC Base64 簽章可以藉由官網看到是由下列方式組成:

Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URI + RequestBody + nonce)))

關於ChannelSecret可以在剛剛申請好的sandbox帳密,登入後可以藉由下方的圖示,點擊後即可以看到你的ChannelSecret。

B.首先實作第一個request API : (/v3/payments/request),此API是用來向LINE PAY請求付款,並透過此API來設定交易資訊與付款方式,若請求成功就會收到交易的序號,並可以再進行付款與退款。

request header 透過上面的介紹會組成如下:

$line_url = 'https://sandbox-api-pay.line.me';//line api
$channel_ID = 'xxxxxxxxxx';//your line sandbox ID
$channel_serect = 'xxxxxxxxxxxxxxxxxxxx';//your line sandbox serect
$R_URI = '/v3/payments/request';//Request API URI
$nonce = gen_uuid();//PHP uuid v4

function gen_uuid()
{
    return sprintf(
        '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0xffff)
    );
}

$Signature_data = $channel_serect . $R_URI . $r_body . $nonce;
$Signature = base64_encode(hash_hmac('sha256', $Signature_data, $channel_serect,true));

$_header = array(
    'Content-Type: application/json',
    'X-LINE-ChannelId: ' . $channel_ID,
    'X-LINE-Authorization-Nonce: ' . $nonce,
    'X-LINE-Authorization: ' . $Signature
);

request Body 的內容如下:

$r_body = json_encode(array(
    "amount" => 1,
    "currency" => "TWD",
    "orderId" => "testorderID",
    "packages" => array(array(
        "id" => "1",
        "amount" => 1,
        "products" => array(array(
            "id" => "test001",
            "name" => "testgoods",
            "quantity" => 1,
            "price" => 1
        ))
    )),
    "redirectUrls" => array(
        'confirmUrl' => 'https://yourweb.com/index.php',
        'cancelUrl' => 'https://yourweb.com/index.php'
    )
));

C.然後就是透過PHP的Curl來把你做好的訂單資訊跟Line-Pay做請求串接,大至上為下方的樣子。

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $line_url . $R_URI);
curl_setopt($curl, CURLOPT_HTTPHEADER, $_header);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $r_body);
curl_close($curl);

D.成功後會得到的response,並透過裡面得到的路徑把網站導過去即可,可以導到網站或是直接透過deep link來開啟line app。

{"returnCode":"0000",
"returnMessage":"Success.",
"info":{
"paymentUrl":{
"web":"https://sandbox-web-pay.line.me/web/payment/wait?transactionReserveId=XXXXXXXXXXXXXXXXXXX",
"app":"linesandbox://pay/payment/XXXXXXXXXXXXXXXXXXX"},
"transactionId":XXXXXXXXXXXXXXXXXXX,
"paymentAccessToken":"XXXXXXXXXXXXXXXXXXX"}}

E.透過掃描Qrcode或是開啟LineApp後,會看到到下面的畫面,並點擊付款。

那到這邊基本上建立訂單的Request API即是完成了,Line pay API的官方文件有更多的欄位就不多介紹,在官網的文件都有詳細說明,像是Options下面有Pay type的設定,可以設定一般付款或是自動付款,接下來會在第二篇的範例,介紹一下Confirm API來完成完整的付款流程。

Previous post

Loading 簡單載入動畫(html+css+jquery)

Next post

閱讀興趣與閱讀分享

2 Replies to “Line-Pay API V3 – PHP 範例一”

您好,
最近剛好試著在做LINEPAY API的串接,是不是方便提供完整的程式碼給我,謝謝~~

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Name *