private ActionResult doProductPackage(WxPackageGetRequest request) { var productIds = request.ProductId.Split('-'); var productId = int.Parse(productIds[1]); var storeId = int.Parse(productIds[2]); var sectionId = int.Parse(productIds[3]); var linq = Context.Set<ProductEntity>().Where(p=>p.Id == productId) .Join(Context.Set<InventoryEntity>(), o => o.Id, i => i.ProductId, (o, i) => new { I = i, P = o }) .Join(Context.Set<ProductPropertyValueEntity>(), o => o.I.PColorId, i => i.Id, (o, i) => new { I = o.I, P = o.P, Color = i }) .Join(Context.Set<ProductPropertyValueEntity>(), o => o.I.PSizeId, i => i.Id, (o, i) => new { I = o.I, P = o.P, Color = o.Color, Size = i }) .OrderByDescending(p=>p.I.Amount).FirstOrDefault(); if (linq == null) return new XmlResult(composePackageError(r => r.RetErrMsg = "商品不存在!")); if (linq.I.Amount < 1) return new XmlResult(composePackageError(r => r.RetErrMsg = "商品库存不足!")); //step1: register user if not exist var userEntity = _customerService.OutSiteLogin2(new OutSiteLoginRequest() { OutsiteNickname = request.OpenId, OutsiteUid = request.OpenId, OutsiteType = (int)OutsiteType.WX }); if (userEntity == null) return new XmlResult(composePackageError(r => r.RetErrMsg = "用户信息有误!")); //step2: create order bool isCreateSuccess; var sectionEntity = Context.Set<SectionEntity>().Where(s => s.Id == sectionId) .Join(Context.Set<StoreEntity>(), o => o.StoreId, i => i.Id, (o, i) => new { Store = i, Section = o }).FirstOrDefault(); StringBuilder additional = new StringBuilder(); if (sectionEntity == null) additional.Append(linq.P.Description); else additional.AppendFormat("{0}-{1}-{2}", sectionEntity.Store.Name, sectionEntity.Section.Location, sectionEntity.Section.Name); var orderRequestModel = new OrderRequestModel() { InvoiceDetail = string.Empty, InvoiceTitle = string.Empty, NeedInvoice = false, Memo = string.Empty, ShippingAddress = new ShippingAddressModel(){ ShippingAddress = additional.ToString() }, Payment = new PaymentModel() { PaymentCode = WxPayConfig.PaymentCode, PaymentName = WxPayConfig.PaymentName, }, Products = new List<OrderProductDetailRequest>() { new OrderProductDetailRequest(){ ProductId = linq.P.Id, Desc = linq.P.Description, Quantity = 1, SectionId = sectionId, StoreId = storeId, Properties = new ProductPropertyValueRequest(){ ColorValueId = linq.Color.Id, ColorValueName = linq.Color.ValueDesc, SizeValueId = linq.Size.Id, SizeValueName = linq.Size.ValueDesc } } } }; var orderCreateResponse = OrderRule.Create(new OrderRequest() { Order = JsonConvert.SerializeObject(orderRequestModel), Channel = WxPayConfig.ORDER_SOURCE }, new UserModel() { Id = userEntity.Id, Nickname = userEntity.Nickname }, out isCreateSuccess); if (!isCreateSuccess) return new XmlResult(composePackageError(r => r.RetErrMsg = "订单无法显示!")); var orderModel = orderCreateResponse.Data as ExecuteResult<OrderResponse>; var orderNewEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == orderModel.Data.OrderNo).FirstOrDefault(); //step3: compose package message if (sectionEntity == null) additional.Append(linq.P.Description); else additional.AppendFormat("{0} {1} {2}", sectionEntity.Store.Name, sectionEntity.Section.Location, sectionEntity.Section.Name); return new XmlResult(composePackageSuccess(r => { r.Package = new WxPackage() { Body = string.Format("{0} {1} {2}", linq.P.Name, linq.Color.ValueDesc, linq.Size.ValueDesc), Attach = additional.ToString(), OutTradeNo = orderModel.Data.ExOrderNo, TotalFee = Util.Feng4Decimal(orderNewEntity.TotalAmount), TransportFee = Util.Feng4Decimal(orderNewEntity.ShippingFee ?? 0m), SPBill_Create_IP = clientIP(), // Time_Start = orderNewEntity.CreateDate.ToString("yyyyMMddHHmmss"), // Time_End = orderNewEntity.CreateDate.AddHours(4).ToString("yyyyMMddHHmmss") }; r.TimeStamp = request.TimeStamp + 1; })); }
private ActionResult doErpOrderPackage(string orderNo, WxPackageGetRequest request) { if (string.IsNullOrEmpty(orderNo)) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单不存在!"; r.TimeStamp = request.TimeStamp + 1; })); dynamic erpOrder = null; bool isSuccess = ErpServiceHelper.SendHttpMessage(ConfigManager.ErpBaseUrl , new { func = "GetSalesInfo", sales_sid = orderNo } ,r=>erpOrder = r.Result , null); if (!isSuccess || erpOrder.productDetail == null) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单无法获取!"; r.TimeStamp = request.TimeStamp + 1; })); decimal totalAmount = erpOrder.totalamount; if (totalAmount <=0) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单金额不正确!"; r.TimeStamp = request.TimeStamp + 1; })); return new XmlResult(composePackageSuccess(r => { r.Package = new WxPackage() { Body = "银泰商业微信支付", OutTradeNo = orderNo, TotalFee = Util.Feng4Decimal(totalAmount), TransportFee = 0, SPBill_Create_IP = clientIP(), NotifyUrl = WxPayConfig.NOTIFY_ERP_URL }; r.TimeStamp = request.TimeStamp + 1; })); }
public ActionResult WxPackage(WxPackageGetRequest request) { if (request == null ) { return new XmlResult(composePackageError(r => r.RetErrMsg = "请求数据异常!")); } if (string.Compare(request.ValidSign, request.AppSignature, false) != 0) { Log.Debug(JsonConvert.SerializeObject(request)); Log.Debug(request.ValidSign); return new XmlResult(composePackageError(r => r.RetErrMsg = "请求没有授权!")); } var productId = request.ProductId; var productIds = productId.Split('-'); if (productIds.Length < 2) return new XmlResult(composePackageError(r => r.RetErrMsg = "商品信息有误!")); var packageType = int.Parse(productIds[0]); switch (packageType) { case (int)WxPackageType.Order: return doOrderPackage(productIds[1], request); case (int)WxPackageType.Sku: return doSkuPackage(request); case (int)WxPackageType.Product: return doProductPackage(request); case (int)WxPackageType.ErpOrder: return doErpOrderPackage(productIds[1],request); case (int)WxPackageType.Erp2Order: return doErp2OrderPackage(productIds[1], request); default: return new XmlResult(composePackageError(r => r.RetErrMsg = "订单类型有误!")); } }
private ActionResult doOrderPackage(string orderNo, WxPackageGetRequest request) { var orderEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == orderNo) .Join(Context.Set<Order2ExEntity>(), o => o.OrderNo, i => i.OrderNo, (o, i) => new { O = o, OE = i }) .GroupJoin(Context.Set<OrderItemEntity>(), o => o.O.OrderNo, i => i.OrderNo, (o, i) => new { O = o.O, OE = o.OE, OI = i }).FirstOrDefault(); if (orderEntity == null) return new XmlResult(composePackageError(r => r.RetErrMsg = "订单不存在!")); if (orderEntity.O.Status != (int)OrderStatus.Create) return new XmlResult(composePackageError(r => r.RetErrMsg = "订单状态无法支付!")); var orderItemEntity = orderEntity.OI.First(); return new XmlResult(composePackageSuccess(r => r.Package = new WxPackage() { Body = orderItemEntity.ProductName, Attach = orderItemEntity.ProductDesc, OutTradeNo = orderEntity.OE.ExOrderNo, TotalFee = Util.Feng4Decimal(orderEntity.O.TotalAmount), TransportFee = Util.Feng4Decimal(orderEntity.O.ShippingFee ?? 0m), SPBill_Create_IP = clientIP(), Time_Start = orderEntity.O.CreateDate.ToString("yyyyMMddHHmmss"), Time_End = orderEntity.O.CreateDate.AddHours(0.5).ToString("yyyyMMddHHmmss") })); }
private ActionResult doErp2OrderPackage(string orderNo, WxPackageGetRequest request) { if (string.IsNullOrEmpty(orderNo)) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单不存在!"; r.TimeStamp = request.TimeStamp + 1; })); dynamic erpOrder = null; bool isSuccess = Erp2ServiceHelper.SendHttpMessage(Erp2Config.PACKAGE_URL , new { saleno = orderNo } , r => erpOrder = r , null); if (!isSuccess) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单无法获取!"; r.TimeStamp = request.TimeStamp + 1; })); decimal totalAmount = erpOrder.Data; if (totalAmount <= 0) return new XmlResult(composePackageError(r => { r.RetErrMsg = "订单金额不正确!"; r.TimeStamp = request.TimeStamp + 1; })); return new XmlResult(composePackageSuccess(r => { r.Package = new WxPackage() { Body = "银泰商业微信支付", OutTradeNo = orderNo, TotalFee = Util.Feng4Decimal(totalAmount), TransportFee = 0, SPBill_Create_IP = clientIP(), NotifyUrl = WxPayConfig.NOTIFY_ERP2_URL }; r.TimeStamp = request.TimeStamp + 1; })); }