コード例 #1
0
ファイル: CardModule.cs プロジェクト: jiaozhanjing/Trace
        /// <summary>
        /// 添加进场设置
        /// </summary>
        /// <param name="_"></param>
        /// <returns></returns>
        public string GetOrderCardInfo(dynamic _)
        {
            var recdata = this.GetResquetData <OrderCardInfo>();

            try
            {
                bool flag = DataValidation(recdata.Date, recdata.Random, recdata.Staffid);
                if (!flag)
                {
                    return(this.WriteValidationLog("CardModule", recdata.Mac));
                }
                //判断令牌是否过期
                bool flag2 = TokenValidation(recdata.SessionId, recdata.Token);
                if (!flag2)
                {
                    return(this.SendTokenValidation());
                }

                PDACardInfoBusiness bl   = new PDACardInfoBusiness();
                OrderCardInfo       ires = bl.GetOrderCardInfo(recdata.data);
                if (ires != null)
                {
                    return(this.SendData <OrderCardInfo>(ires, "获取订单开证信息成功!", ResponseType.Success));
                }
                else
                {
                    return(this.WriteExceptionLog("CardModule", recdata.data.userName, recdata.Mac, "获取订单开证信息异常!" + Json.ToJson(recdata), "获取订单开证信息异常!"));
                }
            }
            catch (Exception ex)
            {
                return(this.WriteExceptionLog("CardModule", recdata.data.userName, recdata.Mac, "获取订单开证信息异常:" + Json.ToJson(recdata) + "[异常信息:" + ex.Message + "]", "获取订单开证信息异常:" + ex.Message));
            }
        }
コード例 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderInfo"></param>
        public static void DoAsynchronousNotify(OrderCardInfo orderInfo)
        {
            if (orderInfo == null || orderInfo.status == 1)
            {
                return;
            }

            if (orderInfo.ismulticard == 0)
            {
                string notifyUrl = Utility.GetCardNotifyUrl(orderInfo);

                if (!string.IsNullOrEmpty(notifyUrl))
                {
                    Common.AsynchronousNotify(2, orderInfo, notifyUrl);
                }
            }
            else
            {
                viviapi.Model.Order.Card.OrderCardTotal orderTotal =
                    OrderCardTotal.Instance.GetModelByOrderId(orderInfo.Batno);

                if (orderTotal != null && orderTotal.status > 1)
                {
                    string notifyUrl = Utility.GetMultiCardNotifyUrl(orderTotal);

                    if (!string.IsNullOrEmpty(notifyUrl))
                    {
                        Common.AsynchronousNotify(4, orderTotal, notifyUrl);
                    }
                }
            }
        }
コード例 #3
0
        public static void SynchronousNotifyX(OrderCardInfo orderInfo)
        {
            if (orderInfo == null ||
                orderInfo.status == 1)
            {
                return;
            }

            if (orderInfo.ismulticard == 0)
            {
                byte exists = CardNotify.Instance.Exists(orderInfo.orderid);
                if (exists == 0 || exists == 1)
                {
                    string notifyUrl = Utility.GetCardNotifyUrl(orderInfo);
                    if (!string.IsNullOrEmpty(notifyUrl))
                    {
                        bool isOK = Process(orderInfo.version, orderInfo.orderid, notifyUrl);
                        if (isOK == false)
                        {
                            NotifyQueue.Send(orderInfo);
                        }
                    }
                }
                else if (exists == 3)
                {
                    NotifyQueue.Send(orderInfo);
                }
            }
        }
コード例 #4
0
        /// <summary>
        /// 更新订单状态
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <param name="response"></param>
        public static bool FinishForSync(OrderCardInfo orderInfo, CardOrderSupplierResponse response)
        {
            if (orderInfo == null)
            {
                return(false);
            }

            try
            {
                byte continueSubmit = 0;

                int seq = 1;

                bool processFlag = true;

                UpdateOrder(seq, orderInfo, response);

                Cache.WebCache.GetCacheService().RemoveObject(response.SysOrderNo);

                return(true);
            }
            catch (Exception exception)
            {
                ExceptionHandler.HandleException(exception);

                return(false);
            }
        }
コード例 #5
0
        /// <summary>
        ///
        /// </summary>
        private static void ProcessNotify()
        {
            TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(notifyTransactionTimeout * notifybatchSize));

            BLL.OrderCardNotify notifyBLL = new viviapi.BLL.OrderCardNotify();

            ArrayList queueOrders = new ArrayList();

            for (int j = 0; j < notifybatchSize; j++)
            {
                try
                {
                    OrderCardInfo _order = notifyBLL.ReceiveFromQueue(notifyqueueTimeout);
                    _order.notifycount = 0;

                    viviapi.Model.Order.OrderCardNotify notifyInfo = new viviapi.Model.Order.OrderCardNotify();

                    notifyInfo.orderInfo = _order;
                    Timer Tmr = new Timer(notifyBLL.NotifyCheckStatus, notifyInfo, 0, 1000);
                    notifyInfo.tmr = Tmr;
                }
                catch (Exception ex)
                {
                }
            }
        }
