예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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));
        }
예제 #4
0
        /// <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);
        }
예제 #6
0
 /// <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));
 }
예제 #7
0
        /// <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;
 }
예제 #9
0
        /// <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;
        }
예제 #10
0
        /// <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;
        }
예제 #11
0
        /// <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);
        }