Exemple #1
0
        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));
            }
        }