public override string DoOrder(CUtility.OrderType type, decimal?cost, decimal amount, ref string orderId, bool marketOrder) { //throw new NotImplementedException(); return(""); /* * potremmo evitare di fare ordini se non vengono smazzati gli eventuali precedenti */ IMtGoxExchange mtGoxExchange = new MtGoxExchange(); mtGoxExchange.APIKey = Api; mtGoxExchange.APISecret = Secret; OrderType ordertype = type == CUtility.OrderType.Buy ? OrderType.Bid : OrderType.Ask; OrderCreateResponse response = mtGoxExchange.CreateOrder(currency, ordertype, (double)amount, null); if (response.Result == ResponseResult.Success) { orderId = response.OID.ToString(); System.Console.WriteLine("Order success"); return(response.OID.ToString()); } else { orderId = ""; System.Console.WriteLine("Order failed"); return(""); } }
public OrderCreateResponse Create(OrderCreateRequest request) { var response = new OrderCreateResponse(); _facade.Create(request.Order); return(response); }
/// <summary> /// 下单验证接口 /// </summary> /// <param name="request"></param> /// <param name="business"></param> /// <returns></returns> private PageResult VerifyOrder(OrderCreateRequest request, Tbl_OTABusiness business) { var orderInfo = request.Body.OrderInfo; OrderCreateResponse result = new OrderCreateResponse { Head = HeadResult.V1, Body = new OrderCreateInfo { Item = new List <OrderCreateItem>() } }; var validResult = _orderService.ValidDataForOrderVerifyRequest(request); if (!validResult.Status) { result.Head.Code = validResult.Code; result.Head.Describe = validResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } List <int> productIds = orderInfo.TicketList.Select(a => a.ProductId).ToList(); var ticketIds = _otaTicketRelationService.GetTicketIds(business.Id, productIds); var tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime()); var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets); if (!validDataResult.Status) { result.Head.Code = validDataResult.Code; result.Head.Describe = validDataResult.Message; result.Body.Item.Add(new OrderCreateItem { ProductId = request.Body.OrderInfo.TicketList[0].ProductId.ToString(), useDate = request.Body.OrderInfo.VisitDate, quantity = 0 }); return(PageDataResult.Data(result, business.Saltcode.ToString())); } result.Head.Code = "000000"; result.Head.Describe = "成功"; result.Body.OrderStatus = "OREDER_SUCCESS"; foreach (var row in tbl_Tickets) { result.Body.Item.Add(new OrderCreateItem { ProductId = row.TicketId.ToString(), useDate = request.Body.OrderInfo.VisitDate, quantity = 500000 }); } return(PageDataResult.Data(result, business.Saltcode.ToString())); }
//编辑日志 public string EditMTlog_Order(OrderCreateResponse response, Meituan_reqlog mlog) { string json = JsonConvert.SerializeObject(response); #region 把处理结果录入数据库 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); #endregion return(json); }
/// <summary>Call the POS for Order method</summary> /// <param name="request">The request</param> public OrderCreatePOSResponse OrderTransaction(OrderCreateRequest request) { OrderCreatePOSResponse response = new OrderCreatePOSResponse(); HttpStatusCode httpStatusCode = response.HttpStatusCode; Order order = response.OrderCreateResponse.Order; string responseStr = string.Empty; RestCalls restCalls = new RestCalls(); //TODO order time is invalid from test need to check if the kiosk //does the same thing DateTime orderTime = DateTime.Now; string orderTimeStr = orderTime.ToString("yyMMddHHmmss"); request.DOTOrder.OrderTime = orderTimeStr; string requestStr = JsonConvert.SerializeObject(request.DOTOrder); //POST the JSON to the Server and get the response - load the url path LoadAPIUrls(); //responseStr = restCalls.PostAsyncRequest(orderUrl, requestOrderStr); //call the APIs in order //Checkbasket responseStr = restCalls.PostRestSharpRequest(); //Deserialize the string to an Object OrderCreateResponse jsonOrder = JsonConvert.DeserializeObject <OrderCreateResponse>(responseStr); //populate Order with the result from the POS response.OrderCreateResponse = jsonOrder; if (httpStatusCode == HttpStatusCode.Created) { Log.Info($"HTTP Status Code Created:{httpStatusCode}"); } else { Log.Error($"HTTP Status Code:{httpStatusCode}"); } return(response); }
public ReturnResult SimulationMTGetDeal(string url, OrderCreateRequestBody body) { ReturnResult result = new ReturnResult { IsSuccess = false, }; try { OrderCreateRequest requestData = new OrderCreateRequest { partnerId = agentinfo.mt_partnerId.ConvertTo <int>(0), body = body }; var responseStr = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).DoRequest(url, JsonConvert.SerializeObject(requestData)); if (string.IsNullOrEmpty(responseStr)) { result.Message = "返回数据为空"; } else { OrderCreateResponse responseBody = (OrderCreateResponse)JsonConvert.DeserializeObject(responseStr, typeof(OrderCreateResponse)); if (responseBody.code == 200) { result.IsSuccess = true; result.Message = JsonConvert.SerializeObject(responseBody); } else { result.Message = responseBody.describe; } } } catch (Exception ex) { result.Message = "异常" + ex.Message; } return(result); }
/// <summary> /// 创建订单 /// </summary> /// <param name="condition"></param> /// <returns></returns> public OrderCreateResponse OrderCreate(OrderCreateCondition condition) { OrderCreateResponse response = new OrderCreateResponse(); try { var result = HotelApiAccess.Query <OrderCreateCondition, OrderCreateResponse>(condition, "hotel.order.create"); if (result.Code == "0") { response = result.Result; } else { throw new Exception("接口请求失败:" + result.Code); } } catch (Exception ex) { throw ex; } return(response); }
/// <summary> /// 创建订单并支付 /// </summary> /// <param name="orderInfo"></param> private PageResult PayOrder(OrderCreateRequest request, Tbl_OTABusiness business) { OrderInfo orderInfo = request.Body.OrderInfo; OrderCreateResponse result = new OrderCreateResponse { Head = HeadResult.V1 }; var validResult = _orderService.ValidDataForOrderCreateRequest(request, result); if (!validResult.Status) { result.Head.Code = validResult.Code; result.Head.Describe = validResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } List <int> productIds = orderInfo.TicketList.Select(a => a.ProductId).ToList(); var ticketIds = _otaTicketRelationService.GetTicketIds(business.Id, productIds); var tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime()); var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets); if (!validDataResult.Status) { result.Head.Code = validDataResult.Code; result.Head.Describe = validDataResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } var tbl_Order = _orderService.AddOrder(orderInfo, business); var tbl_OrderDetails = _orderDetailService.AddOrderDetail(orderInfo, tbl_Order); _orderService.UpdateOrder(tbl_Order, tbl_OrderDetails); var tbl_Ticket_Testing = _ticketTestingService.addTicketTestings(tbl_Order, tbl_OrderDetails); _ticketService.UpdateTicketBySellCount(tbl_Tickets, tbl_OrderDetails); var tbl_SaleLog = _saleLogService.addSaleLog(tbl_Order); try { _orderService.BeginTran(); _orderService.Add(tbl_Order); _orderDetailService.Add(tbl_OrderDetails); _ticketTestingService.Add(tbl_Ticket_Testing); _ticketService.Update(tbl_Tickets); _noticeOrderConsumedService.Add(tbl_Order, tbl_OrderDetails, business); _orderTravelNoticeService.Add(tbl_Order, business); _saleLogService.Add(tbl_Order); _orderService.CommitTran(); } catch (Exception ex) { _orderService.RollbackTran(); result.Head.Code = "113021"; result.Head.Describe = "订单创建异常,订单创建失败"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } result.Body = new OrderCreateInfo { OtaOrderId = tbl_Order.OTAOrderNo, OrderId = tbl_Order.OrderNo, OrderStatus = "OREDER_SUCCESS", Item = new List <OrderCreateItem>() }; tbl_OrderDetails = _orderDetailService.GetList(tbl_Order.OrderNo); foreach (var row in tbl_OrderDetails) { result.Body.Item.Add(new OrderCreateItem { OtaOrderDetailId = row.OtaOrderDetailId, ProductId = row.TicketId.ToString(), useDate = row.ValidityDateStart.ToString("yyyy-MM-dd"), CertificateNo = row.CertificateNO, quantity = 500000 }); } result.Head.Code = "000000"; result.Head.Describe = "成功"; return(PageDataResult.Data(result, business.Saltcode.ToString())); }
/// <summary> /// 创建订单并支付 /// </summary> /// <param name="orderInfo"></param> private PageResult PayOrder(OrderCreateRequest request, Tbl_OTABusiness business) { OrderInfo orderInfo = request.Body.OrderInfo; OrderCreateResponse result = new OrderCreateResponse { Head = HeadResult.V1 }; var validResult = _orderService.ValidDataForOrderCreateRequest(request); if (!validResult.Status) { result.Head.Code = validResult.Code; result.Head.Describe = validResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } List <int> productIds = orderInfo.TicketList.Select(a => a.ProductId).ToList(); var ticketIds = _otaTicketRelationService.GetTicketIds(business.Id, productIds); var tbl_Tickets = _ticketService.CheckIsTicketIds(ticketIds, business.ScenicId, orderInfo.VisitDate.ToDataTime()); var validDataResult = _orderService.ValidDataForOrderCreateRequest(request, tbl_Tickets); if (!validDataResult.Status) { result.Head.Code = validDataResult.Code; result.Head.Describe = validDataResult.Message; return(PageDataResult.Data(result, business.Saltcode.ToString())); } var tbl_Order = _orderService.AddOrder(orderInfo, business); var tbl_OrderDetails = _orderDetailService.AddOrderDetail(orderInfo, tbl_Order); _orderService.UpdateOrder(tbl_Order, tbl_OrderDetails); var tbl_Ticket_Testing = _ticketTestingService.addTicketTestings(tbl_Order, tbl_OrderDetails); _ticketService.UpdateTicketBySellCount(tbl_Tickets, tbl_OrderDetails); var tbl_SaleLog = _saleLogService.addSaleLog(tbl_Order); try { using (SqlConnection connection = new SqlConnection(DbConfig.TicketConnectionString)) { connection.Open(); var trans = connection.BeginTransaction(); SqlBulkInsert.Inert(tbl_Order, connection, trans); SqlBulkInsert.Inert(tbl_OrderDetails, connection, trans); SqlBulkInsert.Inert(tbl_Ticket_Testing, connection, trans); _ticketService.UpdateTicket(tbl_Tickets, connection, trans); SqlBulkInsert.Inert(tbl_SaleLog, connection, trans); trans.Commit(); } } catch (Exception ex) { result.Head.Code = "113021"; result.Head.Describe = "订单创建异常,订单创建失败"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } result.Body = new OrderCreateInfo { OrderId = tbl_Order.OrderNo, OrderStatus = "OREDER_SUCCESS" }; try { var sendResult = _smsService.Send(tbl_OrderDetails, tbl_Order.Mobile); if (sendResult.Status) { result.Head.Code = "000000"; result.Head.Describe = "成功"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } result.Head.Code = "000001"; result.Head.Describe = "订单创建成功,发送入园凭证短信失败"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } catch (Exception ex) { result.Head.Code = "000001"; result.Head.Describe = "订单创建成功,发送入园凭证短信失败"; return(PageDataResult.Data(result, business.Saltcode.ToString())); } }
public ActionResult OrderCreate(int?timeunix, string signature, OrderCreateRequest request) { table_商户账号 account = null; sqlSugarClient.Ado.UseTran(() => { }); sqlSugarClient.Ado.UseTran(() => { account = sqlSugarClient.Queryable <table_商户账号>().Where(it => it.商户ID == request.UserName).First(); }); if (Convert.ToDouble(account.手续费余额) - Convert.ToDouble(account.单笔手续费) < 0) { return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1010, request.UserName, request.UserPassword)); } if (Convert.ToDouble(request.AimsMoney) - Convert.ToDouble(account.提款最低单笔金额) < 0) { return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1011, request.UserName, request.UserPassword)); } if (Convert.ToDouble(request.AimsMoney) - Convert.ToDouble(account.提款最高单笔金额) > 0) { return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1012, request.UserName, request.UserPassword)); } if (account.提款余额.Value - Convert.ToDouble(request.AimsMoney) < 0) { return(GetStandardError(BaseErrors.ERROR_NUMBER.LX1013, request.UserName, request.UserPassword)); } JsonResult jsonResult = null; sqlSugarClient.Ado.UseTran(() => { }); sqlSugarClient.Ado.UseTran(() => { var getByWhere = sqlSugarClient.Queryable <table_商户明细提款>() .Where(it => it.商户ID == request.UserName && it.商户API订单号 == request.OrderNumberMerchant).ToList(); if (getByWhere.Count > 0) { jsonResult = GetStandardError(BaseErrors.ERROR_NUMBER.LX1020, request.UserName, request.UserPassword); } }); if (jsonResult != null) { return(jsonResult); } sqlSugarClient.Ado.UseTran(() => { }); var result = sqlSugarClient.Ado.UseTran(() => { account = sqlSugarClient.Queryable <table_商户账号>().Where(it => it.商户ID == request.UserName).First(); string 状态 = "待处理"; string 类型 = "提款"; DateTime 时间创建 = DateTime.Now; double preFee = Convert.ToDouble(account.手续费余额); double preBalance = account.提款余额.Value; account.提款余额 -= Convert.ToDouble(request.AimsMoney); account.手续费余额 -= Convert.ToDouble(account.单笔手续费); account.API回调 = request.CallBack; // sqlSugarClient.Updateable(account).UpdateColumns(it => new { it.提款余额, it.手续费余额, it.API回调 }).ExecuteCommand(); sqlSugarClient.Updateable <table_商户账号>().Where(it => it.商户ID == account.商户ID) .SetColumns(it => it.提款余额 == it.提款余额 - Convert.ToDouble(request.AimsMoney)) .SetColumns(it => it.手续费余额 == it.手续费余额 - Convert.ToDouble(account.单笔手续费)) .SetColumns(it => it.API回调 == request.CallBack) .ExecuteCommand(); table_商户明细手续费 fee = new table_商户明细手续费(); fee.订单号 = "MHFON" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999)); fee.商户ID = Convert.ToInt32(account.商户ID); fee.手续费支出 = account.单笔手续费; fee.交易金额 = Convert.ToDouble(request.AimsMoney); fee.交易前手续费余额 = preFee; fee.交易后手续费余额 = account.手续费余额; fee.类型 = 类型; fee.状态 = 状态; fee.时间创建 = 时间创建; sqlSugarClient.Insertable(fee).ExecuteCommand(); table_商户明细余额 balance = new table_商户明细余额(); balance.订单号 = "MBON" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999)); balance.商户ID = Convert.ToInt32(account.商户ID); balance.类型 = 类型; balance.手续费 = Convert.ToString(account.单笔手续费); balance.交易金额 = request.AimsMoney; balance.交易前账户余额 = Convert.ToString(preBalance); balance.交易后账户余额 = Convert.ToString(account.提款余额); balance.状态 = 状态; balance.时间创建 = 时间创建; sqlSugarClient.Insertable(balance).ExecuteCommand(); table_商户明细提款 detail = new table_商户明细提款(); detail.订单号 = "MST" + DateTime.Now.ToString("yyyyMMddHHmmss") + Convert.ToString(ClassLibrary1.ClassHelpMe.GenerateRandomCode(1, 1000, 9999)); detail.商户ID = account.商户ID; detail.交易方卡号 = request.AimsCardNumber; detail.交易方姓名 = request.AimsCardName; detail.交易方银行 = request.AimsCardBank; detail.商户API订单号 = request.OrderNumberMerchant; detail.交易金额 = Convert.ToDouble(request.AimsMoney); detail.手续费 = account.单笔手续费; detail.创建方式 = "接口"; detail.备注商户写 = ""; detail.状态 = 状态; detail.类型 = 类型; detail.时间创建 = 时间创建; detail.API回调次数 = 0; detail.订单源IP = ClassLibrary1.ClassAccount.来源IP(); sqlSugarClient.Insertable(detail).ExecuteCommand(); OrderCreateResponse orderCreateResponse = AutoCopy <BaseResponse, OrderCreateResponse>(baseSuccess); orderCreateResponse.Username = request.UserName; orderCreateResponse.Userpassword = request.UserPassword; orderCreateResponse.OrderNumberMerchant = request.OrderNumberMerchant; orderCreateResponse.OrderNumberSite = detail.订单号; orderCreateResponse.AimsCardBank = request.AimsCardBank; orderCreateResponse.AimsCardName = request.AimsCardName; orderCreateResponse.AimsCardNumber = request.AimsCardNumber; orderCreateResponse.AimsMoney = request.AimsMoney; jsonResult = new JsonResult(); jsonResult.Data = orderCreateResponse; }); sqlSugarClient.Ado.UseTran(() => { }); if (!result.IsSuccess) { jsonResult = GetStandardError(BaseErrors.ERROR_NUMBER.LX1016, request.UserName, request.UserPassword); BaseResponse baseResponse = (BaseResponse)jsonResult.Data; baseResponse.StatusReply = string.Format(baseResponse.StatusReply, result.ErrorMessage); } return(jsonResult); }
/// <summary> /// 创建订单基础数据验证 /// </summary> /// <param name="request"></param> /// <returns></returns> public DataValidResult ValidDataForOrderCreateRequest(OrderCreateRequest request, OrderCreateResponse response) { var orderInfo = request.Body.OrderInfo; var result = new DataValidResult { Status = false }; if (orderInfo.ContactPerson == null) { result.Code = "113001"; result.Message = "创建订单异常,取票人信息为空"; return(result); } if (string.IsNullOrEmpty(orderInfo.ContactPerson.Name)) { result.Code = "113002"; result.Message = "创建订单异常,取票人姓名不能为空"; return(result); } if (string.IsNullOrEmpty(orderInfo.ContactPerson.Mobile)) { result.Code = "113003"; result.Message = "创建订单异常,取票人手机号码不能为空"; return(result); } if (!RegexValidation.IsCellPhone(orderInfo.ContactPerson.Mobile)) { result.Code = "113004"; result.Message = "创建订单异常,取票人手机号码异常"; return(result); } if (!string.IsNullOrEmpty(orderInfo.ContactPerson.CardType)) { if (orderInfo.ContactPerson.CardType.ToUpper() == "ID_CARD" && !string.IsNullOrEmpty(orderInfo.ContactPerson.CardNo)) { if (!RegexValidation.IsIdCard(orderInfo.ContactPerson.CardNo)) { result.Code = "113005"; result.Message = "创建订单异常,游客身份证信息输入有误"; return(result); } } } if (string.IsNullOrEmpty(orderInfo.OrderOtaId)) { result.Code = "113006"; result.Message = "创建订单异常,OTA订单id不能为空"; return(result); } if (orderInfo.OrderPrice <= 0) { result.Code = "113007"; result.Message = "创建订单异常,订单总金额不能小于0"; return(result); } if (orderInfo.OrderQuantity <= 0) { result.Code = "113008"; result.Message = "创建订单异常,订票总数量不能小于1"; return(result); } if (!orderInfo.VisitDate.IsDataTime()) { result.Code = "113009"; result.Message = "创建订单异常,游玩日期格式不合法"; return(result); } if (orderInfo.TicketList == null || orderInfo.TicketList.Count <= 0) { result.Code = "113010"; result.Message = "创建订单异常,购买产品的数量不能小于1"; return(result); } if (orderInfo.TicketList.Sum(a => a.Quantity) != orderInfo.OrderQuantity) { result.Code = "113011"; result.Message = "创建订单异常,购买产品的总数量和订票总数量不符"; return(result); } if (orderInfo.TicketList.Sum(a => a.SellPrice * a.Quantity) != orderInfo.OrderPrice) { result.Code = "113012"; result.Message = "创建订单异常,购买产品的总金额和订票总金额不符"; return(result); } foreach (var row in orderInfo.TicketList) { if (row.Quantity <= 0) { result.Code = "113013"; result.Message = "创建订单异常,购买产品的游客人数不能小于1"; return(result); } if (row.ProductId <= 0) { result.Code = "113014"; result.Message = "创建订单异常,购买产品的id不合法"; return(result); } if (orderInfo.TicketList == null) { result.Code = "113015"; result.Message = "创建订单异常,购买产品的数据不合法"; return(result); } if (row.SellPrice <= 0) { result.Code = "113016"; result.Message = "创建订单异常,购买产品的金额不合法"; return(result); } } if (orderInfo.OrderPayStatus > 1 || orderInfo.OrderPayStatus < 0) { result.Code = "113017"; result.Message = "创建订单异常,是否收款超出范围"; return(result); } //验证OTA订单id是否已存在 var tbl_Order = GetOrderBy(request.Body.OrderInfo.OrderOtaId); if (tbl_Order != null) { var tbl_OrderDetails = _orderDetailService.GetList(tbl_Order.OrderNo); result.Code = "000000"; result.Message = "成功,重复提交订单"; response.Body = new OrderCreateInfo { OtaOrderId = tbl_Order.OTAOrderNo, OrderId = tbl_Order.OrderNo, OrderStatus = "OREDER_SUCCESS", Item = new List <OrderCreateItem>() }; foreach (var row in tbl_OrderDetails) { response.Body.Item.Add(new OrderCreateItem { OtaOrderDetailId = row.OtaOrderDetailId, ProductId = row.TicketId.ToString(), useDate = row.ValidityDateStart.ToString("yyyy-MM-dd"), CertificateNo = row.CertificateNO, quantity = 500000 }); } return(result); } result.Status = true; return(result); }
protected void Page_Load(object sender, EventArgs e) { #region 记入日志表Meituan_reqlog string reqip = CommonFunc.GetRealIP(); Meituan_reqlog mlog = new Meituan_reqlog { id = 0, reqstr = _requestParam, subtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), respstr = "", resptime = "", code = "", describe = "", req_type = "", sendip = reqip, stockagentcompanyid = 0 }; int logid = new Meituan_reqlogData().EditReqlog(mlog); mlog.id = logid; #endregion string date = System.Web.HttpContext.Current.Request.Headers.Get("Date"); string PartnerId = System.Web.HttpContext.Current.Request.Headers.Get("PartnerId"); string Authorization = System.Web.HttpContext.Current.Request.Headers.Get("Authorization"); string requestMethod = System.Web.HttpContext.Current.Request.HttpMethod; string URI = System.Web.HttpContext.Current.Request.CurrentExecutionFilePath; //authorization 形式: "MWS" + " " + client + ":" + sign; string mtSign = Authorization.Substring(Authorization.IndexOf(":") + 1); mlog.req_type = URI; agentinfo = new AgentCompanyData().GetAgentCompanyByMeituanPartnerId(PartnerId); #region 验证是否已经配置美团合作商信息 if (agentinfo == null) { var response = new OrderCreateResponse(); response.partnerId = int.Parse(PartnerId); response.code = 499; response.describe = "分销尚未配置美团合作商信息(PartnerId:" + PartnerId + ")"; string json = JsonConvert.SerializeObject(response); //把处理结果录入日志 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); LogHelper.RecordSelfLog("Error", "meituan", response.describe); Response.Write(json); return; } #endregion mlog.stockagentcompanyid = agentinfo.Id; #region 签名验证 string beforeSign = requestMethod + " " + URI + "\n" + date; string afterSign = new MeiTuanInter(agentinfo.mt_partnerId, agentinfo.mt_secret, agentinfo.mt_client).GetSign(beforeSign); //判断签名是否正确 if (afterSign != mtSign) { var response = new OrderCreateResponse(); response.partnerId = int.Parse(PartnerId); response.code = 499; response.describe = "签名验证失败"; string json = JsonConvert.SerializeObject(response); //把处理结果录入日志 mlog.respstr = json; mlog.resptime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); mlog.code = response.code.ToString(); mlog.describe = response.describe; new Meituan_reqlogData().EditReqlog(mlog); LogHelper.RecordSelfLog("Error", "meituan", "拉取产品 签名错误 mtSign-" + mtSign + " meSign-" + afterSign); Response.Write(json); return; } #endregion string actionResult = Getordercreate(mlog); Response.Write(actionResult); }
/// 产品订单创建 public string Getordercreate(Meituan_reqlog mlog) { lock (lockobj) { var response = new OrderCreateResponse(); response.partnerId = int.Parse(agentinfo.mt_partnerId); try { var data = JsonConvert.DeserializeObject <OrderCreateRequest>(_requestParam); if (data.body == null) { response.code = 499; response.describe = "Body数据解析失败"; return(EditMTlog_Order(response, mlog)); } else { OrderCreateRequestBody body = data.body; string product_num = body.partnerDealId; string num = body.quantity.ToString(); mlog.mtorderid = body.orderId.ToString(); //todo 根据请求参数查询产品返回结果 B2b_com_pro pro = new B2bComProData().GetProById(product_num); #region 产品信息 if (pro != null) { #region 分销授权信息判断 Agent_company agentwarrantinfo = AgentCompanyData.GetAgentWarrant(agentinfo.Id, pro.Com_id); if (agentwarrantinfo != null) { int warrantid = agentwarrantinfo.Warrantid; int Warrant_type = agentwarrantinfo.Warrant_type;//支付类型分销 1出票扣款 2验码扣款 int Warrant_level = agentwarrantinfo.Warrant_level; if (agentwarrantinfo.Warrant_state == 0) { response.code = 499; response.describe = "商户尚未授权此分销"; return(EditMTlog_Order(response, mlog)); } } else { response.code = 499; response.describe = "分销还没有得到商户授权"; return(EditMTlog_Order(response, mlog)); } #endregion #region 暂时对外接口只支持票务产品 if (pro.Server_type != 1) { response.code = 499; response.describe = "暂时对外接口只支持票务产品,其他产品请到分销后台提单"; return(EditMTlog_Order(response, mlog)); } #endregion #region 价格(建议价)效验,保证美团抓到的是最新价格 string advice_price = body.unitPrice.ToString("f0"); if (pro.Advise_price.ToString("f0") != advice_price) { response.code = 410; response.describe = "价格(建议价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } #endregion #region 价格(分销价)效验,保证美团抓到的是最新的结算价 if (agentwarrantinfo.Warrant_level == 1) { if (body.buyPrice.ToString("f0") != pro.Agent1_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } if (agentwarrantinfo.Warrant_level == 2) { if (body.buyPrice.ToString("f0") != pro.Agent2_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } if (agentwarrantinfo.Warrant_level == 3) { if (body.buyPrice.ToString("f0") != pro.Agent3_price.ToString("f0")) { response.code = 410; response.describe = "价格(分销价)效验失败,请重新拉取价格库存日历"; return(EditMTlog_Order(response, mlog)); } } #endregion #region 多规格产品编码格式验证 int speciid = 0; //判断产品编号是否符合多规格产品特点:例如 2503-1 if (product_num.IndexOf("-") > -1) { speciid = product_num.Substring(product_num.IndexOf("-") + 1).ConvertTo <int>(0); if (speciid == 0) { response.code = 410; response.describe = "多规格产品编码格式有误"; return(EditMTlog_Order(response, mlog)); } product_num = product_num.Substring(0, product_num.IndexOf("-")); } #endregion #region 产品编码格式有误 if (product_num.ConvertTo <int>(0) == 0) { response.code = 410; response.describe = "产品编码格式有误"; return(EditMTlog_Order(response, mlog)); } #endregion #region 购买数量格式有误 if (num.ConvertTo <int>(0) == 0) { response.code = 410; response.describe = "购买数量格式有误"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品限购则需要判断 限购数量 是否足够 if (pro.Ispanicbuy != 0) { //最多可购买数量 int zuiduo_canbuynum = pro.Limitbuytotalnum; if (int.Parse(num) > zuiduo_canbuynum) { response.code = 420; response.describe = "产品库存不足"; return(EditMTlog_Order(response, mlog)); } } #endregion #region 产品已暂停 if (pro.Pro_state == 0) { response.code = 421; response.describe = "产品已暂停"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品已过期 if (pro.Pro_end < DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"))) { response.code = 421; response.describe = "产品已过期"; return(EditMTlog_Order(response, mlog)); } #endregion #region 产品是否需要预约:需要预约则最晚预约时间是 游玩前一天的18点 if (pro.isneedbespeak == 1) { if (body.travelDate != "") { DateTime visitdate = DateTime.Parse(body.travelDate); DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); //必须提前一天预约 if (bookdate >= visitdate) { response.code = 422; response.describe = "产品需要提前一天预约"; return(EditMTlog_Order(response, mlog)); } } } #endregion #region 是否有使用限制 if (pro.Iscanuseonsameday == 0)//1:当天出票可用 ;2:2小时内出票不可用;0:当天出票不可用 { if (body.travelDate != "") { DateTime visitdate = DateTime.Parse(body.travelDate);//游玩日期:2012-12-12 格式要求:yyyy-MM-dd DateTime bookdate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")); if (bookdate >= visitdate) { response.code = 422; response.describe = "预定日期至少在游玩日期之前一天"; return(EditMTlog_Order(response, mlog)); } } } #endregion Meituan_reqlog mtOrderCrateSucLog = new Meituan_reqlogData().GetMtOrderCrateLogByMtorder(body.orderId.ToString(), "200"); #region 美团订单成功创建过 if (mtOrderCrateSucLog != null) { response.code = 200; response.describe = "订单创建成功"; response.partnerId = int.Parse(agentinfo.mt_partnerId); response.body = new OrderCreateResponseBody { partnerOrderId = mtOrderCrateSucLog.ordernum }; mlog.ordernum = mtOrderCrateSucLog.ordernum; return(EditMTlog_Order(response, mlog)); } #endregion #region 美团订单没有成功创建过 else { int isInterfaceSub = 1; //是否是电子票接口提交的订单:0.否;1.是 string ordertype = "1"; //1.出票2.充值 int orderid = 0; string real_name = ""; string mobile = ""; string use_date = body.travelDate; List <BaseVisitor> visitorlist = body.visitors; if (visitorlist.Count > 0) { foreach (BaseVisitor info in visitorlist) { if (info != null) { real_name = info.name; mobile = info.mobile; break; } } } //创建一笔未支付订单 string rdata = OrderJsonData.CreateNopayOrder(agentinfo.Id, product_num, ordertype, num, real_name, mobile, use_date, isInterfaceSub, out orderid, speciid); XmlDocument retdoc = (XmlDocument)JsonConvert.DeserializeXmlNode("{\"root\":" + rdata + "}"); XmlElement retroot = retdoc.DocumentElement; string rtype = retroot.SelectSingleNode("type").InnerText; string rmsg = retroot.SelectSingleNode("msg").InnerText; if (rtype == "100")//创建订单成功 { //针对美团因为创建未支付订单 是单写的,所以同时创建一笔wl订单 #region 万龙接口订单 if (pro.Source_type == 3 && pro.Serviceid == 4) { try { B2b_company commanage = B2bCompanyData.GetAllComMsg(pro.Com_id); WlGetProInfoDealRequestData wldata = new WlGetProInfoDealRequestData(commanage.B2bcompanyinfo.wl_PartnerId, commanage.B2bcompanyinfo.wl_userkey); WlDealResponseBody WlDealinfo = wldata.SelectonegetWlProDealData(pro.Service_proid, pro.Com_id); if (WlDealinfo == null) { response.code = 499; response.describe = "订单创建失败1"; return(EditMTlog_Order(response, mlog)); } double toal = WlDealinfo.marketPrice * int.Parse(num); string tavedate = ""; var createwlorder = wldata.wlOrderCreateRequest_json(int.Parse(commanage.B2bcompanyinfo.wl_PartnerId), real_name, mobile, orderid.ToString(), product_num.ToString(), WlDealinfo.proID, WlDealinfo.settlementPrice, WlDealinfo.marketPrice, toal, int.Parse(num), tavedate);// var wlcreate = wldata.wlOrderCreateRequest_data(createwlorder, pro.Com_id); if (wlcreate.IsSuccess == true) { //wl订单创建成功 } else { //return JsonConvert.SerializeObject(new { type = 1, msg = "wl接口创建订单失败1" }); response.code = 499; response.describe = "订单创建失败1"; return(EditMTlog_Order(response, mlog)); } } catch (Exception ex) { response.code = 499; response.describe = "订单创建失败" + ex.Message; return(EditMTlog_Order(response, mlog)); } } #endregion response.code = 200; response.describe = "订单创建成功"; response.partnerId = int.Parse(agentinfo.mt_partnerId); response.body = new OrderCreateResponseBody { partnerOrderId = orderid.ToString() }; mlog.ordernum = orderid.ToString(); return(EditMTlog_Order(response, mlog)); } else { response.code = 499; response.describe = "订单创建失败"; return(EditMTlog_Order(response, mlog)); } } #endregion } else { response.code = 421; response.describe = "产品不存在"; return(EditMTlog_Order(response, mlog)); } #endregion } } catch (Exception ex) { response.code = 499; response.describe = "异常错误" + ex; return(EditMTlog_Order(response, mlog)); } } }