今天介紹如何解豐收款 Order API 回傳的 Message 字串。

圖 9-1
圖 9-1: 測試建立訂單

接續 Day 8 使用 Order API 建立測試訂單後,返回結果是加密後的字串,如上圖所示。Message 欄位是加密過的 16 進位字串。而今天的任務就是解密下圖中的 Message 欄位,還原成我們可以讀取的資料。

圖 9-2
圖 9-2: API 回應字串

解密流程實作

為了易於閱讀,先將 JSON 字串排版一下。

圖 9-3
圖 9-3: JSON 字串排版

還記得 Day 7 時,我們對 Message 內文加密時使用了 openssl_encrypt 函式進行加密,再把加密後的 binary string 使用了 bin2hex 函式轉成了 16 進制字串。

解密的流程正好反過來。

圖 9-4
圖 9-4: PHP SDK - aesDecrypt 方法

第 11 行 先用 hex2bin 將 16 進制字串轉成 binary string。
第 12 行 再使用 openssl_decrypt 函式來解密還原。但使用的 IV 參數的值是採用 API 回覆給我們的這組 Nonce,而不是自取的。

圖 9-5
圖 9-5: 測試程式

解密的流程可以參考以上測試程式碼。

測試結果

圖 9-6
圖 9-6: 測試解密 Message

Message 內文欄位

圖 9-7
*圖 9-7: 還原成功的內文結構

解密後可得到的欄位資訊在文件第 35 頁提及,比較重要的欄位如下:

圖 9-8
圖 9-8: 欄位說明

根據前段傳遞的 PayType 的不同,得到的欄位資訊也不同。

  • PayType 的值為 A 則為虛擬帳號付款,會得到如上圖 ATMParam 段落的欄位。
  • PayType 的值為 C 則為信用卡付款,會得到如上圖 CardParam 段落的欄位。

信用卡付款

圖 9-9
圖 9-9: 文件第 7 頁

如果進行的是信用卡付款,API 的回應會有 CardPayURL 這個欄位,提供給商店網站進行轉址到信用卡付款頁面,讓使用者進行付款。付款完再跳轉回商店網站。

ATM 虛擬帳號付款

圖 9-10
圖 9-10: 文件第 6 頁

如果進行的是虛擬帳號付款,API 的回應會有 AtmPayNoWebAtmURLOtpURL 這三個欄位,提供給商店網站顯示在結帳完成頁面 (Thank-you page) 或訂單資訊頁面,讓使用者能透過 ATM 轉帳進行結帳。

流程總結

為了交易的安全,保障消費者的權益,加解密的流程難免會較一般 API 串接複雜許多,希望這幾天的文章可以幫助讀者們在串接上的工作效率能有所提升喔!

永豐金流的 Order API 還有其它功能,在接下來 1 或 2 天分享完後,就會發佈 PHP SDK 並且正式進入 WooCommerce 電商串接實戰了,歡迎鎖定收看!

最後修改日期: 2023-07-09

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。