public bool Insert(AccountRechargeRecord obj)
        {
            bool result = false;
            try
            {
                SqlParameter[] parameters = new SqlParameter[]{
                    new SqlParameter("@RechargeTransactionID",obj.RechargeTransactionID),
                    new SqlParameter("@RechargeDate",obj.RechargeDate),
                    new SqlParameter("@OrderSeq",obj.OrderSeq),
                    new SqlParameter("@OrderAmount",obj.OrderAmount),
                    new SqlParameter("@RechargeType",obj.RechargeType),
                    new SqlParameter("@OrderDesc",obj.OrderDesc),
                    new SqlParameter("@ReqTime",obj.ReqTime),
                    new SqlParameter("@CompleteTime",obj.CompleteTime),
                    new SqlParameter("@Status",obj.Status),
                    new SqlParameter("@ReturnCode",obj.ReturnCode),
                    new SqlParameter("@ReturnDesc",obj.ReturnDesc)
                };

                SqlCommand cmd = new SqlCommand(Insert_Sql);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddRange(parameters);

                result = DBUtility.Execute(cmd, DBUtility.BestToneCenterConStr);
            }
            catch { }

            return result;
        }
Exemple #2
0
        public bool Update(AccountRechargeRecord obj)
        {
            bool result = false;

            try
            {
                SqlParameter[] parameters = new SqlParameter[] {
                    new SqlParameter("@ID", obj.ID),
                    new SqlParameter("@RechargeTransactionID", obj.RechargeTransactionID),
                    new SqlParameter("@RechargeDate", obj.RechargeDate),
                    new SqlParameter("@OrderSeq", obj.OrderSeq),
                    new SqlParameter("@OrderAmount", obj.OrderAmount),
                    new SqlParameter("@RechargeType", obj.RechargeType),
                    new SqlParameter("@OrderDesc", obj.OrderDesc),
                    new SqlParameter("@ReqTime", obj.ReqTime),
                    new SqlParameter("@CompleteTime", obj.CompleteTime),
                    new SqlParameter("@Status", obj.Status),
                    new SqlParameter("@ReturnCode", obj.ReturnCode),
                    new SqlParameter("@ReturnDesc", obj.ReturnDesc)
                };

                SqlCommand cmd = new SqlCommand(Update_Sql);
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.AddRange(parameters);

                result = DBUtility.Execute(cmd, DBUtility.BestToneCenterConStr);
            }
            catch { }

            return(result);
        }
Exemple #3
0
        public AccountRechargeRecord QueryByID(Int64 id)
        {
            AccountRechargeRecord obj = null;

            try
            {
                String where = String.Format(" where ID = '{0}'", id);
                IList <AccountRechargeRecord> list = QueryByWhere(where);
                if (list != null && list.Count > 0)
                {
                    obj = list[0];
                }
            }
            catch (Exception ex) { throw ex; }

            return(obj);
        }
Exemple #4
0
        private IList <AccountRechargeRecord> QueryByWhere(String where)
        {
            IList <AccountRechargeRecord> list = null;

            String     sql = Select_Sql.Insert(Select_Sql.Length, where);
            SqlCommand cmd = new SqlCommand(sql);

            cmd.CommandType = CommandType.Text;

            DataSet ds = DBUtility.FillData(cmd, DBUtility.BestToneCenterConStr);

            if (ds != null && ds.Tables[0] != null)
            {
                list = new List <AccountRechargeRecord>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    AccountRechargeRecord entity = new AccountRechargeRecord();
                    entity.ID = Convert.ToInt64(row["ID"]);
                    entity.RechargeTransactionID = row["RechargeTransactionID"].ToString();
                    entity.RechargeDate          = row["RechargeDate"].ToString();
                    entity.OrderSeq     = row["OrderSeq"].ToString();
                    entity.OrderAmount  = Convert.ToInt64(row["OrderAmount"]);
                    entity.RechargeType = row["RechargeType"].ToString();
                    entity.OrderDesc    = row["OrderDesc"].ToString();
                    entity.ReqTime      = Convert.ToDateTime(row["ReqTime"]);
                    entity.CompleteTime = Convert.ToDateTime(row["CompleteTime"]);
                    entity.Status       = Convert.ToInt32(row["Status"]);
                    entity.ReturnCode   = row["ReturnCode"].ToString();
                    entity.ReturnDesc   = row["ReturnDesc"].ToString();

                    list.Add(entity);
                }
            }

            return(list);
        }
