iT邦幫忙

2021 iThome 鐵人賽

DAY 6
0
永豐金融APIs

掌握訂單與線上金流的剪不斷理還亂系列 第 6

Day06 永豐金API 基礎流程 -- 訊息內文

還是一樣先上圖

https://ithelp.ithome.com.tw/upload/images/20210912/20118647kbH47kBGUu.png

終於來到第六點了!!!可喜可賀
看一下文件中產生Message的方法

https://ithelp.ithome.com.tw/upload/images/20210912/20118647kOXXbbSEGk.png

5.5.2. IV 計算
產出 IV 值前必須要先行取得 Nonce 後才能產生,計算方式是將取得的 Nonce 值
作 SHA256 加密後,再將英文轉換成大寫取字串右邊 16 碼長度
(例:CB6FA68E42B655AB)

//取得 IV 計算方法
function getIV($nonce){
    $data = SHA256($nonce);
    return substr($data, strlen($data) - 16, 16);
}

//SHA256 後字串轉大寫
function SHA256($data){
    return strtoupper(hash('sha256', $data));
}

取得IV的方法比較單純基本上就照著文件的流程下去編寫即可,
來看主角Message的取得

https://ithelp.ithome.com.tw/upload/images/20210912/201186474PmFooO3QD.png

來人先上範例

//$data 為api所需參數的json格式
//$key 就是我們先前提到的hashId
//AES CBC 加密
function EncryptAesCBC($data, $key, $iv) {
    $result = '';
    $padding = 16 - (strlen($data) % 16);
    $data .= str_repeat(chr($padding), $padding);
    $encrypt = openssl_encrypt($data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);

    $result = strtoupper(bin2hex($encrypt));

    return $result;
}

這邊如果有google怎麼做aes cbc加密,
應該都會看到openssl_encrypt函式的一些使用方式,
但除非你有經驗,或者偷看答案,不然根本找不到下面code的線索

$padding = 16 - (strlen($data) % 16);
$data .= str_repeat(chr($padding), $padding);

因此串接第三方有個秘訣叫做倒果為因,先去看範例或者前人提供的解答,
然後再去了解整個過程,這也是為什麼很多第三方需要提供範例的原因,
這部份先前取得hashId的部份也是同樣的原理。

回到程式,透過範例我們可以取得加密過後的訊息內文,
加上前幾天的Nonce、HashID、Sign這樣我們要發送api所需的參數都已經到齊了,
明天我們整理一下之後就準備call api啦!


上一篇
Day05 永豐金API 基礎流程 -- Sign
下一篇
Day07 永豐金API 基礎流程 -- 整理
系列文
掌握訂單與線上金流的剪不斷理還亂30

1 則留言

0
sunrise_yang
iT邦新手 5 級 ‧ 2021-09-13 13:34:43

很詳細的說明,應該會好上手,謝謝

firecold iT邦新手 1 級 ‧ 2021-09-14 10:53:22 檢舉

希望對你有幫助/images/emoticon/emoticon08.gif

我要留言

立即登入留言