Day04 永丰金API 基础流程 -- HashID

一样先上图
https://ithelp.ithome.com.tw/upload/images/20210910/20118647LfV6MflG4y.png
今天我们要处理的是Sign,在文件中或在看到产出规则,可以看到Hash为永丰金提供,
Nonce我们已经透过api取得,因此接下来我们要处理HashID的部份。

https://ithelp.ithome.com.tw/upload/images/20210910/201186475cO10Xa7bO.png

5.4.2. Hash ID 计算Hash ID 是透过位元运算(XOR)将四组 Hash 计算产出的,
将 A1/A2 以 XOR 运算所得的字串,再与 B1/B2 以 XOR 运算出来的字串,
二个相加後将英文转换为大写,为长度为 32 的字串(例: 17D8E6558DC60E702A6B57E1B9B7060D。

$hash = [
    'A1' => '4D9709D699CA40EE',
    'A2' => '5A4FEF83140C4E9E',
    'B1' => 'BC74301945134CB4',
    'B2' => '961F67F8FCA44AB9'
];
//取得 Hash ID 计算方法
function getHashID($hash){
    $Byte_A1 = strToHexBytes($hash["A1"]);
    $Byte_A2 = strToHexBytes($hash["A2"]);
    $Byte_B1 = strToHexBytes($hash["B1"]);
    $Byte_B2 = strToHexBytes($hash["B2"]);
    
    $XOR1 = setXOR($Byte_A1, $Byte_A2);
    //echo hexBytesToString($XOR1)   17D8E6558DC60E70
    $XOR2 = setXOR($Byte_B1, $Byte_B2);
    //echo hexBytesToString($XOR1)   2A6B57E1B9B7060D
    $result = hexBytesToString($XOR1).hexBytesToString($XOR2);

    return $result;
}

其中strToHexBytes、setXOR、hexBytesToString会於范例档中看到,
这边个人认为学习成本很高...,如果不看code直接看文件要产出有一定难度,
须先了解xor运算的一些规范,请参考
https://www.php.net/manual/en/language.operators.bitwise.php

这边讲一下大概流程,先对将hash(a1,a2,b1,b2)转16位元,
然後按造文件流程在进行xor运算,最後在转回字串进行组合,
最後就会取得最後的HashID,不过文件中是先将字串相加在转英文大写,
但范例code里面是先转英文大写在相加,虽然结果是一样,
但有些人可能会觉得很奇怪,这边提醒一下有该情况。

这边可能会有些人觉得难以理解,个人建议这种金融加密的部份,本来规则就很复杂,
通常都是直接透过金流端提供的范例以及类sdk工具包来处理,来确保安全性,
因此我们只要了结流程跟会使用即可。


整个基础流程到HashID终於快一半了,接下来我们会透过前几天的内容组合出api
所需要的内容,将前几天的东西串起来得感觉还是不错的。


<<:  Day 10:新手杀,谁来教我离开 vim 阿~~

>>:  [13th-铁人赛]Day 5:Modern CSS 超详细新手攻略 - Selector (一)

[iT铁人赛Day7]JAVA阵列(上篇)

好,今天来讲阵列,其实阵列很长一段时间都困扰着我 直到我自己重新看过一遍,才稍微解惑一些 那接下来就...

【day3】和牛涮-和牛三吃

和牛涮最近很常出现在朋友的ig画面中 前阵子找时间到忠孝店品嚐 在价位方面 考量炙烧和牛寿司有数量限...

DAY7 第一周回顾

第一个礼拜我们经历了动机前言跟介面与prototype的设计,那该来看看我这次的专案的各项设计吧! ...

[重构倒数第16天] - 选择套件给我好好选啊!

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...

【Day 16】Function 函式(续)

前言 函式用於结构化程序,将需要重复用到的功能独立出来,透过函式的呼叫,传入资料与回传处理後的资料。...