Esempio n. 1
0
 public static bool GetAccessToken(out string accessToken, out string errMsg)
 {
     accessToken = string.Empty;
     errMsg      = string.Empty;
     if (SAppAccessTokenBusiness.GetAccessToken(out accessToken))
     {
         //如果缓存中存在访问access_token,直接返回缓存的access_token
         return(true);
     }
     else
     {
         //如果缓存中不存在访问access_token,调用微信接口获取,并写入缓存
         string url  = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", WeiXinConfig.WXSmallAppId, WeiXinConfig.WXSmallAppSecret);
         string json = Utils.WebClientDownloadString(url);
         Dictionary <string, object> dict = new Dictionary <string, object>();
         if (WeiXinJsonHelper.GetResponseJsonResult(json, ref dict))
         {
             accessToken = dict["access_token"].ToString();
             int expires = int.Parse(dict["expires_in"].ToString());
             SAppAccessTokenBusiness.AddAccessToken(accessToken, expires - 60);
             return(true);
         }
         else
         {
             errMsg = dict["errmsg"].ToString();
             return(false);
         }
     }
 }
Esempio n. 2
0
        public static bool GetOpenTokenForScanQR(string code, out string accsess_token, out string refresh_token, out string openId, out string unionId)
        {
            accsess_token = string.Empty;
            refresh_token = string.Empty;
            openId        = string.Empty;
            unionId       = string.Empty;

            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";

            url = string.Format(url, WeiXinConfig.OpenAppId, WeiXinConfig.OpenAppSecret, code);
            string str = Utils.WebClientDownloadString(url);
            Dictionary <string, object> dict = new Dictionary <string, object>();

            if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
            {
                accsess_token = dict["access_token"].ToString();
                refresh_token = dict["refresh_token"].ToString();
                openId        = dict["openid"].ToString();
                //unionId当且仅当该网站应用已获得该用户的userinfo授权时,才会出现该字段。
                unionId = dict.ContainsKey("unionid") ? dict["unionid"].ToString() : string.Empty;
                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 3
0
        public static bool GetUnionIdFromOpen(string openId, string accsess_token, out string unionId, out string errMsg)
        {
            unionId = string.Empty;
            errMsg  = string.Empty;
            if (XCCloudUnionIDBusiness.GetUnionID(openId, out unionId))
            {
                //如果缓存中存在访问unionId,直接返回缓存的unionId
                return(true);
            }
            else
            {
                //获取用户基本信息
                string url = "https://api.weixin.qq.com/sns/userinfo?access_token={0}&openid={1}";
                url = string.Format(url, accsess_token, openId);
                string list = Utils.WebClientDownloadString(url);
                Dictionary <string, object> dict = new Dictionary <string, object>();
                if (WeiXinJsonHelper.GetResponseJsonResult(list, ref dict))
                {
                    if (dict.ContainsKey("errcode"))
                    {
                        errMsg = dict["errmsg"].ToString();
                        return(false);
                    }

                    unionId = dict["unionid"].ToString();
                    return(true);
                }
                else
                {
                    errMsg = "获取用户基本信息出错";
                    return(false);
                }
            }
        }
Esempio n. 4
0
        public static bool GetTokenForScanQR(string code, out string accsess_token, out string refresh_token, out string openId, out string errMsg)
        {
            accsess_token = string.Empty;
            refresh_token = string.Empty;
            openId        = string.Empty;
            errMsg        = string.Empty;
            string url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code";

            url = string.Format(url, WeiXinConfig.AppId, WeiXinConfig.AppSecret, code);
            string str = Utils.WebClientDownloadString(url);
            Dictionary <string, object> dict = new Dictionary <string, object>();

            if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
            {
                accsess_token = dict["access_token"].ToString();
                refresh_token = dict["refresh_token"].ToString();
                openId        = dict["openid"].ToString();

                return(true);
            }
            else
            {
                errMsg = dict["errmsg"].ToString();
                return(false);
            }
        }
Esempio n. 5
0
        /// <summary>
        /// 获取微信访问openid
        /// </summary>
        /// <returns></returns>
        public static bool GetOpenId(string code, string key, out string openId)
        {
            openId = string.Empty;
            if (RegisterOpenIDBusiness.GetOpenId(Constant.WeiXinOpenId + key, out openId))
            {
                //如果缓存中存在访问openId,直接返回缓存的openId
                return(true);
            }
            else
            {
                //如果缓存中不存在访问openId,调用微信接口获取,并写入缓存
                string url  = string.Format("https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code", WeiXinConfig.AppId, WeiXinConfig.AppSecret, code);
                string json = Utils.WebClientDownloadString(url);
                Dictionary <string, object> dict = new Dictionary <string, object>();

                if (WeiXinJsonHelper.GetResponseJsonResult(json, ref dict))
                {
                    openId = dict["openid"].ToString();
                    int expires = int.Parse(dict["expires_in"].ToString());
                    RegisterOpenIDBusiness.AddOpenId(Constant.WeiXinOpenId + key, openId, expires - 60);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Esempio n. 6
0
        public static bool GetWeiXinSAppUserSession(string code, ref WeiXinSAppSessionModel sessionModel, out string serverSessionKey, out string errMsg)
        {
            sessionModel     = null;
            errMsg           = string.Empty;
            serverSessionKey = string.Empty;
            string url = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", WeiXinConfig.WXSmallAppId, WeiXinConfig.WXSmallAppSecret, code);
            string str = Utils.WebClientDownloadString(url);
            Dictionary <string, object> dict = new Dictionary <string, object>();

            LogHelper.SaveLog(TxtLogType.WeiXin, TxtLogContentType.Common, TxtLogFileType.Day, str);
            if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
            {
                sessionModel            = new WeiXinSAppSessionModel();
                sessionModel.OpenId     = dict["openid"].ToString();
                sessionModel.SessionKey = dict["session_key"].ToString();
                sessionModel.UnionId    = dict.ContainsKey("unionid") ? dict["unionid"].ToString():"";
                if (WeiXinSAppSessionBussiness.Add(sessionModel, WeiXinConfig.WXSmallAppSessionTime, out serverSessionKey))
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                errMsg = dict["errmsg"].ToString();
                return(false);
            }
        }
Esempio n. 7
0
        private bool getWxUser <T>(string openId, out T userInfo, out string errMsg)
        {
            userInfo = default(T);
            errMsg   = string.Empty;

            string accsess_token = string.Empty;

            if (TokenMana.GetAccessToken(out accsess_token))
            {
                string url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}";
                url = string.Format(url, accsess_token, openId);
                string str = Utils.WebClientDownloadString(url);
                Dictionary <string, object> dict = new Dictionary <string, object>();
                if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
                {
                    userInfo = Utils.DataContractJsonDeserializer <T>(str);
                }
                else
                {
                    errMsg = "获取用户信息出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                    return(false);
                }

                return(true);
            }
            else
            {
                errMsg = "获取微信令牌出错";
                return(false);
            }
        }
Esempio n. 8
0
        private bool getWxUsers <T>(string nextOpenId, out UserInfoCollection <T> userInfoCollection, out string errMsg)
        {
            userInfoCollection = null;
            errMsg             = string.Empty;

            string accsess_token = string.Empty;
            string openId        = string.Empty;

            if (TokenMana.GetAccessToken(out accsess_token))
            {
                string url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token={0}&next_openid={1}";
                url = string.Format(url, accsess_token, nextOpenId);
                string list = Utils.WebClientDownloadString(url);
                Dictionary <string, object> dict = new Dictionary <string, object>();
                if (WeiXinJsonHelper.GetResponseJsonResult(list, ref dict))
                {
                    var openidarr = ((Dictionary <string, object>)dict["data"])["openid"] as object[];
                    if (openidarr != null && openidarr.Length > 0)
                    {
                        var userinfoarr = new object[openidarr.Length];
                        for (int i = 0; i < openidarr.Length; i++)
                        {
                            userinfoarr[i] = new { openid = openidarr[i].ToString() };
                        }
                        var    pushData = new { user_list = userinfoarr };
                        string json     = Utils.SerializeObject(pushData).ToString();
                        url = "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token={0}";
                        url = string.Format(url, accsess_token);
                        string str = Utils.HttpPost(url, json);
                        if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
                        {
                            userInfoCollection = Utils.DataContractJsonDeserializer <UserInfoCollection <T> >(str);
                        }
                        else
                        {
                            errMsg = "获取用户基本信息出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                            return(false);
                        }
                    }
                }
                else
                {
                    errMsg = "获取用户列表出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                    return(false);
                }

                return(true);
            }
            else
            {
                errMsg = "获取微信令牌出错";
                return(false);
            }
        }
Esempio n. 9
0
        public static bool GetUnionId(string openId, out string unionId, out string errMsg)
        {
            unionId = string.Empty;
            errMsg  = string.Empty;
            if (XCCloudUnionIDBusiness.GetUnionID(openId, out unionId))
            {
                //如果缓存中存在访问unionId,直接返回缓存的unionId
                return(true);
            }
            else
            {
                //获取用户基本信息
                string access_token = string.Empty;
                if (TokenMana.GetAccessToken(out access_token))
                {
                    string url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}";
                    url = string.Format(url, access_token, openId);
                    string list = Utils.WebClientDownloadString(url);
                    Dictionary <string, object> dict = new Dictionary <string, object>();
                    if (WeiXinJsonHelper.GetResponseJsonResult(list, ref dict))
                    {
                        if (dict.ContainsKey("errcode"))
                        {
                            errMsg = dict["errmsg"].ToString();
                            return(false);
                        }

                        if (dict["subscribe"].ToString().Equals("0"))
                        {
                            errMsg = "该用户未关注微信公众号";
                            return(false);
                        }

                        unionId = dict["unionid"].ToString();
                        XCCloudUnionIDBusiness.SetUnionID(openId, unionId);
                        return(true);
                    }
                    else
                    {
                        errMsg = "获取用户基本信息出错";
                        return(false);
                    }
                }
                else
                {
                    errMsg = "获取微信令牌出错";
                    return(false);
                }
            }
        }
Esempio n. 10
0
        public static bool IsValid(string access_token)
        {
            string url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token={0}";

            url = string.Format(url, access_token);
            string list = Utils.WebClientDownloadString(url);
            Dictionary <string, object> dict = new Dictionary <string, object>();

            //LogHelper.SaveLog("access_token:" + access_token);
            if (WeiXinJsonHelper.GetResponseJsonResult(list, ref dict))
            {
                //LogHelper.SaveLog("ip_list.length:" + ((object[])dict["ip_list"]).Length);
                return(true);
            }
            else
            {
                LogHelper.SaveLog("errcode:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString());
                return(false);
            }
        }
Esempio n. 11
0
        private static bool Push <TConfig, TData>(string openId, string accessToken, string form_id, TData dataModel, out string errMsg)
        {
            errMsg = string.Empty;
            TConfig configModel = default(TConfig);

            if (!SAppMsgConfig.GetMsgTemplateConfig <TConfig>(ref configModel, CommonConfig.SAppMessagePushXmlFilePath))
            {
                errMsg = "读取微信消息配置文件出错";
                return(false);
            }

            if (string.IsNullOrEmpty(accessToken))
            {
                if (!SAppTokenMana.GetAccessToken(out accessToken, out errMsg))
                {
                    errMsg = "获取微信令牌出错";
                    return(false);
                }
            }

            string json = SAppMessagePushFactory.CreateMsgJson <TConfig, TData>(openId, form_id, configModel, dataModel);
            string url  = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token={0}";

            url = string.Format(url, accessToken);
            string str = Utils.HttpPost(url, json);

            Dictionary <string, object> dict = new Dictionary <string, object>();

            if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
            {
                return(true);
            }
            else
            {
                errMsg = dict["errmsg"].ToString();
                return(false);
            }
        }
Esempio n. 12
0
        private bool getWxFans <T>(string tagName, string nextOpenId, out UserInfoCollection <T> userInfoCollection, out string errMsg)
        {
            userInfoCollection = null;
            errMsg             = string.Empty;

            string accsess_token = string.Empty;
            string openId        = string.Empty;

            if (TokenMana.GetAccessToken(out accsess_token))
            {
                string url = "https://api.weixin.qq.com/cgi-bin/tags/get?access_token={0}";
                url = string.Format(url, accsess_token);
                Dictionary <string, object> dict = new Dictionary <string, object>();
                string list = Utils.WebClientDownloadString(url);
                if (WeiXinJsonHelper.GetResponseJsonResult(list, ref dict))
                {
                    var tagId = 0;
                    var tags  = (object[])dict["tags"];
                    if (tags != null && tags.Length > 0)
                    {
                        foreach (IDictionary <string, object> el in tags)
                        {
                            if (el != null)
                            {
                                var    dicPara = new Dictionary <string, object>(el, StringComparer.OrdinalIgnoreCase);
                                string name    = dicPara.ContainsKey("name") ? dicPara["name"].ToString() : string.Empty;
                                if (name.Equals(tagName, StringComparison.OrdinalIgnoreCase))
                                {
                                    int.TryParse(dicPara["id"].ToString(), out tagId);
                                    break;
                                }
                            }
                        }
                    }

                    if (tagId == 0)
                    {
                        errMsg = "该标签不存在";
                        return(false);
                    }

                    var    pushData = new { tagid = tagId, next_openid = nextOpenId };
                    string json     = Utils.SerializeObject(pushData).ToString();
                    url = "https://api.weixin.qq.com/cgi-bin/user/tag/get?access_token={0}";
                    url = string.Format(url, accsess_token);
                    string str = Utils.HttpPost(url, json);
                    if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
                    {
                        var openidarr = ((Dictionary <string, object>)dict["data"])["openid"] as object[];
                        if (openidarr != null && openidarr.Length > 0)
                        {
                            var userinfoarr = new object[openidarr.Length];
                            for (int i = 0; i < openidarr.Length; i++)
                            {
                                userinfoarr[i] = new { openid = openidarr[i].ToString() };
                            }
                            var pushData2 = new { user_list = userinfoarr };
                            json = Utils.SerializeObject(pushData2).ToString();
                            url  = "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token={0}";
                            url  = string.Format(url, accsess_token);
                            str  = Utils.HttpPost(url, json);
                            if (WeiXinJsonHelper.GetResponseJsonResult(str, ref dict))
                            {
                                userInfoCollection = Utils.DataContractJsonDeserializer <UserInfoCollection <T> >(str);
                            }
                            else
                            {
                                errMsg = "获取用户基本信息出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                                return(false);
                            }
                        }
                    }
                    else
                    {
                        errMsg = "获取标签粉丝信息出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                        return(false);
                    }
                }
                else
                {
                    errMsg = "获取标签列表出错:" + dict["errcode"].ToString() + " " + dict["errmsg"].ToString();
                    return(false);
                }

                return(true);
            }
            else
            {
                errMsg = "获取微信令牌出错";
                return(false);
            }
        }