Exemple #5
0
    /// <summary>
    /// 卡充值
    /// </summary>
    protected String AccountRechargeByCard(out StringBuilder strLog)
    {
        Int32 Result = ErrorDefinition.CIP_IError_Result_UnknowError_Code;
        String ErrMsg = ErrorDefinition.CIP_IError_Result_UnknowError_Msg;

        strLog = new StringBuilder();
        strLog.AppendFormat("【消费卡充值,DateTime:{0}】\r\n[参数]:", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

        //获取参数
        String spid = Request["SPID"];
        String custid = Request["CustID"];
        String cardNo = Request["CardNo"];
        String cardPwd = Request["CardPassword"];
        String cardType = Request["CardType"];
        strLog.AppendFormat("SPID:{0},CustID:{1},CardNo:{2},CardPwd:{3},CardType:{4}\r\n", spid, custid, cardNo, cardPwd, cardType);

        //String CheckCardErrMsg = "";
        //Int32 CheckCardResult = BesttoneAccountHelper.VerifyCardNo(cardNo, out CheckCardErrMsg);
        //if(CheckCardResult!=0)
        //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + CheckCardResult + "\",\"info\":\"" + CheckCardErrMsg + "}]";

        long accountBalance = 0;        //账户余额
        long cardBalance = 0;           //卡余额
        String accountType = BesttoneAccountHelper.ConvertAccountType(cardType);            //转换卡类型
        /*********************************************查询账户信息*****************************************************/
        BesttoneAccountDAO _besttoneAccount_dao = new BesttoneAccountDAO();
        BesttoneAccount account_entity = _besttoneAccount_dao.QueryByCustID(custid);

        #region 卡余额查询

        //查询卡余额
        Result = BesttoneAccountHelper.QueryCardBalance(cardNo, accountType, out cardBalance, out ErrMsg);
        strLog.AppendFormat("[查询卡余额]:Result:{0},Balance:{1}\r\n", Result, cardBalance);

        //查询失败
        if (Result != 0)
            return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"查询余额失败\"}]";

        //卡余额为0
        if (cardBalance == 0)
            return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"200020\",\"info\":\"卡内余额为0\"}]";

        #endregion

        #region 账户充值金额上限校验

        long OnceRechargeLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedOne;              //单笔充值金额上限
        long RechargeAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedDay;            //账户单日充值额度上限
        long CurrentAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountBalanceLimited;                 //账户余额上限
        if (OnceRechargeLimit > 0)
        {
            //检测用户单笔充值金额是否超限(10000元)
            if (cardBalance > OnceRechargeLimit)
                return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100003\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "\",\"info\":\"卡内余额为0\"}]";
        }
        if (RechargeAmountLimit > 0)
        {
            //检测用户当日充值是否超限(当日充值金额不能超过50000元)
            long hadRechargeAmount = _rechargeOrder_dao.QueryCurrentRechargeAmount(account_entity.BestPayAccount);
            if ((hadRechargeAmount + cardBalance) > RechargeAmountLimit)
                return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100001\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(hadRechargeAmount) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(RechargeAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
        }

        if (CurrentAmountLimit > 0)
        {
            //检测用户帐户余额(个人账户余额不能超过100000元)
            Result = BesttoneAccountHelper.QueryAccountBalance(account_entity.BestPayAccount, out accountBalance, out ErrMsg);
            if (Result != 0)
                return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"账户信息查询失败\"}]";

            if ((accountBalance + cardBalance) > CurrentAmountLimit)
                return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100002\",\"accountbalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\",\"CurrentAmountLimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(CurrentAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
            accountBalance = 0;
        }

        #endregion

        #region 卡扣款

        String transactionID = BesttoneAccountHelper.CreateTransactionID();
        String orderSeq = BesttoneAccountHelper.CreateOrderSeq();
        DateTime reqTime = DateTime.Now;

        RechargeOrder _recharge_order;              //充值订单
        CardRechargeRecord cardrecharge_entity;     //卡扣款流水记录

        //初始化充值订单
        _recharge_order = new RechargeOrder(orderSeq, transactionID, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, cardBalance, 0, "消费卡向账户充值扣款",
            custid, account_entity.BestPayAccount, cardType, spid, reqTime, new DateTime(1900, 1, 1), new DateTime(1900, 1, 1), 1, 0, "", "", "","0");  //2013-04-13 add 最后一个字段 0 代表是否需要开票
        //初始化充值订单—测试
        //_recharge_order = new RechargeOrder(orderSeq, transactionID, reqTime.ToString("yyyyMMdd"), "RMB", 1, 1, 0, "消费卡向账户充值扣款",
        //    custid, account_entity.BestPayAccount, cardType, spid, reqTime, new DateTime(1900, 1, 1), new DateTime(1900, 1, 1), 1, 0, "", "", "");

        //初始化卡扣款流水
        cardrecharge_entity = new CardRechargeRecord(transactionID, orderSeq, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, "消费卡向账户充值扣款", cardNo, cardPwd, cardType,
            account_entity.BestPayAccount, 0, reqTime, new DateTime(1900, 1, 1), "", "", "", "", "");
        //初始化卡扣款流水—测试
        //cardrecharge_entity = new CardRechargeRecord(transactionID, orderSeq, reqTime.ToString("yyyyMMdd"), "RMB", 1, "消费卡向账户充值扣款", cardNo, cardPwd, cardType,
        //    account_entity.BestPayAccount, 0, reqTime, new DateTime(1900, 1, 1), "", "", "", "", "");

        strLog.AppendFormat("[订单信息]:TransactionID:{0},OrderSeq:{1},ReqTime:{2}\r\n", transactionID, orderSeq, reqTime.ToString("yyyy-MM-dd HH:mm:ss"));

        /***********************************************************开始扣款*******************************************************/
        String uptranSeq = String.Empty;                        //交易流水号,支付平台返回的,后期对账用
        Result = BesttoneAccountHelper.CardDeductionBalance(transactionID, orderSeq, cardNo, cardPwd, cardType, cardBalance, reqTime, "", out uptranSeq, out ErrMsg);
        //扣款—测试
        //Result = BesttoneAccountHelper.CardDeductionBalance(transactionID, orderSeq, cardNo, cardPwd, cardType, 1, reqTime, "", out uptranSeq, out ErrMsg);
        strLog.AppendFormat("[卡扣款]:Result:{0},ErrMsg:{1}\r\n", Result, ErrMsg);
        _recharge_order.UptranSeq = uptranSeq;
        cardrecharge_entity.UptranSeq = uptranSeq;
        if (Result != 0)
        {
            //修改订单信息
            _recharge_order.Status = 4;     // 这里要对调网关发生异常做分别处理 ,定位6
            if (Result == -3024)
            {
                _recharge_order.Status = 6;
            }

            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = Result.ToString();
            _recharge_order.ReturnDesc = ErrMsg;
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡扣款记录信息
            //cardrecharge_entity.Status = 2;   //为统一rechargeorder 和 cardrechargerecord 的状态值,这里做修改 2013-05-15
            cardrecharge_entity.Status = 4;
            if (Result == -3024)
            {
                cardrecharge_entity.Status = 6;
            }
            //以上和rechargeorder 的状态处理方式统一

            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = Result.ToString();
            cardrecharge_entity.ReturnDesc = ErrMsg;
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
            return "[{\"result\":\"false\",\"step\":\"deduction\",\"errorcode\":\"" + Result + "\",\"info\":\"卡扣款失败\"}]";
        }
        else
        {
            //修改订单信息
            _recharge_order.Status = 2;
            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = "0000";
            _recharge_order.ReturnDesc = "已扣款待充值";   // 原:扣款成功
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡充值记录信息
            //cardrecharge_entity.Status = 1;      // 这里为和 rechargeorder 状态统一 ,修改为2
            cardrecharge_entity.Status = 2;
            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = "0000";
            cardrecharge_entity.ReturnDesc = "已扣款待充值";   // 原:扣款成功
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
        }

        #endregion

        #region 充值

        transactionID = BesttoneAccountHelper.CreateTransactionID();        //充值流水记录
        DateTime rechargeTime = DateTime.Now;                               //充值请求时间
        String returnMsg = String.Empty;
        bool resultBoolean = false;

        //初始化充值流水类
        AccountRechargeRecord rechargeRecord_entity = new AccountRechargeRecord(transactionID, rechargeTime.ToString("yyyyMMdd"), orderSeq,
            cardBalance, cardType, "消费卡充值", rechargeTime, new DateTime(1900, 1, 1), 0, "", "");

        try
        {
            #region 开始充值

            //调用接口给账户充值
            Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, cardBalance, rechargeTime, out accountBalance, out ErrMsg);
            //调用接口给账户充值—测试
            //Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, 1, rechargeTime, out accountBalance, out ErrMsg);
            strLog.AppendFormat("[账户充值]:TransactionID:{0},Result:{1},ErrMsg:{2}\r\n", transactionID, Result, ErrMsg);
            if (Result == 0)
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.Status = 3;
                _recharge_order.RechargeCount = 1;
                _recharge_order.CompleteTime = DateTime.Now;
                _recharge_order.ReturnCode = "0000";
                _recharge_order.ReturnDesc = "已充值";    // 原:充值成功
                _recharge_order.RechargeTransactionID = transactionID;  // 回填充值流水号
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 3;    // 原: 1 ,为和总表rechargeorder 统一改为3
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = "0000";
                rechargeRecord_entity.ReturnDesc = "已充值";  // 原:充值成功

                strLog.AppendFormat("[更新订单状态]ResultBoolean:{0}\r\n", resultBoolean);
                returnMsg = "[{\"result\":\"true\",\"info\":\"账户充值成功\",\"deductionBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"accountBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\"}]";
            }
            else
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.RechargeCount = 1;
                _recharge_order.Status = 5; // 原:没有这句
                if (Result == -3025)
                {
                    _recharge_order.Status = 7;  //原:没有这句
                }
                _recharge_order.ReturnCode = Result.ToString();
                _recharge_order.ReturnDesc = ErrMsg;
                _recharge_order.RechargeTransactionID = transactionID;  // 回填充值流水号
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 5;    //   5 代表充值失败  原:2

                if (Result == -3025)
                {
                    rechargeRecord_entity.Status = 7;// 充值异常
                }
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = Result.ToString();
                rechargeRecord_entity.ReturnDesc = ErrMsg;

                returnMsg = "[{\"result\":\"false\",\"step\":\"recharge\",\"errorcode\":\"" + Result + "\",\"info\":\"账户充值失败\"}]";
            }

            #endregion
        }
        catch (Exception ex)
        {
            rechargeRecord_entity.ReturnDesc += ex.Message;
            throw ex;
        }
        finally
        {
            _accountRechargeRecord_dao.Insert(rechargeRecord_entity);
        }

        #endregion

        return returnMsg;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder strLog = new StringBuilder();
        strLog.AppendFormat("【网银充值,DateTime:{0}】\r\n", DateTime.Now.ToString("yyyyMMdd HH:mm:ss"));
        if (!IsPostBack)
        {
            try
            {

                //客户ID,账户号,订单号
                String CustID, BestPayAccount, OrderSeq;
                //充值金额,账户余额
                long RechargeBalance, Balance;

                #region 获取支付平台post过来的一些变量

                //获取支付平台post过来的一些变量
                String uptranSeq = Request.Form["UPTRANSEQ"];                   //支付平台交易流水号
                String tranDate = Request.Form["TRANDATE"];                     //支付平台交易日期
                String retnCode = Request.Form["RETNCODE"];                     //处理结果码
                String retnInfo = Request.Form["RETNINFO"];                     //处理结果解释码
                String orderReqtranSeq = Request.Form["ORDERREQTRANSEQ"];       //订单请求交易流水号
                String orderSeq = Request.Form["ORDERSEQ"];                     //订单号
                String orderAmount = Request.Form["ORDERAMOUNT"];               //订单总金额
                String productAmount = Request.Form["PRODUCTAMOUNT"];           //产品金额
                String attachAmount = Request.Form["ATTACHAMOUNT"];             //附加金额
                String curType = Request.Form["CURTYPE"];                       //币种
                String encodeType = Request.Form["ENCODETYPE"];                 //加密方式
                String attach = Request.Form["ATTACH"];                         //SP附加信息
                String sign = Request.Form["SIGN"];                             //数字签名

                strLog.AppendFormat("[网银返回参数]:uptranSeq:{0},tranDate:{1},retnCode:{2},retnInfo:{3},orderReqtranSeq:{4},orderSeq:{5},orderAmount:{6},productAmount:{7},attachAmount:{8},curType:{9},attach:{10},sign:{11},",
                    uptranSeq, tranDate, retnCode, retnInfo, orderReqtranSeq, orderSeq, orderAmount, productAmount, attachAmount, curType, attach, sign);

                if (retnCode != "0000")
                    return;

                //验证签名:16进制转换(MD5加密)
                String newSign = String.Format("UPTRANSEQ={0}&MERCHANTID={1}&ORDERID={2}&PAYMENT={3}&RETNCODE={4}&RETNINFO={5}&PAYDATE={6}&KEY={7}",
                    uptranSeq, BesttoneAccountConstDefinition.DefaultInstance.MERCHANTID, orderSeq, orderAmount, retnCode, retnInfo, tranDate, BesttoneAccountConstDefinition.DefaultInstance.MERCHANTID_KEY);
                String md5EncodingSign = BesttoneAccountHelper.MACSign(newSign);
                strLog.AppendFormat("newSign:{0},md5EncodingSign:{1}\r\n", newSign, md5EncodingSign);
                if (!md5EncodingSign.Equals(sign))
                {
                    strLog.Append("[签名验证]:签名验证有误");
                    return;
                }

                String responseXml = String.Format("UPTRANSEQ_{0}", uptranSeq);
                strLog.AppendFormat("[返回给网银参数]:ResponseXml:{0}\r\n", responseXml);

                #endregion

                #region 更新银行扣款订单状态

                //查询订单,检查订单状态
                RechargeOrder _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                BankRechargeRecord _bankRecharge_record = _bankRechargeRecord_dao.QueryByOrderTransacntionID(orderReqtranSeq);
                if (_recharge_order == null)
                    return;
                if (_bankRecharge_record == null)
                    return;

                CustID = _recharge_order.CustID;
                BestPayAccount = _recharge_order.TargetAccount;
                OrderSeq = _recharge_order.OrderSeq;
                RechargeBalance = _recharge_order.OrderAmount;

                strLog.AppendFormat("[订单信息]:CustID:{0},BestPayAccount:{1},OrderSeq:{2},RechargeBalance:{3},订单状态:{4}\r\n",
                    CustID, BestPayAccount, OrderSeq, RechargeBalance, _recharge_order.Status);

                //检查订单状态    6 扣款异常  主表
                if (_recharge_order.Status == 6)
                {
                    return;
                }
                else if (_recharge_order.Status == 2 || _recharge_order.Status == 3 || _recharge_order.Status == 5 || _recharge_order.Status == 9)
                {
                    Response.Write(responseXml.ToString());    // 2 扣款成功    3 已充成功    5  充值失败   9 已对账
                }
                // Response.Write 后,不会再往下执行
                // 0 ,1, 4, 7 往下做  先把主表状态改为2,然后将扣款子表状态改为1 意味着扣款成功
                Boolean result = false;
                //修改订单状态
                _recharge_order.Status = 2;
                _recharge_order.PayTime = DateTime.Now;
                _recharge_order.UptranSeq = uptranSeq;
                result = _rechargeOrder_dao.Update(_recharge_order);
                strLog.AppendFormat("[修改订单结果]:{0}\r\n", result);
                if (!result)
                    return;

                //修改扣款记录状态
                _bankRecharge_record.UptranSeq = uptranSeq;
                _bankRecharge_record.Sign = sign;
                _bankRecharge_record.TranDate = tranDate;
                _bankRecharge_record.ReturnCode = retnCode;
                _bankRecharge_record.ReturnDesc = retnInfo;
                _bankRecharge_record.PayTime = DateTime.Now;
                _bankRecharge_record.Status = 1;
                result = _bankRechargeRecord_dao.Update(_bankRecharge_record);
                if (!result)
                    return;

                #endregion

                #region 向账户进行充值

                //生成一条充值流水号记录
                DateTime rechargeTime = DateTime.Now;
                String transactionid = BesttoneAccountHelper.CreateTransactionID();

                AccountRechargeRecord rechargeRecord_entity = new AccountRechargeRecord();
                rechargeRecord_entity.RechargeTransactionID = transactionid;
                rechargeRecord_entity.RechargeDate = rechargeTime.ToString("yyyyMMdd");
                rechargeRecord_entity.OrderSeq = OrderSeq;
                rechargeRecord_entity.OrderAmount = RechargeBalance;
                rechargeRecord_entity.RechargeType = "0";
                rechargeRecord_entity.OrderDesc = "网银充值";
                rechargeRecord_entity.ReqTime = rechargeTime;
                rechargeRecord_entity.CompleteTime = new DateTime(1900, 1, 1);
                rechargeRecord_entity.Status = 0;
                rechargeRecord_entity.ReturnCode = "";
                rechargeRecord_entity.ReturnDesc = "";
                strLog.AppendFormat("[开始给账户充值]:transactionid:{0},", transactionid);
                try
                {
                    //开始调用接口充值
                    Result = BesttoneAccountHelper.AccountRecharge(transactionid, BestPayAccount, RechargeBalance, rechargeTime, out Balance, out ErrMsg);
                    if (Result == 0)
                    {
                        strLog.Append("充值状态:充值成功\r\n");
                        //充值成功,则更新订单状态
                        _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(OrderSeq);
                        _recharge_order.CompleteTime = DateTime.Now;
                        _recharge_order.Status = 3;
                        _recharge_order.RechargeCount = _recharge_order.RechargeCount + 1;
                        _recharge_order.ReturnCode = "0000";
                        _recharge_order.ReturnDesc = "充值成功";
                        _rechargeOrder_dao.Update(_recharge_order);
                        //如果需要开发票 -- 插入发票表  2013-04-14 add-start
                        System.Text.StringBuilder datalog = new System.Text.StringBuilder();
                        _rechargeOrder_dao.UpdateInvoice(orderSeq, "0", out datalog);  //将发票状态改为申请中.
                        strLog.Append("更新发票状态:"+datalog.ToString());
                        //2013-04-14 add-end
                        //更新流水号状态
                        rechargeRecord_entity.Status = 1;
                        rechargeRecord_entity.CompleteTime = DateTime.Now;
                        rechargeRecord_entity.ReturnCode = "0000";
                        rechargeRecord_entity.ReturnDesc = "充值成功";

                    }
                    else
                    {
                        strLog.Append("充值状态:充值失败\r\n");
                        //充值失败,则更新订单状态
                        _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(OrderSeq);
                        _recharge_order.RechargeCount = _recharge_order.RechargeCount + 1;
                        _recharge_order.ReturnCode = Result.ToString();
                        _recharge_order.ReturnDesc = ErrMsg;
                        _rechargeOrder_dao.Update(_recharge_order);

                        //更新流水号状态
                        rechargeRecord_entity.Status = 2;
                        rechargeRecord_entity.CompleteTime = DateTime.Now;
                        rechargeRecord_entity.ReturnCode = Result.ToString();
                        rechargeRecord_entity.ReturnDesc = ErrMsg;
                    }
                }
                catch (Exception ex)
                {
                    strLog.AppendFormat("充值异常1:{0}\r\n", ex.Message);
                }
                finally
                {
                    //插入充值流水记录
                    _accountRechargeRecord_dao.Insert(rechargeRecord_entity);
                    Response.Write(responseXml.ToString());
                }

                #endregion

            }
            catch (Exception ex)
            {
                strLog.AppendFormat("异常2:{0}\r\n", ex.Message);
            }
            finally
            {
                log(strLog.ToString());
            }
        }
    }
        private IList<AccountRechargeRecord> QueryByWhere(String where)
        {
            IList<AccountRechargeRecord> list = null;

            String sql = Select_Sql.Insert(Select_Sql.Length, where);
            SqlCommand cmd = new SqlCommand(sql);
            cmd.CommandType = CommandType.Text;

            DataSet ds = DBUtility.FillData(cmd, DBUtility.BestToneCenterConStr);
            if (ds != null && ds.Tables[0] != null)
            {
                list = new List<AccountRechargeRecord>();
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    AccountRechargeRecord entity = new AccountRechargeRecord();
                    entity.ID = Convert.ToInt64(row["ID"]);
                    entity.RechargeTransactionID = row["RechargeTransactionID"].ToString();
                    entity.RechargeDate = row["RechargeDate"].ToString();
                    entity.OrderSeq = row["OrderSeq"].ToString();
                    entity.OrderAmount = Convert.ToInt64(row["OrderAmount"]);
                    entity.RechargeType = row["RechargeType"].ToString();
                    entity.OrderDesc = row["OrderDesc"].ToString();
                    entity.ReqTime = Convert.ToDateTime(row["ReqTime"]);
                    entity.CompleteTime = Convert.ToDateTime(row["CompleteTime"]);
                    entity.Status = Convert.ToInt32(row["Status"]);
                    entity.ReturnCode = row["ReturnCode"].ToString();
                    entity.ReturnDesc = row["ReturnDesc"].ToString();

                    list.Add(entity);
                }
            }

            return list;
        }
    public RechargeResult Recharge(String Request)
    {
        RechargeResult rechargeResult = new RechargeResult();

        int Result = 0;
        String ErrMsg = "";

        StringBuilder strLog = new StringBuilder();

        StringBuilder Response = new StringBuilder();
        Response.AppendFormat("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

        #region 解析xml
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(Request);
        XmlNode versionNode = xmlDoc.SelectNodes("/root/callinfo/version")[0];
        String version = versionNode.Attributes["value"].Value;

        XmlNode SPIDNode = xmlDoc.SelectNodes("/root/callinfo/SPID")[0];
        String SPID = SPIDNode.Attributes["value"].Value;

        XmlNode CardTypeNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardType")[0];
        String CardType = CardTypeNode.Attributes["value"].Value;

        XmlNode CustIDNode = xmlDoc.SelectNodes("/root/srchcond/conds/CustID")[0];
        String CustID = CustIDNode.Attributes["value"].Value;

        XmlNode BesttoneAccountNode = xmlDoc.SelectNodes("/root/srchcond/conds/BesttoneAccount")[0];
        String BesttoneAccount = CustIDNode.Attributes["value"].Value;

        XmlNode CardNoNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardNo")[0];
        String CardNo = CardNoNode.Attributes["value"].Value;

        XmlNode CardPasswordNode = xmlDoc.SelectNodes("/root/srchcond/conds/CardPassword")[0];
        String CardPassword = CardPasswordNode.Attributes["value"].Value;

        #endregion

        #region 请求数据校验

        if (String.IsNullOrEmpty(CustID) && String.IsNullOrEmpty(BesttoneAccount))
        {
            //返回错误
            rechargeResult.ReturnCode = "-10";
            rechargeResult.Msg = "CUSTID 和BesttoneAccount 不能同时为空! ";
            return rechargeResult;
        }

        #endregion

        #region 权限校验
        #endregion

        long accountBalance = 0;        //账户余额
        long cardBalance = 0;           //卡余额
        //String accountType = BesttoneAccountHelper.ConvertAccountType(cardType);            //转换卡类型
        /*********************************************查询账户信息*****************************************************/
        BesttoneAccountDAO _besttoneAccount_dao = new BesttoneAccountDAO();
        BesttoneAccount account_entity = null;
        //订单充值操作类
        RechargeOrderDAO _rechargeOrder_dao = new RechargeOrderDAO();
        //卡扣款记录操作类
        CardRechargeRecordDAO _cardRechargeRecord_dao = new CardRechargeRecordDAO();
        //充值操作类
        AccountRechargeRecordDAO _accountRechargeRecord_dao = new AccountRechargeRecordDAO();

        if (!String.IsNullOrEmpty(CustID))
        {
            account_entity = _besttoneAccount_dao.QueryByCustID(CustID);
        }

        if (!String.IsNullOrEmpty(BesttoneAccount))
        {
            account_entity = _besttoneAccount_dao.QueryByBestAccount(BesttoneAccount);
           }

        #region 卡余额查询

        //查询卡余额
        Result = BesttoneAccountHelper.QueryCardBalance(CardNo, CardType, out cardBalance, out ErrMsg);
        strLog.AppendFormat("[查询卡余额]:Result:{0},Balance:{1}\r\n", Result, cardBalance);

        //查询失败
        //if (Result != 0)
        //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"查询余额失败\"}]";
        //if (Result != 0)
        //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='" + 查询余额失败 + "'  />";

        if (Result != 0)
        {
            rechargeResult.ReturnCode = "-11";
            rechargeResult.Msg = "查询余额失败";
            return rechargeResult;
        }

        //卡余额为0
        //if (cardBalance == 0)
        //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"200020\",\"info\":\"卡内余额为0\"}]";

        if (cardBalance == 0)
        {
            rechargeResult.ReturnCode = "200020";
            rechargeResult.Msg = "卡内余额为0";
            return rechargeResult;
        }

        //if (Result != 0)
        //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='200020' Msg='" + 卡内余额为0 + "'  />";

        #endregion

        #region 账户充值金额上限校验

        long OnceRechargeLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedOne;              //单笔充值金额上限
        long RechargeAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountRechargeLimitedDay;            //账户单日充值额度上限
        long CurrentAmountLimit = BesttoneAccountConstDefinition.DefaultInstance.AccountBalanceLimited;                 //账户余额上限
        if (OnceRechargeLimit > 0)
        {
            //检测用户单笔充值金额是否超限(10000元)
            //if (cardBalance > OnceRechargeLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100003\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100003' Rechargeamount='" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "' Rechargeamountlimit='" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "' />";

            if (Result != 0)
            {
                rechargeResult.ReturnCode = "100003";
                rechargeResult.Msg = "单笔充值金额是否超限(10000元)";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
                rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
                return rechargeResult;
            }

        }
        if (RechargeAmountLimit > 0)
        {
            //检测用户当日充值是否超限(当日充值金额不能超过50000元)
            long hadRechargeAmount = _rechargeOrder_dao.QueryCurrentRechargeAmount(account_entity.BestPayAccount);
            //if ((hadRechargeAmount + cardBalance) > RechargeAmountLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100001\",\"rechargeamount\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(hadRechargeAmount) + "\",\"rechargeamountlimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(RechargeAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100001' Rechargeamount='" + BesttoneAccountHelper.ConvertAmountToYuan(hadRechargeAmount) + "' Rechargeamountlimit='" + BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit) + "' />";
            rechargeResult.ReturnCode = "100001";
            rechargeResult.Msg = "当日充值金额不能超过50000元";
            rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
            rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
            return rechargeResult;

        }

        if (CurrentAmountLimit > 0)
        {
            //检测用户帐户余额(个人账户余额不能超过100000元)
            Result = BesttoneAccountHelper.QueryAccountBalance(account_entity.BestPayAccount, out accountBalance, out ErrMsg);
            //if (Result != 0)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"" + Result + "\",\"info\":\"账户信息查询失败\"}]";

            //if (Result != 0)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='账户信息查询失败'  />";

            //if ((accountBalance + cardBalance) > CurrentAmountLimit)
            //    return "[{\"result\":\"false\",\"step\":\"query\",\"errorcode\":\"100002\",\"accountbalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\",\"CurrentAmountLimit\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(CurrentAmountLimit) + "\",\"info\":\"卡内余额为0\"}]";
            //accountBalance = 0;

            //if ((accountBalance + cardBalance) > CurrentAmountLimit)
            //    return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='100002' Accountbalance='" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "' CurrentAmountLimit='" + BesttoneAccountHelper.ConvertAmountToYuan(CurrentAmountLimit) + "'  />";

            if ((accountBalance + cardBalance) > CurrentAmountLimit)
            {
                rechargeResult.ReturnCode = "100001";
                rechargeResult.Msg = "当日充值金额不能超过50000元";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(cardBalance);
                rechargeResult.Rechargeamountlimit = BesttoneAccountHelper.ConvertAmountToYuan(OnceRechargeLimit);
                return rechargeResult;
            }

        }

        #endregion

        #region 卡扣款

        String transactionID = BesttoneAccountHelper.CreateTransactionID();
        String orderSeq = BesttoneAccountHelper.CreateOrderSeq();
        DateTime reqTime = DateTime.Now;

        RechargeOrder _recharge_order;              //充值订单
        CardRechargeRecord cardrecharge_entity;     //卡扣款流水记录

        //初始化充值订单
        _recharge_order = new RechargeOrder(orderSeq, transactionID, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, cardBalance, 0, "消费卡向账户充值扣款",
            account_entity.CustID, account_entity.BestPayAccount, CardType, SPID, reqTime, new DateTime(1900, 1, 1), new DateTime(1900, 1, 1), 1, 0, "", "", "", "0");  //2013-04-13 add 最后一个字段 0 代表是否需要开票

        //初始化卡扣款流水
        cardrecharge_entity = new CardRechargeRecord(transactionID, orderSeq, reqTime.ToString("yyyyMMdd"), "RMB", cardBalance, "消费卡向账户充值扣款", CardNo, CardPassword, CardType,
            account_entity.BestPayAccount, 0, reqTime, new DateTime(1900, 1, 1), "", "", "", "", "");

        /***********************************************************开始扣款*******************************************************/
        String uptranSeq = String.Empty;                        //交易流水号,支付平台返回的,后期对账用
        Result = BesttoneAccountHelper.CardDeductionBalance(transactionID, orderSeq, CardNo, CardPassword, CardType, cardBalance, reqTime, "", out uptranSeq, out ErrMsg);
        strLog.AppendFormat("[卡扣款]:Result:{0},ErrMsg:{1}\r\n", Result, ErrMsg);
        _recharge_order.UptranSeq = uptranSeq;
        cardrecharge_entity.UptranSeq = uptranSeq;
        if (Result != 0)
        {
            //修改订单信息
            _recharge_order.Status = 4;
            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = Result.ToString();
            _recharge_order.ReturnDesc = ErrMsg;
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡扣款记录信息
            cardrecharge_entity.Status = 2;
            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = Result.ToString();
            cardrecharge_entity.ReturnDesc = ErrMsg;
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
            //return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='卡扣款失败'   />";

            //return "[{\"result\":\"false\",\"step\":\"deduction\",\"errorcode\":\"" + Result + "\",\"info\":\"卡扣款失败\"}]";
            rechargeResult.ReturnCode = Convert.ToString(Result);
            rechargeResult.Msg = "卡扣款失败!";

            return rechargeResult;
        }
        else
        {
            //修改订单信息
            _recharge_order.Status = 2;
            _recharge_order.PayTime = DateTime.Now;
            _recharge_order.ReturnCode = "0000";
            _recharge_order.ReturnDesc = "扣款成功";
            _rechargeOrder_dao.Insert(_recharge_order);

            //修改卡充值记录信息
            cardrecharge_entity.Status = 1;
            cardrecharge_entity.PayTime = DateTime.Now;
            cardrecharge_entity.ReturnCode = "0000";
            cardrecharge_entity.ReturnDesc = "扣款成功";
            _cardRechargeRecord_dao.Insert(cardrecharge_entity);
        }

        #endregion

        #region 充值

        transactionID = BesttoneAccountHelper.CreateTransactionID();        //充值流水记录
        DateTime rechargeTime = DateTime.Now;                               //充值请求时间
        String returnMsg = String.Empty;
        bool resultBoolean = false;

        //初始化充值流水类
        AccountRechargeRecord rechargeRecord_entity = new AccountRechargeRecord(transactionID, rechargeTime.ToString("yyyyMMdd"), orderSeq,
            cardBalance, CardType, "消费卡充值", rechargeTime, new DateTime(1900, 1, 1), 0, "", "");

        try
        {
            #region 开始充值

            //调用接口给账户充值
            Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, cardBalance, rechargeTime, out accountBalance, out ErrMsg);
            //调用接口给账户充值—测试
            //Result = BesttoneAccountHelper.AccountRecharge(transactionID, account_entity.BestPayAccount, 1, rechargeTime, out accountBalance, out ErrMsg);
            strLog.AppendFormat("[账户充值]:TransactionID:{0},Result:{1},ErrMsg:{2}\r\n", transactionID, Result, ErrMsg);
            if (Result == 0)
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.Status = 3;
                _recharge_order.RechargeCount = 1;
                _recharge_order.CompleteTime = DateTime.Now;
                _recharge_order.ReturnCode = "0000";
                _recharge_order.ReturnDesc = "充值成功";
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 1;
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = "0000";
                rechargeRecord_entity.ReturnDesc = "充值成功";

                strLog.AppendFormat("[更新订单状态]ResultBoolean:{0}\r\n", resultBoolean);
                returnMsg = "[{\"result\":\"true\",\"info\":\"账户充值成功\",\"deductionBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "\",\"accountBalance\":\"" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "\"}]";
                //return "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='卡扣款失败'   />";
                //returnMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + 0 + "' Msg='账户充值成功'  deductionBalance='" + BesttoneAccountHelper.ConvertAmountToYuan(cardBalance) + "' accountBalance='" + BesttoneAccountHelper.ConvertAmountToYuan(accountBalance) + "' />";
                rechargeResult.Msg = "账户充值成功";
                rechargeResult.ReturnCode = "0";
                rechargeResult.Rechargeamount = BesttoneAccountHelper.ConvertAmountToYuan(accountBalance);
                return rechargeResult;
            }
            else
            {
                //修改订单信息
                _recharge_order = _rechargeOrder_dao.QueryByOrderSeq(orderSeq);
                _recharge_order.RechargeCount = 1;
                _recharge_order.ReturnCode = Result.ToString();
                _recharge_order.ReturnDesc = ErrMsg;
                resultBoolean = _rechargeOrder_dao.Update(_recharge_order);

                //修改充值流水记录信息
                rechargeRecord_entity.Status = 2;
                rechargeRecord_entity.CompleteTime = DateTime.Now;
                rechargeRecord_entity.ReturnCode = Result.ToString();
                rechargeRecord_entity.ReturnDesc = ErrMsg;

                returnMsg = "[{\"result\":\"false\",\"step\":\"recharge\",\"errorcode\":\"" + Result + "\",\"info\":\"账户充值失败\"}]";
                //returnMsg = "<?xml version=\"1.0\" encoding=\"UTF-8\"><Result ReturnCode='" + Result + "' Msg='账户充值失败'   />";
                rechargeResult.ReturnCode = "" + Result+"";
                rechargeResult.Msg = "账户充值失败";
                return rechargeResult;
            }

            #endregion
        }
        catch (Exception ex)
        {
            rechargeRecord_entity.ReturnDesc += ex.Message;
            throw ex;
        }
        finally
        {
            _accountRechargeRecord_dao.Insert(rechargeRecord_entity);
        }

        #endregion
        return rechargeResult;
    }