iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0

昨天我們利用service把計算sign的邏輯串接起來,今天繼續來試試看,要如何取得永豐Api的response,並且在C#解析並還原加密的原始訊息吧!

先讓我們來看看「建立訂單」的基本流程:
https://ithelp.ithome.com.tw/upload/images/20210925/20131205K1BmAhuYlr.png
永豐API有提供 1.ATM 2.信用卡 3.信用卡+3D驗證
這邊附圖先以信用卡交易流程為主

原始文件有提示實作方法:

Message字串 以16進制2位數字轉換成 Byte ,再以 AES CBC 方式解密 。

https://ithelp.ithome.com.tw/upload/images/20210925/20131205THgyWjfeRR.png

今日工事,就是要來解密Message,以取得還原訊息
這個步驟很重要!!!

產生WebAPIMessage
            BaseRequestModel req = new BaseRequestModel()
            {
                Version = "1.0.0",
                ShopNo = shopNo,
                APIService = APIService.OrderCreate,
                Nonce = nonce,
                Message = message,
                //利用Request物件, AESKey及Nonce組成Sign值
                Sign = SignService.GetSign(nonce, request)
            };
            try
            {
                //_logger.LogWarning(string.Format("呼叫商業收付API Order/{0} , Request:{1}", req.APIService, QPayCommon.SerializeToJson(req)));

                //呼叫商業收付Web API
                var result = await _qPayRepository.CreateApiAsync("Order", req);

                //_logger.LogInformation(string.Format("呼叫商業收付API Order/{0} , Response:{1}", req.APIService, QPayCommon.SerializeToJson(result)));
                string decodedMsg = AesCBC_Encrypt.AESDecrypt(result.Message, hashId, result.Nonce);

                _logger.LogInformation("Response Message:" + decodedMsg);

                var innerResult = JsonConvert.DeserializeObject<BaseResponseModel>(decodedMsg);
          
                return innerResult;
            }
            catch (Exception ex)
            {
                //_logger.LogWarning(null, ex);
                throw ex;
            }

上一篇
[Day 10] 測試串接
下一篇
[Day12] 為了擺脫菜鳥C#後端 -到底什麼是Delegate?Func<T, TResult>?
系列文
菜鳥工程師想用C#做出金流微服務是否搞錯了什麼?15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言