/// <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)); } }
/// <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); } } } }
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); } } }
/// <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); } }
/// <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) { } } }
/// <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); } }
/// <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); } } }
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); }
/// <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); } }
public void DoNotify(string orderId) { OrderCard ordercard = new OrderCard(); OrderCardInfo orderinfo = ordercard.GetModelByOrderId(orderId); DoNotify(orderinfo); }
/// <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); }
/// <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)); }
/// <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); }
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); }
/// <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); }
/// <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); }
/// <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)); } }
/// <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); }
public void DoNotify(OrderCardInfo order) { BLL.OrderNotifyBase.AsynchronousNotify(2, order); }
/// <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()); }
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); } } } }
/// <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); }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }