Ejemplo n.º 1
0
        public SwiftpassPayController(ICommunityService communityService
                                      //, IOptions<SwiftpassPayOptions> options
                                      , FinanceDbContext db
                                      , IOptions <ShopConglomerationOrderOptions> shopConglomerationOrderServer
                                      , PayProxyFactory proxyFactory
                                      , WechatCoreDbContext wechatCoreDb
                                      , PrintDbContext printDbContext
                                      , ShopDbContext shopdb
                                      , MemberDbContext memberDbContext
                                      , ILoggerFactory loggerFactory
                                      , IOptions <WechatTemplateSendOptions> woptions
                                      , IOptions <ThirdConfig> toptions


                                      , IHostingEnvironment hostingEnvironment)
        {
            this.hostingEnvironment = hostingEnvironment;
            this.woptions           = woptions.Value;
            //this.options = options.Value;
            // this.db = ZRui.Web.BLL.DbContextFactory.FinanceDbContext;
            this.db               = db;
            this.shopdb           = shopdb;
            this.printDbContext   = printDbContext;
            this.wechatCoreDb     = wechatCoreDb;
            this.proxyFactory     = proxyFactory;
            this._memberDbContext = memberDbContext;

            _shopConglomerationOrderServer = shopConglomerationOrderServer.Value;
            _logger          = loggerFactory.CreateLogger <SwiftpassPayController>();
            this.thirdConfig = toptions.Value;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 完成订单
        /// </summary>
        /// <param name="printDbContext"></param>
        /// <param name="db"></param>
        /// <param name="options"></param>
        /// <param name="shopOrderid"></param>
        /// <param name="_logger"></param>
        static void OrderFinish(PrintDbContext printDbContext, ShopDbContext db,
                                WechatTemplateSendOptions options, ThirdConfig toptions, ShopOrder shopOrder, ILogger _logger)
        {
            shopOrder.PayTime = DateTime.Now;
            shopOrder.Status  = ShopOrderStatus.已支付;
            db.SaveChanges();

            //获取订单中商品的数量
            var commodityIdAndCounts = db.Query <ShopOrderItem>()
                                       .Where(m => m.ShopOrderId == shopOrder.Id)
                                       .Where(m => !m.IsDel)
                                       .Select(m => new
            {
                m.CommodityStock.Sku.CommodityId,
                m.Count
            })
                                       .ToList()
                                       .GroupBy(m => m.CommodityId)
                                       .ToDictionary(m => m.Key, m => m.Select(x => x.Count).Sum());

            //更新商品的销售量
            //注意,这里如果有一个品牌,多个店铺的情况,会出现销售额共享的情况
            var commodityIds = commodityIdAndCounts.Select(m => m.Key).ToList();
            var commoditys   = db.Query <ShopBrandCommodity>()
                               .Where(m => commodityIds.Contains(m.Id))
                               .ToList();

            foreach (var item in commoditys)
            {
                item.SalesForMonth += commodityIdAndCounts[item.Id];
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 直接设置订单完成
        /// </summary>
        /// <param name="shopOrder"></param>
        /// <param name="printDbContext"></param>
        /// <param name="db"></param>
        /// <param name="options"></param>
        /// <param name="_logger"></param>
        public static void SetShopOrderFinish(this ShopOrder shopOrder, PrintDbContext printDbContext,
                                              ShopDbContext db, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger)
        {
            OrderFinish(printDbContext, db, options, toptions, shopOrder, _logger);
            var shopName = db.Query <Shop>()
                           .Where(m => m.Id == shopOrder.ShopId)
                           .Select(m => m.Name)
                           .FirstOrDefault();

            AfterOrderPlacing(printDbContext, db, toptions, shopOrder, shopName, options, _logger);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="communityService"></param>
 /// <param name="options"></param>
 /// <param name="memberDb"></param>
 /// <param name="db"></param>
 /// <param name="hostingEnvironment"></param>
 public ShopWechatAPIController(ICommunityService communityService
                                , IOptions <MemberAPIOptions> options
                                , IOptions <WechatTemplateSendOptions> wechatTemplateSendOptions
                                , MemberDbContext memberDb
                                , ShopDbContext db
                                , IHostingEnvironment hostingEnvironment)
     : base(options, db, memberDb)
 {
     this.db = db;
     this.hostingEnvironment        = hostingEnvironment;
     this.wechatTemplateSendOptions = wechatTemplateSendOptions.Value;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// 在后台任务中完成订单
 /// </summary>
 /// <param name="shopOrderId"></param>
 public static void SetShopOrderFinish(int shopOrderId)
 {
     using (ShopDbContext shopDb = DbContextFactory.ShopDb)
     {
         using (var printDbContext = DbContextFactory.PrintDb)
         {
             ILogger     logger      = ServiceLocator.Instance.GetService <ILoggerFactory>().CreateLogger <ShopOrderUtil>();
             ShopOrder   shopOrder   = shopDb.GetSingle <ShopOrder>(shopOrderId);
             ThirdConfig thirdConfig = ServiceLocator.Instance.GetService <IOptions <ThirdConfig> >().Value;
             WechatTemplateSendOptions wechatTemplateSend = ServiceLocator.Instance.GetService <IOptions <WechatTemplateSendOptions> >().Value;
             shopOrder.PayWay = "会员余额支付";
             shopOrder.SetShopOrderFinish(printDbContext, shopDb, wechatTemplateSend, thirdConfig, logger);
         }
     }
 }
Ejemplo n.º 6
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="communityService"></param>
 /// <param name="options"></param>
 /// <param name="memberDb"></param>
 /// <param name="db"></param>
 /// <param name="hostingEnvironment"></param>
 public ShopConglomerationActivityAPIController(ICommunityService communityService
                                                , IOptions <MemberAPIOptions> options
                                                , MemberDbContext memberDb
                                                , ShopDbContext db
                                                , IOptions <WechatTemplateSendOptions> wechatTemplateSendOptions
                                                , IMapper mapper
                                                , ILoggerFactory loggerFactory
                                                , IHostingEnvironment hostingEnvironment)
     : base(options, db, memberDb)
 {
     this.db = db;
     this.hostingEnvironment        = hostingEnvironment;
     this.wechatTemplateSendOptions = wechatTemplateSendOptions.Value;
     _logger = loggerFactory.CreateLogger <ShopConglomerationOrderAPIController>();
     _mapper = mapper;
 }
Ejemplo n.º 7
0
 public ShopConglomerationOrderAPIController(
     IOptions <MemberAPIOptions> options
     , IOptions <WechatTemplateSendOptions> tOption
     , ShopDbContext db
     , FinanceDbContext financedb
     , IMapper mapper
     , ILoggerFactory loggerFactory
     , WechatCoreDbContext wechatCoreDb
     , MemberDbContext memberDb
     , IHostingEnvironment hostingEnvironment)
     : base(options, memberDb, wechatCoreDb)
 {
     this.db                   = db;
     this._financedb           = financedb;
     _mapper                   = mapper;
     wechatTemplateSendOptions = tOption.Value;
     this.hostingEnvironment   = hostingEnvironment;
     _logger                   = loggerFactory.CreateLogger <ShopOrderAPIController>();
 }
Ejemplo n.º 8
0
 public SwiftpassPayForConglomerationWechatOpenAPIController(IOptions <MemberAPIOptions> memberOptions
                                                             , FinanceDbContext db
                                                             , IOptions <WechatTemplateSendOptions> options
                                                             , ShopDbContext shopDb
                                                             , PayProxyFactory proxyFactory
                                                             , WechatCoreDbContext wechatCoreDb
                                                             , MemberDbContext memberDb
                                                             , ILoggerFactory loggerFactory
                                                             , IHostingEnvironment hostingEnvironment) : base(memberOptions, memberDb, wechatCoreDb)
 {
     this.hostingEnvironment = hostingEnvironment;
     this.db           = db;
     this.options      = options.Value;
     this.shopDb       = shopDb;
     this.wechatCoreDb = wechatCoreDb;
     this.memberDb     = memberDb;
     this._logger      = loggerFactory.CreateLogger <SwiftpassPayForShopWechatOpenAPIController>();
     this.proxyFactory = proxyFactory;
     this.LogDbContext = DbContextFactory.LogDbContext;
 }
Ejemplo n.º 9
0
 public WechatPayController(ICommunityService communityService
                            , IOptions <WechatTemplateSendOptions> options
                            , IOptions <ThirdConfig> poptions
                            , PayProxyFactory proxyFactory
                            , FinanceDbContext db
                            , WechatCoreDbContext wechatCoreDb
                            , PrintDbContext printDbContext
                            , ShopDbContext shopDb
                            , ILoggerFactory loggerFactory
                            , IHostingEnvironment hostingEnvironment)
 {
     this.hostingEnvironment = hostingEnvironment;
     this.options            = options.Value;
     this.db             = db;
     this.shopDb         = shopDb;
     this.printDbContext = printDbContext;
     this.wechatCoreDb   = wechatCoreDb;
     this.proxyFactory   = proxyFactory;
     this.thirdConfig    = poptions.Value;
     _logger             = loggerFactory.CreateLogger <WechatPayController>();
 }
Ejemplo n.º 10
0
 public SwiftpassPayForShopWechatOpenAPIController(IOptions <MemberAPIOptions> memberOptions
                                                   //, FinanceDbContext db
                                                   , IOptions <ThirdConfig> poptions
                                                   , IOptions <WechatTemplateSendOptions> options
                                                   , ShopDbContext shopDb
                                                   , Core.Printer.Data.PrintDbContext printDbContext
                                                   , PayProxyFactory proxyFactory
                                                   , WechatCoreDbContext wechatCoreDb
                                                   , MemberDbContext memberDb
                                                   , ILoggerFactory loggerFactory
                                                   , IHostingEnvironment hostingEnvironment) : base(memberOptions, memberDb, wechatCoreDb)
 {
     this.hostingEnvironment = hostingEnvironment;
     this.finaceDb           = DbContextFactory.FinanceDbContext;
     this.options            = options.Value;
     this.shopDb             = shopDb;
     this.wechatCoreDb       = wechatCoreDb;
     this.memberDb           = memberDb;
     this.LogDbContext       = DbContextFactory.LogDbContext;
     this.printDbContext     = printDbContext;
     this.thirdConfig        = poptions.Value;
     this._logger            = loggerFactory.CreateLogger <SwiftpassPayForShopWechatOpenAPIController>();
     this.proxyFactory       = proxyFactory;
 }
Ejemplo n.º 11
0
        /// <summary>
        /// 订单下单后进行的操作
        /// </summary>
        static async void AfterOrderPlacing(PrintDbContext printDbContext, ShopDbContext db, ThirdConfig thirdConfig, ShopOrder shopOrder, string shopName, WechatTemplateSendOptions options, ILogger _logger)
        {
            //是否外卖单
            if (shopOrder.IsTakeOut)
            {
                //var takeOutInfo = db.Query<ShopTakeOutInfo>()
                //.Where(m => !m.IsDel)
                //.Where(m => m.ShopId == shopOrder.ShopId)
                //.FirstOrDefault();
                ////自动接单
                //if (takeOutInfo!=null && takeOutInfo.AutoTakeOrdre)
                //{
                //    shopOrder.Status = ShopOrderStatus.已确认;
                //    PrintOrder(printDbContext, db, shopOrder, shopName, _logger);
                //}
                PrintOrder(printDbContext, db, shopOrder, shopName, _logger);
            }
            else
            {
                PrintOrder(printDbContext, db, shopOrder, shopName, _logger);
            }


            if (!shopOrder.IsSend)
            {
                var receiver = db.Query <ShopOrderReceiver>()
                               .Where(m => !m.IsDel)
                               .Where(m => m.IsUsed)
                               .Where(m => m.ShopId == shopOrder.ShopId)
                               .Select(m => m.ReceiverOpenId)
                               .Distinct()
                               .ToList();
                receiver.ForEach(o =>
                                 shopOrder.SendTemplateMessage(db, options, o, _logger));
            }
            shopOrder.IsSend = true;

            if (!shopOrder.ShopPartId.HasValue && !shopOrder.ShopOrderSelfHelpId.HasValue)
            {
                var shoptakeoutinfo      = db.ShopTakeOutInfo.FirstOrDefault(r => r.ShopId == shopOrder.ShopId && !r.IsDel);
                var shopordertakeoutinfo = db.ShopOrderTakeouts.FirstOrDefault(r => r.ShopOrderId == shopOrder.Id && !r.IsDel);
                if (shoptakeoutinfo != null && shoptakeoutinfo.TakeDistributionType == TakeDistributionType.达达配送 && shopordertakeoutinfo.TakeWay == TakeWay.送货上门)
                {
                    //  await ThirdOrderFinish(db, thirdConfig, shopOrder, _logger, ExSource.支付成功);

                    ThirdAfterOrder(db, thirdConfig, shopOrder, _logger);
                }
            }



            db.SaveChanges();
            _logger.LogInformation("=================其他订单回调完成===============");
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 设置拼团订单支付完成
        /// </summary>
        /// <param name="printDbContext"></param>
        /// <param name="shopDb"></param>
        /// <param name="rechange"></param>
        /// <param name="options"></param>
        /// <param name="logger"></param>
        static void SetConglomerationOrderFinish(PrintDbContext printDbContext, ShopDbContext db, MemberTradeForRechange memberTradeForRechange, WechatTemplateSendOptions options, ILogger _logger)
        {
            var model = db.ConglomerationOrder.Find(memberTradeForRechange.ConglomerationOrderId);

            if (model.PayTime.HasValue)
            {
                return;
            }
            model.PayTime = DateTime.Now;
            model.Status  = ShopOrderStatus.已支付;
            model.PayWay  = "微信支付";
            db.SaveChanges();
            model.Payment = (int)memberTradeForRechange.TotalFee;
            var shopName = db.Query <Shop>()
                           .Where(m => m.Id == model.ShopId)
                           .Select(m => m.Name)
                           .FirstOrDefault();

            AfterConglomerationOrderPlacing(printDbContext, db, model, shopName, options, _logger);

            memberTradeForRechange.Status = MemberTradeForRechangeStatus.成功;

            db.SaveChanges();
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 拼团支付成功之后操作
        /// </summary>
        static void AfterConglomerationOrderPlacing(PrintDbContext printDbContext, ShopDbContext db, ConglomerationOrder conglomerationOrder, string shopName, WechatTemplateSendOptions options, ILogger _logger)
        {
            _logger.LogInformation("=================拼团订单回调开始===============");

            var isExist = db.ConglomerationParticipation.FirstOrDefault(m => !m.IsDel && m.ConglomerationSetUpId.Equals(conglomerationOrder.ConglomerationSetUpId) && m.ConglomerationOrderId.Equals(conglomerationOrder.Id));

            if (isExist != null)
            {
                return;
            }
            var conglomerationSetUp = db.ConglomerationSetUp.Find(conglomerationOrder.ConglomerationSetUpId);
            var member = db.Member.Find(conglomerationOrder.MemberId);

            //添加参团信息
            ConglomerationParticipation conglomerationParticipation = new ConglomerationParticipation();

            conglomerationParticipation.CreateTime            = DateTime.Now;
            conglomerationParticipation.AvatarUrl             = member.Avatar ?? "";
            conglomerationParticipation.NickName              = member.NickName ?? "";
            conglomerationParticipation.ConglomerationSetUpId = conglomerationOrder.ConglomerationSetUpId;
            conglomerationParticipation.Role     = conglomerationSetUp.MemberId.Equals(conglomerationOrder.MemberId) ? ParticipationRole.团长 : ParticipationRole.团员;
            conglomerationParticipation.MemberId = conglomerationOrder.MemberId;
            conglomerationParticipation.ConglomerationOrderId    = conglomerationOrder.Id;
            conglomerationParticipation.ConglomerationActivityId = conglomerationOrder.ConglomerationActivityId;
            db.ConglomerationParticipation.Add(conglomerationParticipation);
            //更新已发起拼团的队伍状态
            conglomerationSetUp.CurrentMemberNumber = conglomerationSetUp.CurrentMemberNumber + 1;
            conglomerationSetUp.Status = conglomerationSetUp.CurrentMemberNumber.Equals(conglomerationSetUp.MemberNumber) ? ConglomerationSetUpStatus.已经成团 : ConglomerationSetUpStatus.未成团;
            _logger.LogInformation($"当前拼团状态 conglomerationSetUp.Status:{conglomerationSetUp.Status}");
            conglomerationOrder.Status = ShopOrderStatus.待成团;
            if (conglomerationSetUp.Status.Equals(ConglomerationSetUpStatus.已经成团))
            {
                conglomerationSetUp.SuccessfulTime = DateTime.Now;
                _logger.LogInformation("=============================已经成团修改订单状态开始========================");
                _logger.LogInformation($"团IDconglomerationOrder.ConglomerationSetUpId {conglomerationOrder.ConglomerationSetUpId}");
                conglomerationOrder.Status = conglomerationOrder.Type == ConsignmentType.自提 ? ShopOrderStatus.待自提 : ShopOrderStatus.待配送;
                var order = db.ConglomerationOrder.Where(m => !m.IsDel && m.ConglomerationSetUpId.Equals(conglomerationOrder.ConglomerationSetUpId)).ToList();
                _logger.LogInformation($"需更改订单状态数量{order.Count()}");
                foreach (var item in order)
                {
                    if (item.Type == ConsignmentType.自提)
                    {
                        _logger.LogInformation($"订单Id:{item.Id} 更改为执行待自提");
                        if (item.Status == ShopOrderStatus.待成团)
                        {
                            item.Status = ShopOrderStatus.待自提;
                        }
                    }
                    else
                    {
                        if (item.Status == ShopOrderStatus.待成团)
                        {
                            _logger.LogInformation($"订单Id:{item.Id} 更改为执行待配送");
                            item.Status = ShopOrderStatus.待配送;
                        }
                    }
                }
                _logger.LogInformation("=============================已经成团修改订单状态结束========================");
            }

            //发送推送
            if (!conglomerationOrder.IsSend)
            {
                var receiver = db.Query <ShopOrderReceiver>()
                               .Where(m => !m.IsDel)
                               .Where(m => m.IsUsed)
                               .Where(m => m.ShopId == conglomerationOrder.ShopId)
                               .Select(m => m.ReceiverOpenId)
                               .Distinct()
                               .ToList();
                receiver.ForEach(o =>
                                 conglomerationOrder.SendTemplateMessage(options, o, _logger));
            }

            conglomerationOrder.IsSend = true;
            db.SaveChanges();
            _logger.LogInformation("=================拼团订单回调结束===============");
        }
Ejemplo n.º 14
0
        static void SetShopOrderFinish(PrintDbContext printDbContext, ShopDbContext db,
                                       MemberTradeForRechange memberTradeForRechange, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger)
        {
            if (!memberTradeForRechange.ShopOrderId.HasValue)
            {
                throw new Exception("memberTradeForRechange.ShopOrderId is null");
            }
            var shopOrder = db.ShopOrders.FirstOrDefault(p => p.Id == memberTradeForRechange.ShopOrderId.Value);

            shopOrder.PayWay = "微信支付";
            memberTradeForRechange.Status = MemberTradeForRechangeStatus.成功;
            db.SaveChanges();
            OrderFinish(printDbContext, db, options, toptions, shopOrder, _logger);
            var shopName = db.Query <Shop>()
                           .Where(m => m.Id == shopOrder.ShopId)
                           .Select(m => m.Name)
                           .FirstOrDefault();

            AfterOrderPlacing(printDbContext, db, toptions, shopOrder, shopName, options, _logger);
        }
Ejemplo n.º 15
0
        public static void SetFinish(this MemberTradeForRechange rechange, PrintDbContext printDbContext, ThirdConfig toptions, ShopDbContext shopDb, DbContext db, WechatTemplateSendOptions options, PayResponseBaseHandler result, ILogger _logger)
        {
            if (result.TradeState != "NOTPAY")
            {
                if (rechange.Status == MemberTradeForRechangeStatus.未完成)
                {
                    if (rechange.TotalFee != result.TotalFee)
                    {
                        throw new Exception("指定的金额不对应");
                    }
                    rechange.OutBank          = result.Xml;
                    rechange.MechanismTradeNo = result.TransactionId;
                    switch (result.TradeState)
                    {
                    case "SUCCESS":
                        db.SetMemberTradeForRechangeSuccess(rechange);
                        if (rechange.OrderType == OrderType.充值订单)
                        {
                            SetShopMemberRechangeFinish(rechange, shopDb);
                        }
                        else
                        {
                            SetShopOrderFinish(printDbContext, shopDb, rechange, options, toptions, _logger);
                        }
                        break;

                    case "CLOSED":
                        rechange.Status = MemberTradeForRechangeStatus.取消;
                        break;

                    default:
                        db.SetMemberTradeForRechangeFail(rechange, result.TradeState);
                        break;
                    }
                }
            }
        }
Ejemplo n.º 16
0
        public static void SetFinish(this MemberTradeForRechange rechange, PrintDbContext printDbContext, ShopDbContext shopDb, DbContext db, WechatTemplateSendOptions options, ThirdConfig toptions, ILogger _logger)
        {
            if (rechange.ShopOrderId != 0)
            {
                if (rechange.OrderType == OrderType.充值订单)
                {
                    SetShopMemberRechangeFinish(rechange, shopDb);
                }
                else
                {
                    SetShopOrderFinish(printDbContext, shopDb, rechange, options, toptions, _logger);
                }
            }
            if (rechange.ConglomerationOrderId != 0)
            {
                _logger.LogInformation("进入回调,拼团订单");

                try
                {
                    SetConglomerationOrderFinish(printDbContext, shopDb, rechange, options, _logger);
                }
                catch (Exception e)
                {
                    _logger.LogInformation($"回调错误,错误信息:{ e}");

                    throw;
                }
            }
        }
Ejemplo n.º 17
0
        /// <summary>
        /// 拼团订单推送
        /// </summary>
        /// <param name="shopOrder"></param>
        /// <param name="wechatOptions"></param>
        /// <param name="receiverOpenId"></param>
        /// <param name="logger"></param>
        /// <returns></returns>
        static bool SendTemplateMessage(this ConglomerationOrder conglomerationOrder, WechatTemplateSendOptions wechatOptions,
                                        string receiverOpenId, ILogger logger)
        {
            logger.LogInformation($"推送拼团订单conglomerationOrderId:{conglomerationOrder.Id}");

            try
            {
                if (string.IsNullOrEmpty(receiverOpenId))
                {
                    return(false);
                }
                string accessToken = AccessTokenContainer.GetAccessTokenResult(wechatOptions.AppId).access_token;
                //logger.LogInformation("推送的accesstoken:{0}", accessToken);
                string url = wechatOptions.SendUrl + accessToken;

                TemplateData data = new TemplateData();
                #region 订单参数
                string remark = "";
                data.Add("first", new TemplateDataItem()
                {
                    value = "您好,您有新的支付订单请及时处理!",
                    color = TemplateSendColor
                });
                data.Add("keyword1", new TemplateDataItem()
                {
                    value = conglomerationOrder.OrderNumber.ToString(),
                    color = TemplateSendColor
                });
                data.Add("keyword2", new TemplateDataItem()
                {
                    value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    color = TemplateSendColor
                });
                data.Add("remark", new TemplateDataItem()
                {
                    value = remark,
                    color = TemplateSendColor
                });
                #endregion
                string detailUrl = $"http://manager.91huichihuihe.com//api/ShopOrderSetAPI/Manager/GetConglomerationOrderView?orderid={conglomerationOrder.Id}&openid={receiverOpenId}";
                ShopOrderTemplateModel templateModel = new ShopOrderTemplateModel()
                {
                    touser      = receiverOpenId,
                    template_id = wechatOptions.ServiceTemplateId,
                    url         = detailUrl,
                    data        = data
                };


                JsonSerializer jsonSerializer = new JsonSerializer();

                var responseWait = httpClient.PostAsync(url, new StringContent(JsonConvert.SerializeObject(templateModel)));
                responseWait.Wait();
                var response = responseWait.Result;

                if (response.IsSuccessStatusCode)
                {
                    var reContentWait = response.Content.ReadAsStringAsync();
                    reContentWait.Wait();
                    var reContent = reContentWait.Result;
                    if (JObject.Parse(reContent).TryGetValue("errcode", out JToken errcode))
                    {
                        if (errcode.Value <int>() == 0)
                        {
                            conglomerationOrder.IsSend = true;
                        }
                        else
                        {
                            conglomerationOrder.IsSend = false;
                        }
                    }
                    else
                    {
                        conglomerationOrder.IsSend = false;
                    }
                    return(true);
                }
                else
                {
                    var reContentWait = response.Content.ReadAsStringAsync();
                    reContentWait.Wait();
                    var reContent = reContentWait.Result;
                    logger.LogInformation("模板消息出错:{0}", reContent);
                    return(false);
                }
            }
            catch (Exception e)
            {
                logger.LogInformation("模板消息出错:{0}", e.Message);
                return(false);
            }
        }
Ejemplo n.º 18
0
        static bool SendTemplateMessage(this ShopOrder shopOrder, ShopDbContext db, WechatTemplateSendOptions wechatOptions,
                                        string receiverOpenId, ILogger logger)
        {
            //logger.LogInformation("推送订单订单shopOrderId:{0}", shopOrder.Id);
            try
            {
                if (string.IsNullOrEmpty(receiverOpenId))
                {
                    return(false);
                }
                string accessToken = AccessTokenContainer.GetAccessTokenResult(wechatOptions.AppId).access_token;
                //logger.LogInformation("推送的accesstoken:{0}", accessToken);
                string       url  = wechatOptions.SendUrl + accessToken;
                TemplateData data = new TemplateData();
                string       templateId;
                string       remark = shopOrder.Remark ?? "";

                if (shopOrder.IsTakeOut)
                {
                    var takeOutInfo = db.Query <ShopOrderTakeout>().FirstOrDefault(m => m.ShopOrderId == shopOrder.Id);

                    MemberAddress address = null;
                    if (takeOutInfo != null && takeOutInfo.TakeWay == TakeWay.送货上门)
                    {
                        address = db.Query <MemberAddress>().FirstOrDefault(m => m.MemberId == shopOrder.MemberId);
                    }
                    templateId = wechatOptions.TakeOutTemplateId;
                    string customInfo = "", customAddress = "";
                    if (address != null)
                    {
                        customInfo    = $"{address.Name}{address.Sex}({address.Phone})";
                        customAddress = $"{address.Area}{address.Detail}";
                    }
                    else
                    {
                        customInfo    = "自提";
                        customAddress = "自提";
                    }
                    #region 订单参数
                    data.Add("first", new TemplateDataItem()
                    {
                        value = $"收到新的外卖订单!({DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")})",
                        color = TemplateSendColor
                    });
                    data.Add("keyword1", new TemplateDataItem()
                    {
                        value = shopOrder.OrderNumber,
                        color = TemplateSendColor
                    });
                    data.Add("keyword2", new TemplateDataItem()
                    {
                        value = db.GetSingle <Shop>(shopOrder.ShopId).Name,
                        color = TemplateSendColor
                    });
                    data.Add("keyword3", new TemplateDataItem()
                    {
                        value = customInfo,
                        color = TemplateSendColor
                    });
                    data.Add("keyword4", new TemplateDataItem()
                    {
                        value = customAddress,
                        color = TemplateSendColor
                    });
                    data.Add("keyword5", new TemplateDataItem()
                    {
                        value = $"¥{(shopOrder.Payment ?? 0) / 100f}",
                        color = TemplateSendColor
                    });
                    data.Add("remark", new TemplateDataItem()
                    {
                        value = remark,
                        color = TemplateSendColor
                    });
                    #endregion
                }
                else
                {
                    templateId = wechatOptions.ServiceTemplateId;
                    #region 订单参数
                    data.Add("first", new TemplateDataItem()
                    {
                        value = "您好,您有新的支付订单请及时处理!",
                        color = TemplateSendColor
                    });
                    data.Add("keyword1", new TemplateDataItem()
                    {
                        value = shopOrder.OrderNumber.ToString(),
                        color = TemplateSendColor
                    });
                    data.Add("keyword2", new TemplateDataItem()
                    {
                        value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                        color = TemplateSendColor
                    });
                    data.Add("remark", new TemplateDataItem()
                    {
                        value = remark,
                        color = TemplateSendColor
                    });
                    #endregion
                }

                string detailUrl = $"http://manager.91huichihuihe.com/api/ShopOrderSetAPI/Manager/GetShopOrderView?orderid={shopOrder.Id}&openid={receiverOpenId}";
                ShopOrderTemplateModel templateModel = new ShopOrderTemplateModel()
                {
                    touser      = receiverOpenId,
                    template_id = templateId,
                    url         = detailUrl,
                    data        = data
                };


                JsonSerializer jsonSerializer = new JsonSerializer();

                var responseWait = httpClient.PostAsync(url, new StringContent(JsonConvert.SerializeObject(templateModel)));
                responseWait.Wait();
                var response = responseWait.Result;

                if (response.IsSuccessStatusCode)
                {
                    var reContentWait = response.Content.ReadAsStringAsync();
                    reContentWait.Wait();
                    var reContent = reContentWait.Result;
                    //if (JObject.Parse(reContent).TryGetValue("errcode", out JToken errcode))
                    //{
                    //    if (errcode.Value<int>() == 0)
                    //    {
                    //        shopOrder.IsSend = true;
                    //    }
                    //    else
                    //    {
                    //        shopOrder.IsSend = false;
                    //    }
                    //}
                    //else
                    //{
                    //    shopOrder.IsSend = false;
                    //}
                    return(true);
                }
                else
                {
                    var reContentWait = response.Content.ReadAsStringAsync();
                    reContentWait.Wait();
                    var reContent = reContentWait.Result;
                    logger.LogInformation("模板消息出错:{0}", reContent);
                    return(false);
                }
            }
            catch (Exception e)
            {
                logger.LogInformation("模板消息出错:{0}", e.Message);
                return(false);
            }
        }