예제 #1
0
        /// <summary>
        /// 获取Access Token
        /// </summary>
        /// <param name="code"></param>
        private void GetAccessToken(string code)
        {
            MarketSendLogBLL    sendServer = new MarketSendLogBLL(loggingSessionInfo);
            MarketSendLogEntity sendInfo   = new MarketSendLogEntity();
            Random rad  = new Random();
            int    iRad = rad.Next(1000, 100000);

            try
            {
                sendInfo.LogId           = BaseService.NewGuidPub();
                sendInfo.IsSuccess       = 1;
                sendInfo.MarketEventId   = "GetAccessToken";
                sendInfo.SendTypeId      = "220";
                sendInfo.Phone           = iRad.ToString();
                sendInfo.TemplateContent = "GetAccessToken:code:" + code + ",strAppId:" + strAppId + ",strAppSecret:" + strAppSecret;
                sendInfo.VipId           = code;
                sendInfo.WeiXinUserId    = "1111";
                sendInfo.CreateTime      = System.DateTime.Now;
                sendServer.Create(sendInfo);
                var sendObjList = sendServer.QueryByEntity(new MarketSendLogEntity
                {
                    VipId          = code
                    , WeiXinUserId = "AccessToken"
                    , IsDelete     = 0
                }, null);
                string data = string.Empty;
                if (sendObjList == null || sendObjList.Length == 0 || sendObjList[0] == null)
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
                    string    url         = "https://api.weixin.qq.com/sns/oauth2/access_token";
                    WebClient myWebClient = new WebClient();
                    // 注意这种拼字符串的ContentType
                    myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                    // 转化成二进制数组
                    var postData = "appid=" + strAppId + "&secret=" + strAppSecret + "&code=" + code + "&grant_type=authorization_code";
                    sendInfo.LogId           = BaseService.NewGuidPub();
                    sendInfo.IsSuccess       = 1;
                    sendInfo.MarketEventId   = "GetAccessToken转化成二进制数组";
                    sendInfo.SendTypeId      = "220";
                    sendInfo.Phone           = iRad.ToString();
                    sendInfo.TemplateContent = string.Format("{0}", postData);
                    sendInfo.VipId           = code;
                    sendInfo.WeiXinUserId    = "AccessToken-Para";
                    sendInfo.CreateTime      = System.DateTime.Now;
                    sendServer.Create(sendInfo);
                    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                    // 上传数据,并获取返回的二进制数据.
                    byte[] responseArray = myWebClient.UploadData(url, "POST", byteArray);
                    data = System.Text.Encoding.UTF8.GetString(responseArray);

                    if (data.IndexOf("errcode") > 1)
                    {
                        var sendObjList1 = sendServer.QueryByEntity(new MarketSendLogEntity
                        {
                            VipId = code
                            ,
                            WeiXinUserId = "AccessToken"
                            ,
                            IsDelete = 0
                            ,
                            IsSuccess = 1
                        }, null);
                        if (sendObjList1 == null || sendObjList1.Length == 0 || sendObjList1[0] == null)
                        {
                        }
                        else
                        {
                            data = sendObjList1[0].TemplateContent.ToString().Trim();
                        }
                    }
                    sendInfo.LogId = BaseService.NewGuidPub();
                    if (data.IndexOf("errcode") > 1)
                    {
                        sendInfo.IsSuccess = 0;
                    }
                    else
                    {
                        sendInfo.IsSuccess = 1;
                    }
                    sendInfo.MarketEventId   = "GetAccessToken-3";
                    sendInfo.SendTypeId      = "220";
                    sendInfo.Phone           = iRad.ToString();
                    sendInfo.TemplateContent = string.Format("{0}", data);
                    sendInfo.VipId           = code;
                    sendInfo.WeiXinUserId    = "AccessToken";
                    sendInfo.CreateTime      = System.DateTime.Now;
                    sendServer.Create(sendInfo);
                }
                else
                {
                    data                     = sendObjList[0].TemplateContent.ToString().Trim();
                    sendInfo.LogId           = BaseService.NewGuidPub();
                    sendInfo.IsSuccess       = 1;
                    sendInfo.MarketEventId   = "GetAccessToken-3-2";
                    sendInfo.SendTypeId      = "220";
                    sendInfo.Phone           = iRad.ToString();
                    sendInfo.TemplateContent = string.Format("{0}", data);
                    sendInfo.VipId           = code;
                    sendInfo.WeiXinUserId    = "AccessToken--重复2";
                    sendInfo.CreateTime      = System.DateTime.Now;
                    sendServer.Create(sendInfo);
                }
                var tokenInfo = data.DeserializeJSONTo <cAccessTokenReturn>();
                //Response.Write("<br/>");
                //Response.Write("获取Access Token");
                if (tokenInfo != null)
                {
                    //Response.Write("<br/>");
                    //Response.Write("获取Access Token不为空");
                    GetUserIdByOpenId(tokenInfo.openid);
                }
                Loggers.Debug(new DebugLogInfo()
                {
                    Message = string.Format("GetAccessToken: {0}", data)
                });
            }
            catch (Exception ex) {
                Loggers.Exception(new ExceptionLogInfo()
                {
                    ErrorMessage = string.Format("GetAccessToken错误: {0}", ex.ToString())
                });
                Response.Write("向微信请求认证Access Token出错,请联系管理员尽快处理.");
                sendInfo.LogId           = BaseService.NewGuidPub();
                sendInfo.IsSuccess       = 0;
                sendInfo.MarketEventId   = "向微信请求认证Access Token出错";
                sendInfo.SendTypeId      = "200";
                sendInfo.Phone           = iRad.ToString();
                sendInfo.TemplateContent = string.Format("GetAccessToken错误: {0}", ex.ToString());
                sendInfo.VipId           = code;
                sendInfo.WeiXinUserId    = "1111";
                sendInfo.CreateTime      = System.DateTime.Now;
                sendServer.Create(sendInfo);
                Response.End();
            }
        }
