zoukankan      html  css  js  c++  java
  • 微信公众平台获取用户openid

    首先需要一个域名,如花生壳域名,然后在微信公众平台配置,注意,正式环境下必须要备案好了的域名,测试环境下没有关系,先公众号功能设置:》接口权限中的网页授权获取用户基本信息》注册一个测试者账号,进行设置,也要修改网页授权获取用户基本信息

    public ActionResult Index(string id, string code, string state)
            {
                if (string.IsNullOrEmpty(id))
                    return HttpNotFound();
    //1.如果state为空,则跳转至微信授权页
                if (string.IsNullOrEmpty(state))
                {
                    var redirUrl = $"http://{SiteHelper.SiteHost}/r/{id}";
                    var url = "https://open.weixin.qq.com/connect/oauth2/authorize";
                    url += $"?appid={SiteHelper.WeiXinAppId}&redirect_uri={HttpUtility.UrlEncode(redirUrl)}&response_type=code&scope=snsapi_userinfo&state={HttpUtility.UrlEncode(id)}#wechat_redirect";               
                    return Redirect(url);
                }
            //
    SiteHelper.SiteHost 是域名
            //SiteHelper.WeiXinAppId为appID 
    //SiteHelper.WeiXinAppSecret为 appsecret

      //2.根据code取到用户信息

    if (string.IsNullOrEmpty(code)) return Redirect(idUrl);

    var dataUrl = "https://api.weixin.qq.com/sns/oauth2/access_token";
    dataUrl
    += $"?appid={SiteHelper.WeiXinAppId}&secret={SiteHelper.WeiXinAppSecret}&code={code}&grant_type=authorization_code";

    var accessToken = HttpHelper.GetData(dataUrl);

    var token = JsonHelper.JsonDeserialize<AccessToken>(accessToken);
    if (string.IsNullOrEmpty(token?.openid)) return Redirect(idUrl);

    //3.根据openid取到用户信息。没有则生成未关注的member

    var member = Biz.Member.GetModelOrCreateNew(token.openid, token.unionid);

    //4.如果WxInfo信息为空,则根据accessToken拉取wxuserinfo信息并更新

    if (string.IsNullOrEmpty(member?.MemberWxInfos?.HeadImgUrl))
    { dataUrl
    = "https://api.weixin.qq.com/sns/userinfo";
    dataUrl
    += $"?access_token={token.access_token}&openid={member.OpenId}&lang=zh_CN";

    var userData = HttpHelper.GetData(dataUrl);

    var user = JsonHelper.JsonDeserialize<Biz.Entitie.UserInfo>(userData); Biz.Member.RefreshWxInfo(member, user, true); }

    //5.设置Cookie,跳转至id页
    Biz.Member.SetLoginedCookies(member, Response);

    return Redirect(idUrl); }
  • 相关阅读:
    编译并使用Lua语言
    C#中使用DLL文件
    将Unity3D游戏移植到Android平台上
    Unity3D知识点
    清下书柜,工作书,旧书,正版书,个人学习过的书asp,net,delphi,java,flex,actionscript,vb...
    使用ABP打造SAAS系统(2)——前端框架选择
    使用ABP打造SAAS系统(1)——环境准备
    延迟实例单例模式注意点
    jvm指令解释i = i++ + i++ + i++ + ++i;等于多少
    MYSQL增加库表权限
  • 原文地址:https://www.cnblogs.com/zhou90/p/5810744.html
Copyright © 2011-2022 走看看