private AppXmlExecResult Do_IB_INCOPR_TFR_Process(EaiContext context, string correlationID, string txID, HostTxDef txDef, XmlDocument requestXml) { try { string mbRs = string.Empty; string msgId = txID; XmlHelper xmlHelper = XmlHelper.GetInstance(requestXml); #region 擷取存於MSMQ_Body中的IB.INCOPR.TFR電文,並置換借方貸方帳號 //1.擷取欄位 string IntAcctNo = xmlHelper.GetXPath(requestXml, "//CREDIT_ACCT_NO").Trim(); //CNY1406100010002 string DebAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYER_ACCT_NO").Trim(); //000281000012504 string CreAcctNo = xmlHelper.GetXPath(requestXml, "//C_PAYEE_ACCT_NO").Trim(); //000281000000077 string RecId = xmlHelper.GetXPath(requestXml, "//REQ_TXN_ID").Trim(); //取扣帳時回覆的RSP_TXN_ID(FT流水號) string RecTxn = string.Empty; //存入帳時回覆的RSP_TXN_ID(FT流水號) int Status = (int)IBNextIntTransStatus.NOT_REVERSE; // 1:NOT_REVERSE(不可撤銷) //2.置換借貸方 xmlHelper.SetMultipleXPath(requestXml, "//REQ_TXN_ID", ""); //將原先扣帳時暫存在REQ_TXN_ID的FT流水號清空 xmlHelper.SetMultipleXPath(requestXml, "//DEBIT_ACCT_NO", IntAcctNo); //CNY1406100010002 xmlHelper.SetMultipleXPath(requestXml, "//CREDIT_ACCT_NO", CreAcctNo); //000281000000077 #endregion string strT24DataXmlRQ = RemoveNamespace(xmlHelper.SelectSingleNode(requestXml, "//T24_DATA").OuterXml); m_log.Info("Do_IB_INCOPR_TFR_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") { //入帳成功後更新IBNextIntTrans RecTxn = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_TXN_ID"); DBLog.UpdateAfterNextIntTrans(RecId, RecTxn, Status); //更新:RecTxn(入帳FT流水號)&Status(不可撤銷) XmlDocument responseXml = base.TransformCommMsg("0", "Info", "交易完成", mbRs); return(base.BuildExecResult(context, responseXml)); } else { // 若交易失敗,貸方帳號CREDIT_ACCT_NO改帶DebAcctNo(000281000012504) xmlHelper.SetMultipleXPath(requestXml, "//CREDIT_ACCT_NO", DebAcctNo); strT24DataXmlRQ = RemoveNamespace(xmlHelper.SelectSingleNode(requestXml, "//T24_DATA").OuterXml); m_log.Info("Do_IB_INCOPR_TFR_Process Change CREDIT_ACCT_NO strT24DataXmlRQ : {0} ", strT24DataXmlRQ); #region 發到T24進行入帳 t24_result = SendMsgToEAIProcess(context, strT24DataXmlRQ, msgId, true); xmlHelperT24RS = XmlHelper.GetInstance(t24_result.ResponseXml); rs_Code = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_CODE"); rs_Msg = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//ITF_RETURN_MSG"); proc_ret = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_PROC_RET"); xNodeT24DataRS = t24_result.ResponseXml.GetElementsByTagName("T24_DATA"); strT24DataXmlRS = (xNodeT24DataRS.Count > 0) ? xNodeT24DataRS[0].InnerXml : string.Empty; mbRs = RemoveNamespace(strT24DataXmlRS); m_log.Info("Do_NextDay_Trans_Process Change CREDIT_ACCT_NO strT24DataXmlRS : {0} ", strT24DataXmlRS); if (rs_Code == "E-000000" && proc_ret == "SUCC") { //入帳成功後更新IBNextIntTrans RecTxn = xmlHelperT24RS.GetXPath(t24_result.ResponseXml, "//RSP_TXN_ID"); DBLog.UpdateAfterNextIntTrans(RecId, RecTxn, Status); XmlDocument responseXml = base.TransformCommMsg("0", "Info", "交易完成", mbRs); return(base.BuildExecResult(context, responseXml)); } else { // 1.SendErrorMail new SendMail().Send(string.Format("{0} Do_IB_INCOPR_TFR_Process Error", txID), "", string.Format("{0} Do_IB_INCOPR_TFR_Process Error, PLS Check RQ:[{1}]", txID, context.RequestXml.OuterXml)); m_log.Error("Do_IB_INCOPR_TFR_Process Fail !!! rs_Code=[{0}] proc_ret=[{1}]", rs_Code, proc_ret); // 2.回覆失敗報文 XmlDocument responseXml = base.TransformCommMsg(t24_result.EaiRs.EaiErrCode, t24_result.EaiRs.EaiErrText, "交易完成", mbRs); return(base.BuildExecResult(context, responseXml)); } #endregion } #endregion } catch (Exception ex) { m_log.ErrorException(string.Format("Do_IB_INCOPR_TFR_Process Error ! TXID=[{0}] ", txID) + ex.ToString(), ex); XmlDocument responseXml = base.TransformCommMsg("99999", "Error", ex.Message, ""); return(base.BuildExecResult(context, responseXml)); } }