Ejemplo n.º 1
0
 /// <summary>
 /// 比對並轉換Request和Response物件,請求和回應是同一組則out電文字串,不同out null
 /// </summary>
 /// <param name="request">RequestPOCO</param>
 /// <param name="response">ResponsePOCO</param>
 /// <param name="requestString">RequestString</param>
 /// <param name="responseString"></param>
 /// <returns>成功out出response字串/失敗out null</returns>
 private bool ParseResponseString(TOL_Soc_Req request, TOL_Soc_Req response, string requestString, out string responseString)
 {
     //if (request.COM_TYPE == response.COM_TYPE &&
     //    request.POS_SEQNO == response.POS_SEQNO &&
     //    request.STORE_NO == response.STORE_NO)
     if (!String.IsNullOrEmpty(response.SW))
     {
         //依文件規格 iCash2@iBon_Format_20150826(內部使用).xlsx
         //Request部份資料混合Response資料(只改通訊種別,中心端回應碼)
         responseString = Response_Com_Type +                //0~3 //Com_Type : 0642
                          requestString.Substring(4, 40) +   //4~43
                          response.SW;                       //44~49
         return true;
     }
     else
     {
         responseString = null;
         return false;
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Send Reuqest POCO to Center AP and receive response POCO
        /// </summary>
        /// <param name="request">自動加值請求物件</param>
        /// <returns>自動加值回應物件</returns>
        private TOL_Soc_Req SendAndReceiveFromAP(TOL_Soc_Req request, string serviceName)
        {
            TOL_Soc_Req response = null;
            string requestStr = null;
            byte[] requestBytes = null;
            string responseString = null;
            byte[] responseBytes = null;
            string serverUri = null;
            string errMsg = null;
            NameValueCollection headers = null;
            //string fixedRequestStr = null;
            //string fixedresponseStr = null;
            //*********************************
            //取得連線後台的WebConfig設定資料
            serverUri = ConfigGetter.GetValue(serviceName);
            log.Debug(m => { m.Invoke(serviceName + ":" + serverUri); });
            if (serverUri == null)
            {
                log.Error("要連結的目的地設定資料不存在:" + serviceName);
                return null;
            }
            //*********************************
            try
            {
                //UTF8(JSON(POCO))=>byte array and send to AP
                requestStr = JsonConvert.SerializeObject(request);
                requestBytes = Encoding.UTF8.GetBytes(requestStr);//Center AP used UTF8
                //fixedRequestStr = requestStr.Replace("{", "{{").Replace("}", "}}");//修正log4net的JSON轉換問題 //ref:http://chwilliamson.me.uk/article/CommonLoggingTraceListener-to-Log4Net-FormatException
                log.Debug(m => m("[鎖卡Txlog]開始送出Request : Uri({0}) data: {1}", serverUri, requestStr));
                headers = new NameValueCollection();
                headers.Add("Content-Type", "application/json");//因應後台WebAPI服務格式要求
                //
                responseBytes = Client.GetResponse(serverUri, "POST", out errMsg, 10000, headers, requestBytes);
                if (responseBytes != null)
                {
                    responseString = Encoding.UTF8.GetString(responseBytes);
                    log.Debug(m => m("[鎖卡Txlog]Response JsonString: {0}", responseString));
                    response = JsonConvert.DeserializeObject<TOL_Soc_Req>(responseString);
                }
                else
                {
                    log.Error(m => { m.Invoke("取得回應異常: {0}", errMsg); });
                }

            }
            catch (Exception ex)
            {
                log.Error("[SendAndReceiveFromAP] Error:" + ex.Message + ex.StackTrace);
            }
            return response;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 鎖卡Txlog請求電文字串轉自動加值Txlog請求物件(要傳給後端AP用的)
        /// </summary>
        /// <param name="request">自動加值Txlog請求電文字串(ASCII)</param>
        /// <returns>自動加值Txlog請求物件</returns>
        private TOL_Soc_Req ParseRequestString(string request)
        {
            TOL_Soc_Req toAPObject = null;

            //文件格式參考: iCash2@iBon_Format_20150826(內部使用).xlsx
            if (request.Length != TxlogLength)
            {
                log.Debug("[鎖卡Txlog]Request字串長度不符:" + request.Length);
                return null;
            }
            else if (!request.Substring(0, 4).Equals(Request_Com_Type))
            {
                log.Debug("[鎖卡Txlog]Request通訊種別不符:" + request.Substring(0, 4));
                return null;
            }

            try
            {
                toAPObject = new TOL_Soc_Req
                {
                    COM_TYPE = request.Substring(0, 4),                 //0~3     //0631:通訊種別
                    CHANNEL_TYPE = request.Substring(4, 3),             //4~6     //SET:通路別
                    STORE_NO = request.Substring(7, 8),                 //7~14    //01234567:店號
                    POS_REGNO = request.Substring(15, 3),               //15~17   //011:POS機編號
                    POS_SEQNO = request.Substring(18, 8),               //18~25   //12345678:Pos交易序號
                    CASHIER_NO = request.Substring(26, 4),              //26~29   //0000:收銀員編號
                    DATE_TIME = request.Substring(30, 14),              //30~43   //20150824165959:交易日期(yyyyMMddHHmmss)
                    SW = request.Substring(44, 6),                      //44~49   //000000:中心端回應碼
                    TERMINAL_ID = request.Substring(50, 16),            //50~55   //Terminal ID
                    TxLog = request.Substring(66, 331)                  //66~396  //Txlog(包含Txlog的header + body:43 + 288 bytes)
                };
            }
            catch (Exception ex)
            {
                log.Error("[鎖卡Txlog]轉換Request物件失敗:" + ex.Message + "\n " + ex.StackTrace);
            }
            return toAPObject;
        }