private AppXmlExecResult Do_NextDay_Trans_Process(EaiContext context, string correlationID, string txID, HostTxDef txDef, XmlDocument requestXml) { try { string mbRs = string.Empty; string msgId = "IB.INCOPR.TFR"; string msmqLabel = "IBNextDay"; string msmqBody = string.Empty; XmlHelper xmlHelper = XmlHelper.GetInstance(requestXml); #region 從次日行內轉帳電文,擷取FT扣帳成功後要存進DB的欄位 string RecId = string.Empty; //扣帳時T24的RSP_TXN_ID string DebAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYER_ACCT_NO").Trim(); //000281000012504 string DebCusNo = string.Empty; //DEBIT_CUSTOMER(RS) string CreAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYEE_ACCT_NO").Trim(); //000281000000077 string IntAcctNo = xmlHelper.GetXPath(requestXml, "//CREDIT_ACCT_NO").Trim(); //CNY1406100010002 string CardIntAcct = string.Empty; //銀聯卡對應的內部帳號(個銀時才填入),此時帶空值; string TxnDate = DateTime.Now.ToString("yyyyMMdd"); //扣帳當下日期 string ValueDate = string.Empty; //DEBIT_VALUE_DATE(RS) decimal Amt = Convert.ToDecimal(xmlHelper.GetXPath(requestXml, "//DEBIT_AMOUNT").Trim()); string CreCur = xmlHelper.GetXPath(requestXml, "//CREDIT_CURRENCY").Trim(); string DebCur = xmlHelper.GetXPath(requestXml, "//DEBIT_CURRENCY").Trim(); string TransGate = xmlHelper.GetXPath(requestXml, "//L_TRANS_GATE").Trim(); string Remark = xmlHelper.GetXPath(requestXml, "//C_REMARK").Trim(); string Remarks = xmlHelper.GetXPath(requestXml, "//C_REMARKS").Trim(); string PayerName = xmlHelper.GetXPath(requestXml, "//C_PAYER_NAME").Trim(); //APPLE string PayeeName = xmlHelper.GetXPath(requestXml, "//C_PAYEE_NAME").Trim(); //00028100011000281000000077S string Ref = xmlHelper.GetXPath(requestXml, "//DEBIT_THEIR_REF").Trim(); string RecTxn = string.Empty; //入帳時T24的RSP_TXN_ID int PayMethod = Convert.ToInt32(xmlHelper.GetXPath(requestXml, "//L_IB_PMT_M").Trim()); int Flag = (int)CorpFlag.CORPORATION; //1:CORPORATION(企業) int Status = (int)IBNextIntTransStatus.ALLOW_REVERSE; //0:ALLOW_REVERSE(可撤銷) #endregion string strT24DataXmlRQ = RemoveNamespace(xmlHelper.SelectSingleNode(requestXml, "//T24_DATA").OuterXml); m_log.Info("Do_NextDay_Trans_Process strT24DataXmlRQ : {0} ", strT24DataXmlRQ); #region 發到T24進行扣帳 AppXmlExecResult t24_result = SendMsgToEAIProcess(context, strT24DataXmlRQ, msgId, true); XmlHelper xmlHelperT24RS = XmlHelper.GetInstance(t24_result.ResponseXml); string rs_Code = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_CODE"); string rs_Msg = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_MSG"); string proc_ret = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_PROC_RET"); XmlNodeList xNodeT24DataRS = t24_result.ResponseXml.GetElementsByTagName("T24_DATA"); string strT24DataXmlRS = (xNodeT24DataRS.Count > 0) ? xNodeT24DataRS[0].InnerXml : string.Empty; mbRs = RemoveNamespace(strT24DataXmlRS); m_log.Info("Do_NextDay_Trans_Process strT24DataXmlRS : {0} ", strT24DataXmlRS); //扣帳成功後 if (rs_Code == "E-000000" && proc_ret == "SUCC") { RecId = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_TXN_ID"); DebCusNo = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//DEBIT_CUSTOMER"); ValueDate = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//DEBIT_VALUE_DATE"); Guid btID = Guid.NewGuid(); // 1.寫入IBNextIntTrans int ibNextTransCnt = DBLog.InsertIBNextIntTrans(RecId, DebAcctNo, DebCusNo, CreAcctNo, IntAcctNo, CardIntAcct, TxnDate, ValueDate, Amt, CreCur, DebCur, TransGate, Remark, Remarks, PayerName, PayeeName, Ref, PayMethod, Flag, RecTxn, Status, btID); // 2.寫入BroadcastMSMQTalk,於隔日透過MSMQ發起交易 #region xmlHelper.SetMultipleXPath(requestXml, "//MsgId", msgId); // 將次日轉帳MsgId轉換成當日 xmlHelper.SetMultipleXPath(requestXml, "//REQ_TXN_ID", RecId); // 將扣帳後的FT流水號置入原次日電文的REQ_TXN_ID中,才能在MSMQ發起隔日交易時取用該流水號 msmqBody = requestXml.OuterXml; #endregion int ibNextTransMSMQCnt = this.InsertToMSMQTalk(msmqLabel, msmqBody, btID); XmlDocument responseXml = base.TransformCommMsg("0", "Info", "交易完成", mbRs); return(base.BuildExecResult(context, responseXml)); } else { XmlDocument responseXml = base.TransformCommMsg(t24_result.EaiRs.EaiErrCode, t24_result.EaiRs.EaiErrText, "交易完成", mbRs); return(base.BuildExecResult(context, responseXml)); } #endregion } catch (Exception ex) { m_log.ErrorException(string.Format("Do_NextDay_Trans_Process Error ! TXID=[{0}] ", txID) + ex.ToString(), ex); XmlDocument responseXml = base.TransformCommMsg("99999", "Error", ex.Message, ""); return(base.BuildExecResult(context, responseXml)); } }