목차
자동 승인
위챗 애플릿 위챗 개발 WeChat 공개 계정 개발 웹페이지는 사용자 기본 정보 획득 권한을 부여합니다.

WeChat 공개 계정 개발 웹페이지는 사용자 기본 정보 획득 권한을 부여합니다.

Feb 24, 2017 pm 04:54 PM
WeChat 공개 계정 개발

사용자가 WeChat 클라이언트에서 제3자 웹페이지에 액세스하는 경우 공식 계정은 WeChat 웹페이지 인증 메커니즘을 통해 사용자의 기본 정보를 얻은 후 비즈니스 로직을 구현할 수 있습니다.

微信公众号开发网页授权获取用户基本信息

참고: 웹페이지를 인증하는 방법에는 두 가지가 있습니다.

微信公众号开发网页授权获取用户基本信息

자세한 웹 승인은 공식 웹사이트 문서를 참조하세요. 웹 승인

자동 승인

자동 승인은 사용자가 결제할 때 사용자의 기본 정보를 얻을 수 있습니다. 사용자가 이 프로세스를 수행할 필요가 없습니다.

첫 번째 단계는 팩토리 클래스를 통해 요청을 전달하는 것입니다


 /// <returns></returns>
        public string HandleRequest()
        {
            string response = string.Empty;
            EventMessage em = EventMessage.LoadFromXml(RequestXml);
            if (em != null)
            {
                switch (em.Event.ToLower())
                {
                    case ("subscribe"):
                        response = SubscribeEventHandler(em);//通过工厂类分发过来的请求,匹配到关注事件
                        break;
                    case ("unsubscribe"):
                        response = Un_SubscribeEventHandler(em);
                        break;
                    case "click":
                        response = ClickEventHandler(em);
                        break;
                }
            }
            return response;
        }
로그인 후 복사


두 번째 단계는 user를 작성하는 것입니다. -집중 이벤트


 
         
         
         
         
            WeChat.Messages.TextMessage tm = = em.FromUserName;
            tm.FromUserName = em.ToUserName;
            tm.CreateTime ==
로그인 후 복사
<span style="color: #000000;">       </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> tm.GenerateContent();<br/> }</span>
로그인 후 복사


세 번째 단계는 획득한 OpenId와 accesstoken을 기반으로 사용자의 기본 정보를 얻는 것입니다(데모 여기에 사용자를 데이터베이스에 저장하는 것입니다)


/// <summary>
        /// 根据OpenId将此条粉丝记录插入数据库中
        /// </summary>
        /// <param name="FromUserName"></param>
        /// <param name="ToUserName"></param>
        public void ShowUserInfo(string FromUserName, string ToUserName)
        {
            try
            {
                Models.Users user = new Models.Users();
                DAL.User userInfo = new DAL.User();
                //获取accesstoken,获取用户基本信息需要Openid和accesstoken即可
         accesstoken = Utility.Context.AccessToken;
         string url = string.Format("https://api.weixin.qq.com/cgi-bin/user/info?access_token={0}&openid={1}&lang=zh_CN", accesstoken, FromUserName);
               string result = HttpUtility.GetData(url);
               XDocument doc = XmlUtility.ParseJson(result, "root");
               XElement root = doc.Root;
               if (root != null)
               {
                    #region 取值/存值
                    
                    subscribe = root.Element("subscribe").Value;//是否关注 1 是关注 
                    nickname = root.Element("nickname").Value; //昵称
                    sex = root.Element("sex").Value; //性别什么
                    headimgurl = root.Element("headimgurl").Value; //头像url
                    province = root.Element("province").Value;//地区 
                    country = root.Element("country").Value;
                    language = root.Element("language").Value;
                    subscribe_time = root.Element("subscribe_time").Value;
                    DateTime create_time = Common.GetTime(subscribe_time);//将时间戳转换为当前时间
                    city = root.Element("city").Value;
                    user.OpenID = FromUserName;//OpenID即粉丝ID
                    user.PublicId = ToUserName;
                    user.UserID = FromUserName;
                    user.NickName = nickname;
                    user.Sex = int.Parse(sex);
                    user.Subscribe = int.Parse(subscribe);
                    user.Country = country;
                    user.Province = province;
                    user.City = city;
                    user.CreateDate = create_time;
                    user.HeadimgUrl = headimgurl;
                    //将user实体存入数据库中
                    bool show = _user.Add(user);
                    #endregion
                }
            }
            catch
            {
                throw (new ArgumentNullException());
            }

        }
로그인 후 복사


위 코드에서 AccessToken을 구현하려면 새 Context 클래스를 생성하면 됩니다.


아아아아