コード例 #6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool Notify(OrderCardInfo model)
        {
            int rowsAffected = 0;

            SqlParameter[] parameters =
            {
                new SqlParameter("@orderid",        SqlDbType.VarChar,    30),
                new SqlParameter("@againNotifyUrl", SqlDbType.NVarChar, 2000),
                new SqlParameter("@notifycount",    SqlDbType.Int,         4),
                new SqlParameter("@notifystat",     SqlDbType.TinyInt,     1),
                new SqlParameter("@notifycontext",  SqlDbType.VarChar,   200),
                new SqlParameter("@notifytime",     SqlDbType.DateTime)
            };
            parameters[0].Value = model.orderid;
            //parameters[1].Value = model.notifyurl;
            parameters[1].Value = model.againNotifyUrl;
            parameters[2].Value = model.notifycount;
            parameters[3].Value = model.notifystat;
            parameters[4].Value = model.notifycontext;
            parameters[5].Value = DateTime.Now;

            rowsAffected = DataBase.ExecuteNonQuery(System.Data.CommandType.StoredProcedure, "proc_ordercard_notify", parameters);
            if (rowsAffected > 0)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
コード例 #7
0
        /// <summary>
        /// http://www.23card.net
        /// </summary>
        private static void ProcessNotify()
        {
            TimeSpan tsTimeout = TimeSpan.FromSeconds(Convert.ToDouble(NotifyTransactionTimeout * NotifybatchSize));

            for (int j = 0; j < NotifybatchSize; j++)
            {
                try
                {
                    var apiNotify = new APINotification();

                    OrderCardInfo order = apiNotify.ReceiveFromQueue(NotifyqueueTimeout);
                    if (order != null)
                    {
                        order.notifycount = 0;
                        var notifyInfo = new OrderCardNotify {
                            orderInfo = order
                        };


                        var tmr = new Timer(apiNotify.NotifyCheckStatus, notifyInfo, 0, 1000);
                        notifyInfo.tmr = tmr;
                    }
                    else
                    {
                        break;
                    }
                }
                catch (Exception exception)
                {
                    ExceptionHandler.HandleException(exception);
                }
            }
        }
コード例 #8
0
        public override void OnLoad(HttpContext context)
        {
            var result = new OrderJsonResult {
                Success = string.Empty, paymoney = "0", errorMsg = string.Empty
            };

            try
            {
                OrderCardInfo cardInfo = Factory.Instance.GetModel(Oid);
                if (cardInfo != null)
                {
                    result.Success  = Factory.Instance.GetViewStatusName(cardInfo.status);
                    result.paymoney = Factory.Instance.GetViewSuccessAmt(cardInfo.status, cardInfo.realvalue);
                    result.errorMsg = cardInfo.msg;
                }
            }
            catch (Exception ex)
            {
                result.errorMsg = ex.Message;
            }

            string text = Newtonsoft.Json.JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);

            context.Response.ContentType = "application/json";
            context.Response.Write(text);
        }
コード例 #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public OrderCardInfo SystemHandleOrder(OrderCardInfo model)
        {
            try
            {
                OrderCardInfo result = null;

                string cacheKey = "SystemHandles" + model.orderid;

                object objModel = Cache.WebCache.GetCacheService().RetrieveObject(cacheKey);

                if (objModel == null)
                {
                    using (var ts = new TransactionScope(TransactionScopeOption.Required))
                    {
                        dal.SystemHandleOrder(model);
                        ts.Complete();
                    }

                    result = GetModelByOrderId(model.orderid);

                    Cache.WebCache.GetCacheService().AddObject(cacheKey, result, 5);
                }
                else
                {
                    result = objModel as OrderCardInfo;
                }
                return(result);
            }
            catch (Exception exception)
            {
                ExceptionHandler.HandleException(exception);
                return(null);
            }
        }
コード例 #10
0
        public void DoNotify(string orderId)
        {
            OrderCard ordercard = new OrderCard();

            OrderCardInfo orderinfo = ordercard.GetModelByOrderId(orderId);

            DoNotify(orderinfo);
        }
コード例 #11
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public void SystemHandleOrder(OrderCardInfo model)
        {
            SqlParameter[] parameters =
            {
                new SqlParameter("@orderid",      SqlDbType.VarChar,30), //订单号
                new SqlParameter("@typeid",       SqlDbType.Int),       //

                new SqlParameter("@userId",       SqlDbType.Int),       //商户编号
                new SqlParameter("@promId",       SqlDbType.Int),       //代理
                new SqlParameter("@manageId",     SqlDbType.Int),       //业务
                new SqlParameter("@status",       SqlDbType.TinyInt),   //订单状态

                new SqlParameter("@refervalue",   SqlDbType.Decimal,9), //提交金额
                //new SqlParameter("@faceValue", SqlDbType.Decimal, 9), //真实面值
                //new SqlParameter("@realvalue", SqlDbType.Decimal, 9), //结算金额


                new SqlParameter("@completetime", SqlDbType.DateTime),  //完成时间

                new SqlParameter("@opstate",      SqlDbType.NVarChar,200), //opstate
                new SqlParameter("@suppcode",     SqlDbType.NVarChar,50), //
                new SqlParameter("@suppmsg",      SqlDbType.NVarChar,200), //信息
                new SqlParameter("@userMsg",      SqlDbType.NVarChar,200), //显示给用户的信息


                new SqlParameter("@cardno",       SqlDbType.VarChar,40), //卡号
                new SqlParameter("@cardpwd",      SqlDbType.VarChar,40), //卡密

                new SqlParameter("@ismulticard",  SqlDbType.TinyInt,1),
                new SqlParameter("@batno",        SqlDbType.VarChar, 30)
            };
            parameters[0].Value = model.orderid;
            parameters[1].Value = model.typeId;

            parameters[2].Value = model.userid;
            parameters[3].Value = model.agentId;
            parameters[4].Value = model.manageId;
            parameters[5].Value = model.status;

            parameters[6].Value = model.refervalue;
            //parameters[7].Value = model.faceValue;
            //parameters[8].Value = model.realvalue;
            parameters[7].Value = DateTime.Now;

            parameters[8].Value = model.opstate;

            parameters[9].Value  = model.errtype;
            parameters[10].Value = model.msg;
            parameters[11].Value = model.userViewMsg;

            parameters[12].Value = model.cardNo;
            parameters[13].Value = model.cardPwd;

            parameters[14].Value = model.ismulticard;
            parameters[15].Value = model.Batno;

            DataBase.ExecuteNonQuery(System.Data.CommandType.StoredProcedure, "proc_ordercard_sys_settled", parameters);
        }
