LINE PAY APIs版本:
目前LINE PAY APIs使用的版本是v3,跟v2版本的最大差異就是在v3版本的API用戶認證方式!
開始認證方式的內容前讓我們先來了解LINE PAY APIs所提供的環境有哪些吧。
LINE PAY APIs 環境:
Sandbox環境就是提供我們測試用的測試環境,用來模擬LINE Pay App的付款交易!
Production 環境就是所謂的正式環境囉!
那我們這次主題的內容就是使用Sandbox的測試環境來模擬LINE Pay App的付款交易。
APIs 認證方式 (API Authentication):
下面為LINE Pay Payment API的用戶認證(Authentication)方式。 商家通過審核後,在商家中心(https://pay.line.me)可以查詢到認證所需要用到的"Channel ID"和"Channel SecretKey"等資訊。 LINE Pay也提供Sandbox環境,以幫助串接整合測試使用 Sandbox環境所需的Test Channel資訊(id,secretKey)及Production環境所需的實際Channel資訊(id,secretKey)都可以商家中心找到。
Hmac Signature:
• Algorithm(演算法) : HMAC-SHA256
• Key : Channel Secret (LINE Pay商家中心提供"Channel Id"和"Channel SecretKey")
• HTTP Method(提供GET、POST兩種方法,這次的主題將以POST為例)
• GET : Channel Secret + URI + Query String + nonce
• POST : Channel Secret + URI + Request Body + nonce
HTTP Method : GET
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URI + Query String + nonce))) Query String : 不包含 " 問號(?)" 的Query String(例如: Name1=Value1&Name2=Value2...)
HTTP Method : POST
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URI + RequestBody + nonce)))
Hmac 簽章就是透過javax.crypto.Mac類別提供訊息認證碼(Message Authentication Code, MAC)的演算法功能。
MAC提供以密鑰(key)來檢查資料完整性的方法。訊息認證碼(MAC)多用在驗證兩團體(例如系統A與系統B)間的傳輸資料,透過兩團體共享的一把密鑰來檢查。
基於密鑰雜湊演算法的MAC又稱為HMAC。HMAC可以與各種的雜湊算法,例如SHA256或SHA384,與密鑰搭配使用。
範例程式:
這邊的程式碼也是LINE PAY APIs文件裡就有提供的程式碼囉,可以到https://pay.line.me/th/developers/apis/onlineApis?locale=zh_TW
旁邊OverView API Authentication往下滑一點就可以找到範例程式碼囉~
那這邊可以看到HmacUtils.getHmacSha256的方法已經被劃掉了那我們ctrl點進去後可以發現這個方法已經被棄用了。
可以看到1.11後請使用(getInitializedMac),那我們就更新成它建議的寫法吧!
更新後程式碼:
public static String encrypt(final String keys, final String data) {
return toBase64String(HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_SHA_256, keys.getBytes()).doFinal(data.getBytes()));
}
API的用戶認證通過"Channel SecretKey"建立簽章(Signature),對channel和message進行驗證。