아아아아


아아아아


아아아아


private static DateTime GetAccessToken_Time;
        /// <summary>
        /// 过期时间为7200秒
        /// </summary>
        private static int Expires_Period = 7200;
        /// <summary>
        /// 
        /// </summary>
        private static string mAccessToken;

        public static string AppID = "换成相应公众号的即可";
        public static string AppSecret = "换成相应公众号的即可";
        /// <summary>
        /// 调用获取ACCESS_TOKEN,包含判断是否过期
        /// </summary>
        public static string AccessToken
        {
            get
            {
                //如果为空,或者过期,需要重新获取
                if (string.IsNullOrEmpty(mAccessToken) || HasExpired())
                {
                    //获取access_token
                    mAccessToken = GetAccessToken(AppID, AppSecret);
                }

                return mAccessToken;
            }
        }
        /// <summary>
        /// 获取ACCESS_TOKEN方法
        /// </summary>
        /// <param name="appId"></param>
        /// <param name="appSecret"></param>
        /// <returns></returns>
        private static string GetAccessToken(string appId, string appSecret)
        {
            string url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appId, appSecret);
            string result = HttpUtility.GetData(url);

            XDocument doc = XmlUtility.ParseJson(result, "root");
            XElement root = doc.Root;
            if (root != null)
            {
                XElement access_token = root.Element("access_token");
                if (access_token != null)
                {
                    GetAccessToken_Time = DateTime.Now;
                    if (root.Element("expires_in") != null)
                    {
                        Expires_Period = int.Parse(root.Element("expires_in").Value);
                    }
                    return access_token.Value;
                }
                else
                {
                    GetAccessToken_Time = DateTime.MinValue;
                }
            }

            return null;
        }
        /// <summary>
        /// 判断Access_token是否过期
        /// </summary>
        /// <returns>bool</returns>
        private static bool HasExpired()
        {
            if (GetAccessToken_Time != null)
            {
                //过期时间,允许有一定的误差,一分钟。获取时间消耗
                if (DateTime.Now > GetAccessToken_Time.AddSeconds(Expires_Period).AddSeconds(-60))
                {
                    return true;
                }
            }
            return false;
        }
로그인 후 복사


세 번째 단계와 관련하여 HttpUtility 클래스에 몇 가지 다른 공개 도우미 메서드가 있으며 여기에 공개되어


<이라고 할 수 있습니다. 🎜>

GetData的实现
로그인 후 복사


코드 보기

그런데 위 글에서 사용한 User 클래스는 다음과 같습니다


     public static string GetData(string url)
        {            return SendGetHttpRequest(url, "application/x-www-form-urlencoded");
        }
로그인 후 복사


실증효과

현재 데이터베이스에 10개의 데이터가 있습니다. 이 공식 계정을 클릭하면, 이 사용자의 기본 정보는 데이터베이스에 저장되며 데이터베이스를 새로 고치면 11개의 데이터로 변경됩니다.

웹 페이지 인증 프로세스

자세한 소개는 아직 제공됩니다. 공식 웹 사이트 문서를 참조하세요: 웹 인증

첫 번째 단계는 사용자가 인증되었는지 확인하는 것입니다. .그렇지 않은 경우 승인 페이지로 이동하여

핵심코드

ParseJson的实现
로그인 후 복사

중에서 확인하세요. 사용자 인증을 위한 코드 방법은 다음과 같습니다:

     public static XDocument ParseJson(string json, string rootName)
        {            return JsonConvert.DeserializeXNode(json, rootName);
        }
로그인 후 복사


여기서 ShouQuanAccessToken 방법

/// <summary>
        /// 发送请求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="data">数据</param>
        public static string SendHttpRequest(string url, string data)
        {            return SendPostHttpRequest(url, "application/x-www-form-urlencoded", data);
        }        /// <summary>
        /// 
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public static string GetData(string url)
        {            return SendGetHttpRequest(url, "application/x-www-form-urlencoded");
        }        /// <summary>
        /// 发送请求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="method">方法(post或get)</param>
        /// <param name="method">数据类型</param>
        /// <param name="requestData">数据</param>
        public static string SendPostHttpRequest(string url, string contentType, string requestData)
        {
            WebRequest request = (WebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";            byte[] postBytes = null;
            request.ContentType = contentType;
            postBytes = Encoding.UTF8.GetBytes(requestData);
            request.ContentLength = postBytes.Length;            using (Stream outstream = request.GetRequestStream())
            {
                outstream.Write(postBytes, 0, postBytes.Length);
            }            string result = string.Empty;            using (WebResponse response = request.GetResponse())
            {                if (response != null)
                {                    using (Stream stream = response.GetResponseStream())
                    {                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            result = reader.ReadToEnd();
                        }
                    }

                }
            }            return result;
        }        /// <summary>
        /// 发送请求        /// </summary>
        /// <param name="url">Url地址</param>
        /// <param name="method">方法(post或get)</param>
        /// <param name="method">数据类型</param>
        /// <param name="requestData">数据</param>
        public static string SendGetHttpRequest(string url, string contentType)
        {
            WebRequest request = (WebRequest)HttpWebRequest.Create(url);
            request.Method = "GET";
            request.ContentType = contentType;            string result = string.Empty;            using (WebResponse response = request.GetResponse())
            {                if (response != null)
                {                    using (Stream stream = response.GetResponseStream())
                    {                        using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
                        {
                            result = reader.ReadToEnd();
                        }
                    }
                }
            }            return result;
        }
