Example #1
0
        /// <summary>
        /// 添加通知人
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private async Task AddListenerAsync(WxEvent e)
        {
            if (!int.TryParse(e.EventKey, out int businessId))
            {
                return;
            }
            var count = Context.WxListenUsers.Count(a => a.BusinessId == businessId);

            if (count >= 4)
            {
                return;                 // 添加人数不能大于4
            }
            // 已存在的不再添加
            if ((await Context.WxListenUsers.CountAsync(a => a.BusinessId == businessId && a.openid == e.FromUserName)) > 0)
            {
                return;
            }
            var business = await GetAsync <Business>(businessId);

            var token = await GetTokenAsync(business.WeChatAppId, business.WeChatSecret);

            var result = await WxHelper.GetUserInfoAsync(e.FromUserName, token);

            var user = JsonConvert.DeserializeObject <WxListenUser>(result);

            user.BusinessId = businessId;
            await Context.AddAsync(user);

            await Context.SaveChangesAsync();
        }
Example #2
0
        public async Task <object> WxMsgHandlerAsync(WxEvent e)
        {
            if (e.MsgType == "event" && e.Event == "SCAN")
            {
                await AddListenerAsync(e);

                return("ok");
            }
            else if (e.MsgType == "event" && e.Event == "submit_membercard_user_info")
            {
                await MemberActiveAsync(e);

                return("ok");
            }
            return(null);
        }
Example #3
0
        /// <summary>
        /// 会员卡激活
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        private async Task MemberActiveAsync(WxEvent e)
        {
            var card = await Context.WxCards.FirstOrDefaultAsync(a => a.CardId == e.CardId);

            var business = await GetAsync <Business>(card.BusinessId);

            var token = await GetTokenAsync(business.WeChatAppId, business.WeChatSecret);

            var res = await WxHelper.GetMemberInfoAsync(token, e.CardId, e.UserCardCode);

            var json = JObject.Parse(res);

            if (json["errcode"].ToString() != "0")
            {
                // 获取会员信息失败,重新设置一遍Token,再试一次
                await SetTokenAsync(business.WeChatAppId, business.WeChatSecret);

                res = await WxHelper.GetMemberInfoAsync(token, e.CardId, e.UserCardCode);

                json = JObject.Parse(res);
                if (json["errcode"].ToString() != "0")
                {
                    Log.Error($"获取会员[{e.UserCardCode}]信息失败:{json["errmsg"]}");
                    return;
                }
            }
            var entity = new WxMember
            {
                Code       = e.UserCardCode,
                NickName   = json["nickname"].ToString(),
                CardId     = e.CardId,
                WxCardId   = card.ID,
                OpenId     = e.FromUserName,
                BusinessId = card.BusinessId
            };

            if (json["user_info"]["common_field_list"] != null)
            {
                var arr = json["user_info"]["common_field_list"].ToArray();
                entity.Name  = arr.FirstOrDefault(a => a["name"].ToString() == "USER_FORM_INFO_FLAG_NAME")?["value"].ToString();
                entity.Phone = arr.FirstOrDefault(a => a["name"].ToString() == "USER_FORM_INFO_FLAG_MOBILE")?["value"].ToString();
                var gender = arr.FirstOrDefault(a => a["name"].ToString() == "USER_FORM_INFO_FLAG_SEX")?["value"].ToString();
                if (gender == "MALE")
                {
                    entity.Gender = UserGender.Male;
                }
                else if (gender == "FEMALE")
                {
                    entity.Gender = UserGender.Female;
                }
                var birthday = arr.FirstOrDefault(a => a["name"].ToString() == "USER_FORM_INFO_FLAG_BIRTHDAY")?["value"].ToString();
                if (birthday != null)
                {
                    entity.Birthday = Convert.ToDateTime(birthday);
                }
            }
            var userStr = await WxHelper.GetUserInfoAsync(e.FromUserName, token);

            var user = JsonConvert.DeserializeObject <WxListenUser>(userStr);

            entity.Logo = user.headimgurl;
            await Context.AddAsync(entity);

            await Context.SaveChangesAsync();
        }