コード例 #12
0
        /// <summary>
        /// A method to read an order from the system
        /// </summary>
        /// <param name="orderId">Unique identifier for an order</param>
        /// <returns>All the information about the order</returns>
        public bool UpdateNotifyInfo(OrderCardInfo order)
        {
            if (order == null)
            {
                return(false);
            }

            // Return the order from the DAL
            return(dal.Notify(order));
        }
コード例 #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderId"></param>
        public static void DoAsynchronousNotify(string orderId)
        {
            if (string.IsNullOrEmpty(orderId))
            {
                return;
            }

            OrderCardInfo orderInfo = Factory.Instance.GetModelByOrderId(orderId);

            DoAsynchronousNotify(orderInfo);
        }
コード例 #14
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            var orderInfo = new OrderCardInfo();

            orderInfo = viviapi.BLL.Order.Card.Factory.Instance.GetModelByOrderId("C5764548171599543052");
            CardnotifyQueue.Send(orderInfo);

            //viviapi.Model.Order.Card.CardNotify info = new CardNotify();
            // info.orderid = DateTime.Now.Ticks.ToString();
            // info.againNotifyUrl = "http://www.baidu.com";

            //BanknotifyQueue.Send(info);
        }
コード例 #15
0
        /// <summary>
        /// 取通知地址
        /// </summary>
        /// <param name="orderinfo"></param>
        /// <returns></returns>
        public static string GetCardNotifyUrl(OrderCardInfo orderinfo)
        {
            if (orderinfo == null)
            {
                return(string.Empty);
            }

            string notifyUrl = orderinfo.notifyurl;

            if (string.IsNullOrEmpty(notifyUrl))
            {
                return(string.Empty);
            }

            var userinfo = BLL.User.Factory.GetCacheUserBaseInfo(orderinfo.userid);

            if (userinfo == null)
            {
                return(string.Empty);
            }

            string ver    = orderinfo.version;
            string apikey = userinfo.APIKey;

            if (ver == MyAPI.Utility.EnName)
            {
                notifyUrl = MyAPI.Utility.CreateNotifyUrl(orderinfo, apikey);
            }
            else if (ver == Eka.Utility.EnName)
            {
                notifyUrl = Eka.Utility.CreateNotifyUrl(orderinfo, apikey);
            }
            else if (ver == Card70.Utility.EnName)
            {
                notifyUrl = Card70.Utility.CreateNotifyUrl(orderinfo, apikey);
            }
            else if (ver == YeePay.AnnulCard.EnName)
            {
                notifyUrl = YeePay.AnnulCard.CreateNotifyUrl(orderinfo, apikey);
            }
            else if (ver == YeePay.ChargeCardDirect.EnName)
            {
                notifyUrl = YeePay.ChargeCardDirect.CreateNotifyUrl(orderinfo, apikey);
            }
            return(notifyUrl);
        }
コード例 #16
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="oclass"></param>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string GetNotifyUrl(int oclass, object obj)
        {
            string notifyUrl = string.Empty;

            if (oclass == 1)//网银
            {
                OrderBankInfo orderInfo = obj as OrderBankInfo;
                if (orderInfo == null)
                {
                    return(string.Empty);
                }

                OrderBank bll = new OrderBank();
                notifyUrl = "";   //bll.GetCallBackUrl(orderInfo);
            }
            else if (oclass == 2) //点卡
            {
                OrderCardInfo orderInfo = obj as OrderCardInfo;
                if (orderInfo == null)
                {
                    return(string.Empty);
                }

                OrderCard bll = new OrderCard();
                //notifyUrl = bll.GetCallBackUrl(orderInfo);
            }
            else if (oclass == 3)//短信及声讯
            {
                OrderSmsInfo orderInfo = obj as OrderSmsInfo;
                if (orderInfo == null)
                {
                    return(string.Empty);
                }
                OrderSms bll = new OrderSms();
                notifyUrl = bll.GetCallBackUrl(orderInfo);
            }
            return(notifyUrl);
        }