로그인 후 복사


사용자 엔터티

public class Users
    {        /// <summary>
        /// 全局凭证唯一Id        /// </summary>
        public string OpenID { get; set; }        /// <summary>
        /// 公众号Id        /// </summary>
        public string PublicId { get; set; }        /// <summary>
        /// 用户Id        /// </summary>
        public string UserID { get; set; }        /// <summary>
        /// 昵称        /// </summary>
        public string NickName { get; set; }        /// <summary>
        /// 性别 1是男 0是女        /// </summary>
        public int Sex { get; set; }        /// <summary>
        /// 是否关注 1是关注 
        /// </summary>
        public int Subscribe { get; set; }        /// <summary>
        /// 国家        /// </summary>
        public string Country { get; set; }        /// <summary>
        /// 地区        /// </summary>
        public string Province { get; set; }        /// <summary>
        /// 城市        /// </summary>
        public string City { get; set; }        /// <summary>
        /// 关注时间        /// </summary>
        public DateTime CreateDate { get; set; }        /// <summary>
        /// 用户头像        /// </summary>
        public string HeadimgUrl { get; set; }        /// <summary>
        /// 第三方平台Id,可为空        /// </summary>
        public string UnionID { get; set; }        /// <summary>
        /// 用户取消关注时间        /// </summary>
        public DateTime Un_Subscribe_Time { get; set; }
    }
로그인 후 복사


사용되는 MyHttpHelper 공용 클래스는 다음과 같습니다.

        /// <summary>
        /// 获取授权用户的基本信息,包括头像,姓名,等等(推荐方法)        /// </summary>
        /// <param name="accessToken">用户授权之后的accessToken</param>
        /// <param name="openid">用户授权之后的openid</param>
        /// <returns></returns>
        public static ShouQuanWeiXinUserInfo GetShouQuanMessage()
        {            //先判断是否有获取到用户授权的Code,HttpContext.Current.Session["ShouquanCode"]
            if (HttpContext.Current.Session["ShouquanCode"] == null|| HttpContext.Current.Session["ShouquanCode"].ToString()=="")
            {
                HttpContext.Current.Session["ShouquanCode"] = "123";                //用户授权的Code                GetShouQuanCodeUrl(HttpContext.Current.Request.Url.AbsoluteUri);
            }            else if(HttpContext.Current.Request.QueryString["code"] == null || HttpContext.Current.Request.QueryString["code"] == "")
            {                //用户授权的Code                GetShouQuanCodeUrl(HttpContext.Current.Request.Url.AbsoluteUri);
            }            else
            {                var model = ShouQuanAccessToken(HttpContext.Current.Request.QueryString["code"]);                var url =
                    $"http://www.php.cn/{model.access_token}&openid={model.openid}&lang=zh_CN";                string gethtml = MyHttpHelper.HttpGet(url);                var ac = JsonHelpers.ToObject<ShouQuanWeiXinUserInfo>(gethtml);                return ac;
            }            return null;
        }
로그인 후 복사



코드로 캡슐화된 JsonHelpers 클래스 보기

는 다음과 같습니다

아아앙



코드 보기

그 중 VS2015 이하라면 url 문자열을 string.format("") 메소드로 변경하시면 됩니다

값 호출 방법

효과 표시微信公众号开发网页授权获取用户基本信息

공식 계정 링크 클릭 시 효과는 다음과 같습니다.

WeChat 공개 계정 개발 웹페이지는 사용자 기본 정보 획득 권한을 부여합니다.

더 많은 WeChat 공개 계정 개발 웹 페이지가 사용자 기본 정보를 얻을 수 있도록 승인되었습니다. 관련 기사는 PHP 중국어 웹 사이트에 주목하세요! 微信公众号开发网页授权获取用户基本信息

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)