예제 #1
0
        public Task <OrgInfo> GetOrgInfo(string bsKey)
        {
            return(Task.Factory.StartNew(() =>
            {
                using (DB db = new DB())
                {
                    var orgInfo = db.OrgInfos.Find(bsKey);
                    if (orgInfo == null)
                    {
                        throw new Exception("错误的大屏号码");
                    }
                    if (string.IsNullOrEmpty(orgInfo.Ticket))
                    {
                        var qrcode = WXServiceManager.CreateQrcodeLIMIT(orgInfo.Key);

                        orgInfo.Ticket = qrcode.ticket;
                        orgInfo.Url = WXServiceManager.GetShortUrl(qrcode.url);
                        orgInfo = db.OrgInfos.Edit(orgInfo);
                        db.Save();
                    }
                    Context.Set("OrgInfo", orgInfo);
                    StartClass.log.WriteInfo("添加到组:" + Context.ConnectionId + "-" + orgInfo.Key);
                    context.Groups.Add(Context.ConnectionId, orgInfo.Key).Wait();
                    return orgInfo;
                }
            }));
        }
예제 #2
0
 public Task <string> GetAuthUrl()
 {
     return(Task.Factory.StartNew(() =>
     {
         return WXServiceManager.GetAuthUrl(((OrgInfo)Context.Get("OrgInfo")).Key.ToString());
     }));
 }
예제 #3
0
        /// <summary>
        /// 验证微信签名
        /// </summary>
        /// <returns></returns>
        /// * 将token、timestamp、nonce三个参数进行字典序排序
        /// * 将三个参数字符串拼接成一个字符串进行sha1加密
        /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。
        private bool CheckSignature(string signature, string timestamp, string nonce, string echostr)
        {
            string[] ArrTmp = { WXServiceManager._PushToken, timestamp, nonce };
            Array.Sort(ArrTmp);
            string tmpStr = string.Join("", ArrTmp);

            StartClass.log.WriteInfo(tmpStr);
            var result = WXServiceManager.SHA1(tmpStr, Encoding.UTF8).ToLower();

            StartClass.log.WriteInfo(result);
            return(signature == result);
        }
예제 #4
0
 public Task <UserInfo> GetUserForCode(string code)
 {
     return(Task.Factory.StartNew(() =>
     {
         var accessToken = WXServiceManager.GetWXWebAccessTokenForCode(code);
         if (string.IsNullOrEmpty(accessToken.openid))
         {
             throw new Exception("错误");
         }
         using (DB db = new DB())
         {
             //如果已经有了.
             var user = db.UserInfos.AsQuery().Where(w => w.WXOpenId == accessToken.openid).FirstOrDefault();
             if (user != null)
             {
                 Context.Set("UserInfo", user);
                 return user;
             }
             //如果没有,需要从新拉去并注册
             var WXUser = WXServiceManager.GetWXUserInfo(accessToken.openid, accessToken.access_token);
             //开始注册
             user = new UserInfo();
             user.WXOpenId = WXUser.openid;
             user.WXCity = WXUser.city;
             user.WXCountry = WXUser.country;
             user.WXHeadImgUrl = WXUser.headimgurl.Remove(WXUser.headimgurl.Length - 2);
             user.WXNickName = WXUser.nickname;
             user.WXProvince = WXUser.province;
             user.WXSex = WXUser.sex;
             user = db.UserInfos.Add(user);
             db.Save();
             Context.Set("UserInfo", user);
             return user;
         }
     }));
 }
예제 #5
0
        private HttpResponseMessage ResponseXML(WxXmlModel wxXmlModel)
        {
            string XML = "";

            StartClass.log.WriteInfo(wxXmlModel.MsgType + "-" + wxXmlModel.Event);

            switch (wxXmlModel.MsgType)
            {
            case "text":    //文本回复
                XML = GetText(wxXmlModel.FromUserName, wxXmlModel.ToUserName, wxXmlModel.Content);
                break;

            case "event":    //文本回复
                StartClass.log.WriteInfo("!!!!!!");
                if (wxXmlModel.Event == "subscribe" || wxXmlModel.Event == "SCAN")
                {
                    using (DB db = new DB())
                    {
                        StartClass.log.WriteInfo("!" + wxXmlModel.EventKey);
                        var org = db.OrgInfos.Find(wxXmlModel.EventKey);
                        StartClass.log.WriteInfo(wxXmlModel.EventKey);
                        if (org != null)
                        {
                            StartClass.log.WriteInfo(org.Key);
                            XML = ReArticle(wxXmlModel.FromUserName, wxXmlModel.ToUserName, org.OrgName, org.OrgName, "http://pic.cnblogs.com/avatar/743013/20150521120816.png", WXServiceManager.GetAuthUrl(org.Key));
                        }
                    }
                }
                else
                {
                    return(null);
                }
                break;

            default:    //默认回复
                XML = GetText(wxXmlModel.FromUserName, wxXmlModel.ToUserName, "未知的关键字");
                break;
            }
            StartClass.log.WriteInfo(XML);
            return(new HttpResponseMessage()
            {
                Content = new StringContent(XML, Encoding.UTF8, "application/xml")
            });
        }