コード例 #17
0
ファイル: CardModule.cs プロジェクト: jiaozhanjing/Trace
        /// <summary>
        /// 获取进场动物检疫证号
        /// </summary>
        /// <param name="_"></param>
        /// <returns></returns>
        public string DeleteCardInfo(dynamic _)
        {
            var recdata = this.GetResquetData <CardInfoListBase>();

            try
            {
                bool flag = DataValidation(recdata.Date, recdata.Random, recdata.Staffid);
                if (!flag)
                {
                    return(this.WriteValidationLog("CardModule", recdata.Mac));
                }
                //判断令牌是否过期
                bool flag2 = TokenValidation(recdata.SessionId, recdata.Token);
                if (!flag2)
                {
                    return(this.SendTokenValidation());
                }

                PDACardInfoBusiness bl = new PDACardInfoBusiness();

                OrderCardInfo EnterInfos = bl.DeleteCardInfo(recdata.data.rqDeleteCardInfos);

                // WriteInfoLog("CardModule", recdata.data.userName, recdata.Mac, "获取动物检疫证号成功!" + Json.ToJson(recdata));
                if (EnterInfos != null)
                {
                    return(this.SendData <OrderCardInfo>(EnterInfos, "删除成功!", ResponseType.Success));
                }
                else
                {
                    return(this.WriteExceptionLog("CardModule", "删除分销凭证", recdata.Mac, "删除分销凭证异常!" + Json.ToJson(recdata), "删除分销凭证异常!"));
                }
                // return this.SendData("删除分销凭证成功!", ResponseType.Success);
            }
            catch (Exception ex)
            {
                return(this.WriteExceptionLog("CardModule", "删除分销凭证", recdata.Mac, "删除分销凭证异常:" + Json.ToJson(recdata) + "[异常信息:" + ex.Message + "]", "删除分销凭证异常:" + ex.Message));
            }
        }
コード例 #18
0
        /// <summary>
        ///     增加一条数据
        /// </summary>
        public int Insert(OrderCardInfo orderInfo)
        {
            int rowsAffected;

            SqlParameter[] parameters =
            {
                new SqlParameter("@userid",        SqlDbType.Int,      4),
                new SqlParameter("@cardtype",      SqlDbType.Int,      4),
                new SqlParameter("@cardno",        SqlDbType.VarChar, 40),
                new SqlParameter("@cardpwd",       SqlDbType.VarChar, 40),
                new SqlParameter("@orderid",       SqlDbType.VarChar, 30),
                new SqlParameter("@withhold_type", SqlDbType.TinyInt,  1),
                new SqlParameter("@method",        SqlDbType.TinyInt,  1),
                new SqlParameter("@facevalue",     SqlDbType.Decimal,  9),
                new SqlParameter("@refervalue",    SqlDbType.Decimal,  9),
                new SqlParameter("@settle",        SqlDbType.Decimal,  9),
                new SqlParameter("@withhold",      SqlDbType.Decimal,  9),
                new SqlParameter("@supplierid",    SqlDbType.Int,      4),
                new SqlParameter("@supprate",      SqlDbType.Decimal, 9)
            };
            parameters[0].Value  = orderInfo.userid;
            parameters[1].Value  = orderInfo.typeId;
            parameters[2].Value  = orderInfo.cardNo;
            parameters[3].Value  = orderInfo.cardPwd;
            parameters[4].Value  = orderInfo.orderid;
            parameters[5].Value  = 3;
            parameters[6].Value  = 1;
            parameters[7].Value  = orderInfo.faceValue;
            parameters[8].Value  = orderInfo.refervalue;
            parameters[9].Value  = 0;
            parameters[10].Value = orderInfo.faceValue;
            parameters[11].Value = orderInfo.supplierId;
            parameters[12].Value = orderInfo.supplierRate;

            DbHelperSQL.RunProcedure("proc_cardwithholds_insert", parameters, out rowsAffected);
            return((int)parameters[0].Value);
        }
コード例 #19
0
 public void DoNotify(OrderCardInfo order)
 {
     BLL.OrderNotifyBase.AsynchronousNotify(2, order);
 }
コード例 #20
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderinfo"></param>
        /// <param name="apiKey"></param>
        /// <returns></returns>
        public static string CreateNotifyUrl(OrderCardInfo orderinfo, string apiKey)
        {
            if (orderinfo == null)
            {
                return(string.Empty);
            }

            string notifyUrl = orderinfo.notifyurl;

            if (string.IsNullOrEmpty(notifyUrl))
            {
                return(string.Empty);
            }

            decimal facevalue = 0M;

            if (orderinfo.realvalue.HasValue)
            {
                facevalue = decimal.Round(orderinfo.realvalue.Value, 0);
            }

            string systime = "";

            if (orderinfo.completetime.HasValue)
            {
                systime = orderinfo.completetime.Value.ToString("yyyy/MM/dd HH:mm:ss");
            }

            string opstate = "";

            if (orderinfo.withhold_type == 2)
            {
                opstate = "-4";
                orderinfo.userViewMsg = "余额不足";
            }
            else if (orderinfo.status == 2)
            {
                opstate = "0";
                orderinfo.userViewMsg = "支付成功";
            }
            else
            {
                opstate = ConvertErrorCode(
                    orderinfo.method
                    , orderinfo.supplierId
                    , orderinfo.errtype
                    , orderinfo.refervalue
                    , facevalue);
            }

            string plain = string.Format("orderid={0}&opstate={1}&ovalue={2}{3}"
                                         , orderinfo.userorder
                                         , opstate
                                         , facevalue
                                         , apiKey);

            string sign = Cryptography.MD5(plain);

            var parms = new StringBuilder();

            parms.AppendFormat("orderid={0}", HttpUtility.UrlEncode(orderinfo.userorder));


            if (orderinfo.status == 2)
            {
                if (facevalue >= orderinfo.refervalue)
                {
                    opstate = "0";
                }
                else
                {
                    opstate = "-3";
                }
            }
            else
            {
                opstate = "-1";
            }
            //if (orderinfo.method == 2)
            //{
            //    opstate = GetReturnOpstate(orderinfo.errtype);
            //}

            parms.AppendFormat("&opstate={0}", HttpUtility.UrlEncode(opstate));
            parms.AppendFormat("&ovalue={0}", HttpUtility.UrlEncode(facevalue.ToString(CultureInfo.InvariantCulture)));
            parms.AppendFormat("&ekaorderid={0}", HttpUtility.UrlEncode(orderinfo.orderid));
            parms.AppendFormat("&ekatime={0}", HttpUtility.UrlEncode(systime));

            parms.AppendFormat("&attach={0}", UrlEncode(orderinfo.attach));
            parms.AppendFormat("&msg={0}", UrlEncode(orderinfo.userViewMsg));
            parms.AppendFormat("&sign={0}", UrlEncode(sign));

            return(notifyUrl = notifyUrl + "?" + parms.ToString());
        }