예제 #2
0
        /// <summary>
        /// 第二步:通过code换取网页授权access_token
        /// </summary>
        /// <param name="code">填写第一步获取的code参数</param>
        /// <param name="strAppId">公众号的唯一标识</param>
        /// <param name="strAppSecret">公众号的appsecret</param>
        /// <param name="loggingSessionInfo"></param>
        /// <param name="iRad"></param>
        /// <returns></returns>
        public string GetAccessToken(string code, string strAppId, string strAppSecret, LoggingSessionInfo loggingSessionInfo, int iRad, out string token, string openOAuthAppid = null)
        {
            MarketSendLogBLL    sendServer = new MarketSendLogBLL(loggingSessionInfo);
            MarketSendLogEntity sendInfo   = new MarketSendLogEntity();

            //Random rad = new Random();
            //int iRad = rad.Next(1000, 100000);
            try
            {
                sendInfo.LogId           = BaseService.NewGuidPub();
                sendInfo.IsSuccess       = 1;
                sendInfo.MarketEventId   = "GetAccessToken-1";
                sendInfo.SendTypeId      = "200";
                sendInfo.Phone           = iRad.ToString();
                sendInfo.TemplateContent = "GetAccessToken:code:" + code + ",strAppId:" + strAppId + ",strAppSecret:" + strAppSecret;
                sendInfo.VipId           = code;
                sendInfo.WeiXinUserId    = "1111";
                sendInfo.CreateTime      = System.DateTime.Now;
                sendServer.Create(sendInfo);

                var sendObjList = sendServer.QueryByEntity(new MarketSendLogEntity
                {
                    VipId = code
                    ,
                    WeiXinUserId = "AccessToken"
                    ,
                    IsDelete = 0
                }, null);
                string data = string.Empty;
                if (sendObjList == null || sendObjList.Length == 0 || sendObjList[0] == null)
                {
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
                    string    url         = "https://api.weixin.qq.com/sns/oauth2/access_token";
                    WebClient myWebClient = new WebClient();
                    // 注意这种拼字符串的ContentType
                    myWebClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
                    // 转化成二进制数组
                    var postData = string.Empty;
                    if (string.IsNullOrEmpty(strAppSecret))//已登录授权了
                    {
                        if (string.IsNullOrEmpty(openOAuthAppid))
                        {
                            var wailist = new WApplicationInterfaceBLL(loggingSessionInfo).QueryByEntity(new WApplicationInterfaceEntity {
                                AppID = strAppId, CustomerId = loggingSessionInfo.ClientID
                            }, null).FirstOrDefault();
                            openOAuthAppid = wailist != null ? wailist.OpenOAuthAppid : string.Empty;
                        }

                        //openOAuthAppid = !string.IsNullOrEmpty(openOAuthAppid) ? openOAuthAppid : "wx691c2f2bbac04b4b";
                        var openOAuthUrl = ConfigurationManager.AppSettings["openOAuthUrl"];
                        var openuri      = openOAuthUrl + "/OpenOAuth/GetComponentAccessToken";
                        var opendata     = CommonBLL.GetRemoteData(openuri, "GET", string.Empty).Replace("\"", "");//先获取第三方平台的component_access_token
                        var url2         = "https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=" + strAppId + "&code=" + code + "&grant_type=authorization_code&component_appid=" + openOAuthAppid + "&component_access_token=" + opendata + "";
                        opendata = CommonBLL.GetRemoteData(url2, "GET", string.Empty);
                        data     = opendata;
                    }
                    else//未授权的情况下
                    {
                        postData                 = "appid=" + strAppId + "&secret=" + strAppSecret + "&code=" + code + "&grant_type=authorization_code";
                        sendInfo.LogId           = BaseService.NewGuidPub();
                        sendInfo.IsSuccess       = 1;
                        sendInfo.MarketEventId   = "GetAccessToken-2";
                        sendInfo.SendTypeId      = "200";
                        sendInfo.Phone           = iRad.ToString();
                        sendInfo.TemplateContent = string.Format("{0}", postData);
                        sendInfo.VipId           = code;
                        sendInfo.WeiXinUserId    = "GetAccessToken-Para";
                        sendInfo.CreateTime      = System.DateTime.Now;
                        sendServer.Create(sendInfo);

                        byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                        // 上传数据,并获取返回的二进制数据.
                        byte[] responseArray = myWebClient.UploadData(url, "POST", byteArray);
                        data = System.Text.Encoding.UTF8.GetString(responseArray);
                    }

                    if (data.IndexOf("errcode") > 1)
                    {
                        var sendObjList1 = sendServer.QueryByEntity(new MarketSendLogEntity
                        {
                            VipId = code
                            ,
                            WeiXinUserId = "AccessToken"
                            ,
                            IsDelete = 0
                            ,
                            IsSuccess = 1
                        }, null);
                        if (sendObjList1 == null || sendObjList1.Length == 0 || sendObjList1[0] == null)
                        {
                        }
                        else
                        {
                            data = sendObjList1[0].TemplateContent.ToString().Trim();
                        }
                    }
                    sendInfo.LogId = BaseService.NewGuidPub();
                    if (data.IndexOf("errcode") > 1)
                    {
                        sendInfo.IsSuccess = 0;
                    }
                    else
                    {
                        sendInfo.IsSuccess = 1;
                    }
                    sendInfo.MarketEventId   = "GetAccessToken-3";
                    sendInfo.SendTypeId      = "200";
                    sendInfo.Phone           = iRad.ToString();
                    sendInfo.TemplateContent = string.Format("{0}", data);
                    sendInfo.VipId           = code;
                    sendInfo.WeiXinUserId    = "AccessToken";
                    sendInfo.CreateTime      = System.DateTime.Now;
                    sendServer.Create(sendInfo);
                }
                else
                {
                    data                     = sendObjList[0].TemplateContent.ToString().Trim();
                    sendInfo.LogId           = BaseService.NewGuidPub();
                    sendInfo.IsSuccess       = 1;
                    sendInfo.MarketEventId   = "GetAccessToken-3-2";
                    sendInfo.SendTypeId      = "200";
                    sendInfo.Phone           = iRad.ToString();
                    sendInfo.TemplateContent = string.Format("{0}", data);
                    sendInfo.VipId           = code;
                    sendInfo.WeiXinUserId    = "AccessToken--重复2";
                    sendInfo.CreateTime      = System.DateTime.Now;
                    sendServer.Create(sendInfo);
                }
                var tokenInfo = data.DeserializeJSONTo <cAccessTokenReturn>();
                //Response.Write("<br/>");
                //Response.Write("获取Access Token");
                token = "";
                if (tokenInfo != null)
                {
                    //Response.Write("<br/>");
                    //Response.Write("获取Access Token不为空");
                    token = tokenInfo.access_token;
                    return(tokenInfo.openid);
                }
                else
                {
                    return("");
                }
                Loggers.Debug(new DebugLogInfo()
                {
                    Message = string.Format("GetAccessToken: {0}", data)
                });

                //Response.Write(data);
            }
            catch (Exception ex)
            {
                Loggers.Debug(new DebugLogInfo()
                {
                    Message = string.Format("GetAccessToken错误: {0}", ex.ToString())
                });
                sendInfo.LogId           = BaseService.NewGuidPub();
                sendInfo.IsSuccess       = 0;
                sendInfo.MarketEventId   = "GetAccessToken-4";
                sendInfo.SendTypeId      = "200";
                sendInfo.Phone           = iRad.ToString();
                sendInfo.TemplateContent = string.Format("GetAccessToken错误: {0}", ex.ToString());
                sendInfo.VipId           = code;
                sendInfo.WeiXinUserId    = "1111";
                sendInfo.CreateTime      = System.DateTime.Now;
                sendServer.Create(sendInfo);
                token = "";
                return("");
            }
        }