/// <summary> /// Response物件建立MAC並依據規格書轉轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就不產了</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, AL2POS_Domain response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); //return code msgUtility.SetStr(response.AL2POS_RC, rspResult, "ReturnCode"); //承認編號 msgUtility.SetStr(response.AL2POS_SN, rspResult, "CenterSeqNo"); //Answer msgUtility.SetBytes(this.cardFormatMemberId, rspResult, "CardFormatMemberId"); msgUtility.SetStr(this.cardNo, rspResult, "CardNo"); msgUtility.SetStr(this.cardExpireDate1, rspResult, "CardExpireDate1"); msgUtility.SetStr(this.cardExpireDate2, rspResult, "CardExpireDate2"); //交易時間 msgUtility.SetStr(this.transDateTime, rspResult, "TransDateTime"); //是否產生mac if (doMAC) { // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime);//CheckMacContainer.Mac2Manager.GetAuthMac(response.READER_ID, response.AL_TRANSTIME, sha1Result); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data this.SetPadding(msgUtility, rspResult); return(rspResult); }
/// <summary> /// Response物件建立MAC並依據規格書轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就使用來源的mac</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, AL2POS_Domain response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; string rrn = (" ").PadLeft(12); Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.AL2POS_RC, rspResult, "ReturnCode"); msgUtility.SetStr(response.AL2POS_SN, rspResult, "CenterSeqNo"); msgUtility.SetStr(this.amount, rspResult, "Amount"); if (!String.IsNullOrEmpty(response.AL_RRN)) { rrn = response.AL_RRN; } msgUtility.SetStr(rrn, rspResult, "Rrn"); msgUtility.SetStr(this.transDateTime, rspResult, "TransDateTime"); //是否產生mac if (doMAC) { // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime);//CheckMacContainer.Mac2Manager.GetAuthMac(response.READER_ID, response.AL_TRANSTIME, sha1Result); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data this.SetPadding(msgUtility, rspResult); return(rspResult); }
/// <summary> /// Response寫入MAC /// </summary> /// <param name="resMsgUility">Response Parser</param> /// <param name="response">response byte array</param> /// <param name="reader_id">卡機裝置ID(length:16)</param> /// <param name="transTime">交易時間(length:14)</param> protected virtual void SetMAC(IMsgUtility resMsgUility, byte[] response, string reader_id, string transTime) { // fetch sha1 data byte[] hashDataBytes = resMsgUility.GetBytes(response, "HeaderVersion", "Mac"); byte[] sha1Result = CheckMacContainer.HashWorker.ComputeHash(hashDataBytes); string mac = CheckMacContainer.Mac2Manager.GetAuthMac(reader_id, transTime, sha1Result); resMsgUility.SetStr(mac, response, "Mac"); log.Debug(m => m("8.Response mac: {0}", mac)); }
/// <summary> /// Response物件轉換成byte[] /// </summary> /// <param name="msgUtility">Msg Parser Object</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, ALTxlog_Domain response, byte[] request) { log.Debug(m => m("5.轉換後台自動加值TxLog Response物件 => Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.TXLOG_RC, rspResult, "ReturnCode"); //取得資料部分的大小並設定 string sizeStr = CheckMacContainer.StrHelper.LeftPad(msgUtility.GetSize("DataVersion", "EndOfData"), msgUtility.GetTag("DecryptSize").Length, '0'); msgUtility.SetStr(sizeStr, rspResult, "DecryptSize"); msgUtility.SetStr(sizeStr, rspResult, "EncryptSize"); //寫入空白 msgUtility.SetBytes(CheckMacContainer.ByteWorker.Fill(msgUtility.GetTag("DataPadding").Length, 0x20), rspResult, "DataPadding"); //依據定義改變Response大小(因Request資料部分長度與Response資料部分長度不一樣) rspResult = CheckMacContainer.ByteWorker.SubArray(rspResult, 0, msgUtility.GetSize("HeaderVersion", "EndOfData")); log.Debug(m => m("6.轉換後台自動加值TxLog Response物件完畢")); return(rspResult); }
/// <summary> /// Response物件建立MAC並依據規格書轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就使用來源的mac</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, POL_Domain response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.PCHR_RC, rspResult, "ReturnCode"); msgUtility.SetStr(response.PCHR_SN, rspResult, "CenterSeqNo"); msgUtility.SetStr(this.amount, rspResult, "Amount"); msgUtility.SetStr(this.transDateTime, rspResult, "TransDateTime"); //是否產生mac if (doMAC) { // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data this.SetPadding(msgUtility, rspResult); return(rspResult); }
/// <summary> /// Response寫入MAC /// </summary> /// <param name="resMsgUility">Response Msg Parser</param> /// <param name="response">response byte array</param> /// <param name="reader_id">卡機裝置ID(length:16)</param> /// <param name="transTime">交易時間(length:14)</param> /// <returns></returns> protected virtual void SetMAC(IMsgUtility resMsgUility, byte[] response, string reader_id, string transTime) { // fetch sha1 data byte[] hashDataBytes = resMsgUility.GetBytes(response, "HeaderVersion", "Mac"); byte[] sha1Result = CheckMacContainer.HashWorker.ComputeHash(hashDataBytes); string mac = CheckMacContainer.Mac2Manager.GetAuthMac(reader_id, transTime, sha1Result); resMsgUility.SetStr(mac, response, "Mac"); log.Debug(m => m("8.Response mac: {0}", mac)); }
/// <summary> /// Response物件建立MAC並依據規格書轉轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就不產了</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, AL2POS_Domain response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); //return code msgUtility.SetStr(response.AL2POS_RC, rspResult, "ReturnCode"); //承認編號 msgUtility.SetStr(response.AL2POS_SN, rspResult, "CenterSeqNo"); //Answer msgUtility.SetBytes(this.cardFormatMemberId, rspResult, "CardFormatMemberId"); msgUtility.SetStr(this.cardNo, rspResult, "CardNo"); msgUtility.SetStr(this.cardExpireDate1, rspResult, "CardExpireDate1"); msgUtility.SetStr(this.cardExpireDate2, rspResult, "CardExpireDate2"); //交易時間 msgUtility.SetStr(this.transDateTime, rspResult, "TransDateTime"); //是否產生mac if (doMAC) { // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime);//CheckMacContainer.Mac2Manager.GetAuthMac(response.READER_ID, response.AL_TRANSTIME, sha1Result); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data this.SetPadding(msgUtility, rspResult); return rspResult; }
/// <summary> /// Response物件轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, Txlog_Domain response, byte[] request) { log.Debug(m => m("5.轉換後台購貨取消TxLog Response物件 => Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.TXLOG_RC, rspResult, "ReturnCode"); //取得資料部分的大小並設定 string sizeStr = CheckMacContainer.StrHelper.LeftPad(msgUtility.GetSize("DataVersion", "EndOfData"), msgUtility.GetTag("DecryptSize").Length, '0'); msgUtility.SetStr(sizeStr, rspResult, "DecryptSize"); msgUtility.SetStr(sizeStr, rspResult, "EncryptSize"); //寫入空白 msgUtility.SetBytes(CheckMacContainer.ByteWorker.Fill(msgUtility.GetTag("DataPadding").Length, 0x20), rspResult, "DataPadding"); //依據定義改變Response大小(因Request資料部分長度與Response資料部分長度不一樣) rspResult = CheckMacContainer.ByteWorker.SubArray(rspResult, 0, msgUtility.GetSize("HeaderVersion", "EndOfData")); log.Debug(m => m("6.轉換後台購貨取消TxLog Response物件完畢")); return rspResult; }
/// <summary> /// Response物件建立MAC並依據規格書轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就使用來源的mac</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, CTGB_Soc_Request response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response(必定回傳資訊) msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.RETURN_CODE, rspResult, "ReturnCode"); msgUtility.SetStr(response.SN, rspResult, "CenterSeqNo"); msgUtility.SetStr(this.transDateTime, rspResult, "DateTime"); //是否產生mac(request的mac驗證成功就會還一個response,不論後台response正常或異常) if (doMAC) { msgUtility.SetStr(response.MERCHANT_ID, rspResult, "MerchantID"); msgUtility.SetStr(response.STORE_NO, rspResult, "StoreID"); msgUtility.SetStr(response.REG_ID, rspResult, "POSNO"); msgUtility.SetStr(response.POS_SEQNO, rspResult, "PosSeqNo"); msgUtility.SetStr(response.CASHIER_NO, rspResult, "CashierNo"); msgUtility.SetStr(response.READER_ID, rspResult, "TerminalID"); msgUtility.SetStr(response.LOADING_BAL, rspResult, "LoadingBalance"); msgUtility.SetStr(response.LOADING_SEQ, rspResult, "LoadingSequence"); // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data : SPEC length 0 //this.SetPadding(msgUtility, rspResult); return rspResult; }
/// <summary> /// Response物件建立MAC並依據規格書轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就使用來源的mac</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, POL_Domain response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.PCHR_RC, rspResult, "ReturnCode"); msgUtility.SetStr(response.PCHR_SN, rspResult, "CenterSeqNo"); msgUtility.SetStr(this.amount, rspResult, "Amount"); msgUtility.SetStr(this.transDateTime, rspResult, "TransDateTime"); //是否產生mac if (doMAC) { // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data this.SetPadding(msgUtility, rspResult); return rspResult; }
/// <summary> /// Response物件建立MAC並依據規格書轉換成byte[] /// </summary> /// <param name="msgUtility">Response Msg Parser</param> /// <param name="response">後端給的POCO</param> /// <param name="request">Origin Request byte array</param> /// <param name="doMAC">是否產生MAC:驗證失敗就使用來源的mac</param> /// <returns>response byte array</returns> protected virtual byte[] ParseResponse(IMsgUtility msgUtility, CTGB_Soc_Request response, byte[] request, bool doMAC = true) { log.Debug(m => m("7.轉換後台Response物件並建立MAC並轉成Response Byte[]")); byte[] rspResult = new byte[request.Length]; Buffer.BlockCopy(request, 0, rspResult, 0, request.Length);// // modify request to response(必定回傳資訊) msgUtility.SetStr("02", rspResult, "Communicate"); msgUtility.SetStr(response.RETURN_CODE, rspResult, "ReturnCode"); msgUtility.SetStr(response.SN, rspResult, "CenterSeqNo"); msgUtility.SetStr(this.transDateTime, rspResult, "DateTime"); //是否產生mac(request的mac驗證成功就會還一個response,不論後台response正常或異常) if (doMAC) { msgUtility.SetStr(response.MERCHANT_ID, rspResult, "MerchantID"); msgUtility.SetStr(response.STORE_NO, rspResult, "StoreID"); msgUtility.SetStr(response.REG_ID, rspResult, "POSNO"); msgUtility.SetStr(response.POS_SEQNO, rspResult, "PosSeqNo"); msgUtility.SetStr(response.CASHIER_NO, rspResult, "CashierNo"); msgUtility.SetStr(response.READER_ID, rspResult, "TerminalID"); msgUtility.SetStr(response.LOADING_BAL, rspResult, "LoadingBalance"); msgUtility.SetStr(response.LOADING_SEQ, rspResult, "LoadingSequence"); // fetch sha1 data this.SetMAC(msgUtility, rspResult, this.readerId, this.transDateTime); } else { //若Mac驗證失敗,則使用來源mac簡易回傳 msgUtility.SetStr(this.mac, rspResult, "Mac"); } // padding data : SPEC length 0 //this.SetPadding(msgUtility, rspResult); return(rspResult); }