コード例 #21
0
        const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout

        #region UpdatetoDB
        /// <summary>
        /// 将结果返回到数据库
        /// </summary>
        /// <param name="oclass"></param>
        /// <param name="obj"></param>
        /// <param name="agurl"></param>
        /// <param name="times"></param>
        /// <param name="callbacktext"></param>
        private static void UpdatetoDB(int oclass, object obj, string agurl, int times, string callbacktext, bool success, string errcode)
        {
            if (oclass == 1)
            {
                OrderBankInfo orderInfo = obj as OrderBankInfo;
                if (orderInfo != null)
                {
                    OrderBank dal = new OrderBank();

                    //string SuccessFlag = SystemApiHelper.Successflag(orderInfo.version);

                    bool isnotifysucc = SystemApiHelper.CheckCallBackIsSuccess(orderInfo.version, callbacktext);

                    orderInfo.notifystat     = isnotifysucc ? 2 : 4;
                    orderInfo.againNotifyUrl = agurl;
                    orderInfo.notifycontext  = callbacktext;
                    orderInfo.notifycount    = times;
                    orderInfo.notifytime     = DateTime.Now;
                    dal.UpdateNotifyInfo(orderInfo);

                    if (orderInfo.notifystat != 2)
                    {
                        //没有成功将发送到异常队列 多次通知
                        banknotifyQueue.Send(orderInfo);
                    }
                }
            }
            else if (oclass == 2)
            {
                OrderCardInfo orderInfo = obj as OrderCardInfo;
                if (orderInfo != null)
                {
                    OrderCard dal = new OrderCard();

                    bool isnotifysucc = SystemApiHelper.CheckCallBackIsSuccess(orderInfo.version, callbacktext);
                    orderInfo.notifystat     = isnotifysucc ? 2 : 4;
                    orderInfo.againNotifyUrl = agurl;
                    orderInfo.notifycontext  = callbacktext;
                    orderInfo.notifycount    = times;
                    orderInfo.notifytime     = DateTime.Now;

                    dal.UpdateNotifyInfo(orderInfo);

                    if (orderInfo.notifystat != 2)
                    {
                        //没有成功将发送到异常队列 多次通知
                        cardnotifyQueue.Send(orderInfo);
                    }
                }
            }
            else if (oclass == 3)
            {
                OrderSmsInfo orderInfo = obj as OrderSmsInfo;

                if (orderInfo != null)
                {
                    OrderSms dal = new OrderSms();

                    orderInfo.notifystat     = success ? 2:4;
                    orderInfo.issucc         = success;
                    orderInfo.errcode        = errcode;
                    orderInfo.againNotifyUrl = agurl;
                    orderInfo.notifycontext  = callbacktext;
                    orderInfo.notifycount    = times;
                    dal.UpdateNotifyInfo(orderInfo);

                    if (orderInfo.notifystat != 2)
                    {
                        //没有成功将发送到异常队列 多次通知
                        smsnotifyQueue.Send(orderInfo);
                    }
                }
            }
        }
コード例 #22
0
 /// <summary>
 /// 发送完成的订单到队列
 /// </summary>
 /// <param name="orderMessage">All information for an order</param>
 public void Complete(OrderCardInfo orderMessage)
 {
     // This method does not involve in distributed transaction and optimizes performance using Single type
     base.transactionType = MessageQueueTransactionType.Single;
     base.Send(orderMessage);
 }
コード例 #23
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="cardNum"></param>
        /// <param name="batno"></param>
        /// <param name="orderid"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        OrderCardInfo InitOrder(int cardNum, string batno, string orderid, ChargeCardDirectDetails info)
        {
            try
            {
                var order = new OrderCardInfo
                {
                    ordertype     = 1,
                    orderid       = orderid,
                    Batno         = batno,
                    userid        = info.UserId,
                    userorder     = info.UserOrderNo,
                    typeId        = info.TypeId,
                    cardType      = info.CardType,
                    cardNo        = info.CardNo,
                    cardPwd       = info.CardPwd,
                    paymodeId     = info.ChanelNo,
                    refervalue    = info.Refervalue,
                    faceValue     = 0M,
                    attach        = "",
                    referUrl      = "",
                    clientip      = ServerVariables.TrueIP,
                    addtime       = DateTime.Now,
                    completetime  = DateTime.Now,
                    notifycontext = string.Empty,
                    notifycount   = 0,
                    notifystat    = 0,
                    notifyurl     = "",
                    payRate       = 0M,
                    supplierId    = info.SupplierId,
                    supplierOrder = string.Empty,
                    server        = viviapi.SysConfig.RuntimeSetting.ServerId,
                    manageId      = info.ManageId,
                    cardnum       = cardNum,
                    resultcode    = "",
                    ismulticard   = 1,
                    status        = 1,
                    ovalue        = string.Empty,
                    opstate       = "",
                    msg           = info.Msg,
                    userViewMsg   = info.Msg,
                    errtype       = "",
                    Desc          = info.Msg,
                    version       = version,
                    withhold_type = 0,
                    makeup        = (byte)(info.ProcessMode == 2 ? 1 : 0)
                };

                if (cardNum == 1)
                {
                    order.attach = DirectCardInfo.pa_MP;

                    order.notifyurl   = DirectCardInfo.p8_Url;
                    order.ismulticard = 0;

                    order.cus_field1 = DirectCardInfo.p4_verifyAmt;
                    order.cus_field2 = DirectCardInfo.pd_FrpId;
                    order.cus_field3 = DirectCardInfo.pa7_cardAmt;
                }

                if (order.manageId <= 0)
                {
                    order.agentId = viviapi.BLL.User.Factory.GetPromID(info.UserId);
                }

                if (info.ProcessMode == 1)
                {
                    viviapi.Cache.WebCache.GetCacheService().AddObject(order.orderid, order, ExpiresTime);
                }

                OrderBll.Insert(order);

                return(order);
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
                return(null);
            }
        }
コード例 #24
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderid"></param>
        /// <param name="info"></param>
        /// <returns></returns>
        OrderCardInfo InitOrder(string orderid, CardInfo info)
        {
            try
            {
                var order = new OrderCardInfo
                {
                    ordertype  = 1,
                    orderid    = orderid,
                    userid     = info.UserId,
                    userorder  = info.orderid,
                    typeId     = info.TypeId,
                    cardType   = info.CardType,
                    cardNo     = info.CardNo,
                    cardPwd    = info.CardPwd,
                    paymodeId  = info.ChanelNo,
                    refervalue = info.OrderAmt,
                    faceValue  = 0M,
                    attach     = info.attach,
                    referUrl   =
                        HttpContext.Current.Request.UrlReferrer != null
                            ? HttpContext.Current.Request.UrlReferrer.ToString()
                            : string.Empty,
                    clientip      = ServerVariables.TrueIP,
                    addtime       = DateTime.Now,
                    completetime  = DateTime.Now,
                    notifycontext = string.Empty,
                    notifycount   = 0,
                    notifystat    = 0,
                    notifyurl     = info.callbackurl,
                    payRate       = 0M,
                    supplierId    = info.SupplierId,
                    supplierOrder = string.Empty,
                    server        = RuntimeSetting.ServerId,
                    manageId      = info.ManageId,
                    cardnum       = 1,
                    resultcode    = "",
                    ismulticard   = 0,
                    status        = 1,
                    ovalue        = string.Empty,
                    opstate       = "",
                    msg           = info.Msg,
                    userViewMsg   = info.Msg,
                    errtype       = "",
                    Desc          = info.Msg,
                    version       = info.Version,
                    withhold_type = 0,
                    makeup        = (byte)(info.ProcessMode == 2 ? 1 : 0)
                };

                if (order.manageId <= 0)
                {
                    order.agentId = viviapi.BLL.User.Factory.GetPromID(info.UserId);
                }

                if (info.ProcessMode == 1)
                {
                    viviapi.Cache.WebCache.GetCacheService().AddObject(order.orderid, order, ExpiresTime);
                }

                OrderBll.Insert(order);

                return(order);
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
                return(null);
            }
        }
コード例 #25
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderinfo"></param>
        /// <param name="apiKey"></param>
        /// <returns></returns>
        public static string CreateNotifyUrl(OrderCardInfo orderinfo, string apiKey)
        {
            if (orderinfo == null)
            {
                return(string.Empty);
            }

            string notifyUrl = orderinfo.notifyurl;

            if (string.IsNullOrEmpty(notifyUrl))
            {
                return(string.Empty);
            }

            decimal facevalue = 0M;

            if (orderinfo.realvalue.HasValue)
            {
                facevalue = decimal.Round(orderinfo.realvalue.Value, 0);
            }


            bool   verifyAmt = orderinfo.cus_field4 == "true" ? true : false;
            string r0_Cmd    = "ChargeCardDirect";

            string r1Code = "0";

            if (orderinfo.status == 2)
            {
                r1Code = "1";
            }

            string p1MerId = orderinfo.userid.ToString(CultureInfo.InvariantCulture);
            string p2Order = orderinfo.userorder;
            string p3Amt   = facevalue.ToString(CultureInfo.InvariantCulture);

            string p4FrpId  = orderinfo.cus_field2;
            string p5CardNo = orderinfo.cardNo;                                        //多张卡以半角逗号分隔

            string p6ConfirmAmount = facevalue.ToString(CultureInfo.InvariantCulture); //卡支付的金额组
            string p7RealAmount    = orderinfo.cus_field3;                             //卡原有的金额组

            string p8CardStatus = "1006";                                              //p8_cardStatus//状态组

            if (orderinfo.status == 2)
            {
                p8CardStatus = "0";
            }

            if (verifyAmt && p8CardStatus == "0")
            {
                if (orderinfo.refervalue > facevalue)
                {
                    p8CardStatus = "1";
                    r1Code       = "2";
                    p3Amt        = "0";
                }
                else if (orderinfo.refervalue <= facevalue)
                {
                    p3Amt = orderinfo.refervalue.ToString("f2");
                }
            }


            string p9_MP         = orderinfo.attach;
            string pb_BalanceAmt = "0M";
            string pc_BalanceAct = "";

            string sbOld = "";

            sbOld += r0_Cmd;
            sbOld += r1Code;
            sbOld += p1MerId;
            sbOld += p2Order;
            sbOld += p3Amt;
            sbOld += p4FrpId;
            sbOld += p5CardNo;
            sbOld += p6ConfirmAmount;
            sbOld += p7RealAmount;
            sbOld += p8CardStatus;
            sbOld += p9_MP;
            sbOld += pb_BalanceAmt;
            sbOld += pc_BalanceAct;

            string nhmac = Digest.HmacSign(sbOld, apiKey);

            var parms = new StringBuilder();

            parms.AppendFormat("r0_Cmd={0}", Common.UrlEncode(r0_Cmd));
            parms.AppendFormat("&r1_Code={0}", Common.UrlEncode(r1Code));
            parms.AppendFormat("&p1_MerId={0}", Common.UrlEncode(p1MerId));
            parms.AppendFormat("&p2_Order={0}", Common.UrlEncode(p2Order));
            parms.AppendFormat("&p3_Amt={0}", Common.UrlEncode(p3Amt));
            parms.AppendFormat("&p4_FrpId={0}", Common.UrlEncode(p4FrpId));
            parms.AppendFormat("&p5_CardNo={0}", Common.UrlEncode(p5CardNo));
            parms.AppendFormat("&p6_confirmAmount={0}", Common.UrlEncode(p6ConfirmAmount));
            parms.AppendFormat("&p7_realAmount={0}", Common.UrlEncode(p7RealAmount));
            parms.AppendFormat("&p8_cardStatus={0}", Common.UrlEncode(p8CardStatus));
            parms.AppendFormat("&p9_MP={0}", Common.UrlEncode(p9_MP));
            parms.AppendFormat("&pb_BalanceAmt={0}", Common.UrlEncode(pb_BalanceAmt));
            parms.AppendFormat("&pc_BalanceAct={0}", Common.UrlEncode(pc_BalanceAct));
            parms.AppendFormat("&hmac={0}", Common.UrlEncode(nhmac));

            if (notifyUrl.IndexOf("?", System.StringComparison.Ordinal) > 0)
            {
                notifyUrl = notifyUrl + "&" + parms.ToString();
            }
            else
            {
                notifyUrl = notifyUrl + "?" + parms.ToString();
            }

            return(notifyUrl);
        }
コード例 #26
0
        /// <summary>
        /// 补发
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public static string SynchronousNotify(string orderId)
        {
            if (string.IsNullOrEmpty(orderId))
            {
                return(string.Empty);
            }

            OrderCardInfo orderInfo = Factory.Instance.GetModelByOrderId(orderId);

            if (orderInfo == null)
            {
                return(string.Empty);
            }

            string successFlag = Utility.Successflag(orderInfo.version);

            string notifyUrl = Utility.GetCardNotifyUrl(orderInfo);

            string callback   = string.Empty;
            string status     = string.Empty;
            string message    = string.Empty;
            string statusCode = string.Empty;
            string statusDesc = string.Empty;
            bool   isOk       = false;

            int notifystat = 4;

            try
            {
                if (!string.IsNullOrEmpty(notifyUrl))
                {
                    callback = viviLib.Web.WebClientHelper.GetString(notifyUrl
                                                                     , string.Empty
                                                                     , "GET"
                                                                     , System.Text.Encoding.GetEncoding("GB2312")
                                                                     , 5 * 1000);//5s

                    isOk = Utility.CheckCallBackIsSuccess(orderInfo.version, callback);

                    if (isOk)
                    {
                        notifystat = 2;
                    }
                }
            }
            catch (WebException e)
            {
                message = e.Message;
                status  = e.Status.ToString();

                if (e.Status == WebExceptionStatus.ProtocolError)
                {
                    statusCode = ((HttpWebResponse)e.Response).StatusCode.ToString();
                    statusDesc = ((HttpWebResponse)e.Response).StatusDescription;
                }
            }
            catch (Exception ex)
            {
                ExceptionHandler.HandleException(ex);
            }

            if (orderInfo.notifystat != 2)
            {
                var notify = new Model.Order.Card.CardNotify()
                {
                    orderid           = orderInfo.orderid,
                    status            = status,
                    message           = message,
                    httpStatusCode    = statusCode,
                    StatusDescription = statusDesc,
                    againNotifyUrl    = notifyUrl,
                    notifystat        = notifystat,
                    notifycontext     = callback,
                    notifytime        = DateTime.Now
                };

                BLL.Order.Card.CardNotify.Instance.Insert(notify);
            }

            return(callback);
        }
コード例 #27
0
 /// <summary>
 /// This method serializes the order object and send it to the queue for asynchronous processing
 /// </summary>
 /// <param name="order">All information about the order</param>
 public void Complete(OrderCardInfo order)
 {
     asynchOrder.Complete(order);
 }
コード例 #28
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderinfo"></param>
        /// <param name="apikey"></param>
        /// <returns></returns>
        public static string CreateNotifyUrl(OrderCardInfo orderinfo, string apikey)
        {
            string notifyUrl = string.Empty;

            if (orderinfo == null || string.IsNullOrEmpty(apikey))
            {
                return(notifyUrl);
            }
            notifyUrl = orderinfo.notifyurl;

            decimal facevalue = 0M;

            if (orderinfo.realvalue.HasValue)
            {
                facevalue = decimal.Round(orderinfo.realvalue.Value, 0);
            }

            string opstate = "";

            if (orderinfo.withhold_type == 2)
            {
                opstate = "18";
                orderinfo.userViewMsg = "余额不足";
            }
            else if (orderinfo.status == 2)
            {
                opstate = "0";
                orderinfo.userViewMsg = "支付成功";
            }
            else
            {
                opstate = ConvertErrorCode(
                    orderinfo.method
                    , orderinfo.supplierId
                    , orderinfo.errtype
                    , orderinfo.refervalue
                    , facevalue);
            }

            string plain = string.Format("orderid={0}&opstate={1}&ovalue={2}{3}"
                                         , orderinfo.userorder
                                         , opstate
                                         , facevalue
                                         , apikey);

            string sign = Cryptography.MD5(plain);

            var parms = new StringBuilder();

            parms.AppendFormat("orderid={0}", UrlEncode(orderinfo.userorder));
            parms.AppendFormat("&opstate={0}", UrlEncode(opstate));
            parms.AppendFormat("&ovalue={0}", UrlEncode(facevalue.ToString()));
            parms.AppendFormat("&sysorderid={0}", UrlEncode(orderinfo.orderid));
            parms.AppendFormat("&systime={0}", UrlEncode(orderinfo.completetime.Value.ToString("yyyy/MM/dd HH:mm:ss")));
            parms.AppendFormat("&attach={0}", UrlEncode(orderinfo.attach));
            parms.AppendFormat("&msg={0}", UrlEncode(orderinfo.userViewMsg));
            parms.AppendFormat("&sign={0}", UrlEncode(sign));

            notifyUrl = notifyUrl + "?" + parms.ToString();

            return(notifyUrl);
        }
コード例 #29
0
 /// <summary>
 /// This method serializes the order object and send it to the queue for asynchronous processing
 /// </summary>
 /// <param name="order">All information about the order</param>
 public void Insert(OrderCardInfo order)
 {
     asynchOrder.Send(order);
 }
コード例 #30
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="orderinfo"></param>
        /// <param name="apiKey"></param>
        /// <returns></returns>
        public static string CreateNotifyUrl(OrderCardInfo orderinfo, string apiKey)
        {
            if (orderinfo == null)
            {
                return(string.Empty);
            }

            string notifyUrl = orderinfo.notifyurl;

            if (string.IsNullOrEmpty(notifyUrl))
            {
                return(notifyUrl);
            }

            string returncode;

            decimal facevalue  = 0M;
            string  cardstatus = "0";

            if (orderinfo.status == 2)
            {
                cardstatus = "1";
                returncode = "1";

                if (orderinfo.realvalue.HasValue)
                {
                    facevalue = decimal.Round(orderinfo.realvalue.Value, 0);
                }
            }
            else
            {
                returncode = "11";
            }

            if (orderinfo.method == 2)
            {
                returncode = Get70CardReturnCode(orderinfo.errtype);
                if (returncode == "1")
                {
                    cardstatus = "1";
                }
            }

            string refervalue = decimal.Round(orderinfo.refervalue, 0).ToString(CultureInfo.InvariantCulture);

            string typeid    = orderinfo.cus_field1;
            string productid = orderinfo.cus_field2;

            string plain = string.Format("returncode={0}&userid={1}&orderid={2}&typeid={3}&productid={4}&cardno={5}&cardpwd={6}&money={7}&realmoney={8}&cardstatus={9}&keyvalue={10}"
                                         , returncode
                                         , orderinfo.userid
                                         , orderinfo.userorder
                                         , typeid
                                         , productid
                                         , orderinfo.cardNo
                                         , orderinfo.cardPwd
                                         , refervalue
                                         , facevalue
                                         , cardstatus
                                         , apiKey);
            string sign = Cryptography.MD5(plain).ToLower();

            var parms = new StringBuilder();

            parms.AppendFormat("returncode={0}", UrlEncode(returncode));
            parms.AppendFormat("&userid={0}", UrlEncode(orderinfo.userid.ToString(CultureInfo.InvariantCulture)));
            parms.AppendFormat("&orderid={0}", UrlEncode(orderinfo.userorder));
            parms.AppendFormat("&typeid={0}", UrlEncode(typeid));
            parms.AppendFormat("&productid={0}", UrlEncode(productid));
            parms.AppendFormat("&cardno={0}", UrlEncode(orderinfo.cardNo));
            parms.AppendFormat("&cardpwd={0}", UrlEncode(orderinfo.cardPwd));
            parms.AppendFormat("&money={0}", UrlEncode(refervalue));
            parms.AppendFormat("&realmoney={0}", UrlEncode(facevalue.ToString(CultureInfo.InvariantCulture)));
            parms.AppendFormat("&cardstatus={0}", UrlEncode(cardstatus.ToString(CultureInfo.InvariantCulture)));
            parms.AppendFormat("&sign={0}", UrlEncode(sign));
            parms.AppendFormat("&ext={0}", UrlEncode(orderinfo.attach));
            if (returncode == "0")
            {
                parms.AppendFormat("&errtype={0}", string.Empty);
            }
            else
            {
                parms.AppendFormat("&errtype={0}", Get70Errtype(orderinfo.method, orderinfo.supplierId, orderinfo.errtype));
            }

            if (notifyUrl.IndexOf("?", System.StringComparison.Ordinal) > 0)
            {
                notifyUrl = notifyUrl + "&" + parms.ToString();
            }
            else
            {
                notifyUrl = notifyUrl + "?" + parms.ToString();
            }
            return(notifyUrl);
        }