第6章 间接通过code获取微信网页授权中的微信access_token

1 WeChatWebApi.Models.WechatAccessTokenModel

/// <summary>

    /// 【微信用户令牌信息模型--类】

    /// <remarks>

    /// 摘要:

    ///     微信发送的令牌信息,记录到当前程序的内存中。

    /// </remarks>

    /// </summary>

    public class WechatAccessTokenModel

    {

        /// <summary>

        /// 【令牌】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的令牌信息,开发者通过该信息让当前程序集成微信的第3方授权认证。

        /// </remarks>

        /// </summary>

        public string access_token { get; set; }

        /// <summary>

        /// 【过期时间】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的令牌信息的过期时间,开发者通过该信息让当前程序集成微信的第3方授权认证,微信将其设定为7200秒=2小时。

        /// </remarks>

        /// </summary>

        public int expires_in { get; set; }

    }

2 WeChatWebApi.Models.WechatAuthorizationCodeModel

namespace WeChatWebApi.Models

{

    /// <summary>

    /// 【微信授权认证信息模型--类】

    /// <remarks>

    /// 摘要:

    ///     微信发送的权认证信息,记录到当前程序的内存中。

    /// </remarks>

    /// </summary>

    public class WechatAuthorizationCodeModel

    {

        /// <summary>

        /// 【令牌】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的令牌信息,开发者通过该信息让当前程序集成微信的第3方授权认证。

        /// </remarks>

        /// </summary>

        public string access_token { get; set; }

        /// <summary>

        /// 【过期时间】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的令牌信息的过期时间,开发者通过该信息让当前程序集成微信的第3方授权认证,微信将其设定为7200秒=2小时。

        /// </remarks>

        /// </summary>

        public int expires_in { get; set; }

        /// <summary>

        /// 【刷新令牌】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的刷新令牌信息,开发者通过该信息让当前程序集成微信的第3方授权认证。

        /// </remarks>

        /// </summary>

        public string refresh_token { get; set; }

        /// <summary>

        /// 【唯一标识】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的唯一标识。

        /// </remarks>

        /// </summary>

        public string openid { get; set; }

        /// <summary>

        /// 【作用域】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的所使用的授权作用域,该作用域的值一般情况下由开发者根据程序功能直接写死。

        ///  说明:

        ///     使用域不同,当前程序从能同1个微信Api中获取的数据也不相同,要想获取微信登录用户的信息作用哉的值必须为:"snsapi_userinfo"。

        /// </remarks>

        /// </summary>

        public string scope { get; set; }

    }

}

3 WeChatWebApi.Models.WechatLoginUserInfoModel

namespace WeChatWebApi.Models

{

    /// <summary>

    /// 【微信登录微信用户信息模型模型--类】

    /// <remarks>

    /// 摘要:

    ///     微信发送的登录微信用户信息,记录到当前程序的内存中。

    /// </remarks>

    /// </summary>

    public class WechatLoginUserInfoModel

    {

        /// <summary>

        /// 【唯一标识】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的唯一标识。

        /// </remarks>

        /// </summary>

        public string openid { get; set; }

        /// <summary>

        /// 【昵称】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的昵称。

        /// </remarks>

        /// </summary>

        public string nickname { get; set; }

        /// <summary>

        /// 【性别】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的性别。

        /// </remarks>

        /// </summary>

        public int sex { get; set; }

        /// <summary>

        /// 【语言】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户所使用的语言。

        /// </remarks>

        /// </summary>

        public string language { get; set; }

        /// <summary>

        /// 【城市】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户所在的城市。

        /// </remarks>

        /// </summary>

        public string city { get; set; }

        /// <summary>

        /// 【省/直辖市/州】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户所在的省/直辖市/州。

        /// </remarks>

        /// </summary>

        public string province { get; set; }

        /// <summary>

        /// 【省/直辖市/州】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户所在的省/直辖市/州。

        /// </remarks>

        /// </summary>

        public string country { get; set; }

        /// <summary>

        /// 【头像图片URL】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,1个指定微信用户的头像图片的URL字符串。

        /// </remarks>

        /// </summary>

        public string headimgurl { get; set; }

        /// <summary>

        /// 【省/直辖市/州】

        /// <remarks>

        /// 摘要:

        ///     获取/设置用户使用微信登录后,用户特权信息,json 数组,如微信沃卡用户为(chinaunicom)。

        /// </remarks>

        /// </summary>

        public object[] privilege { get; set; }

    }

}

4 重构WeChatGetCode.Controllers.HomeController

   /// <param name="weChatCode">从微信浏览器中获取的code值。</param>

        /// <summary>

        /// 【使用微信进行登录时获取微信提供的授权认证信息】

        /// <remarks>

        /// 摘要:

        ///     当前程序使用使用微信进行身份认证后进行授权登录时,获取微信提供的授权认证信息。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     微信授权认证信息模型实例。

        /// </returns>

        /// </summary>

        [HttpGet]

        public WechatAuthorizationCodeModel GetWechatAuthorizationCode(string weChatCode)

        {

            var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={AppId}&secret={AppSecret}&code={weChatCode}&grant_type=authorization_code";

            var httpClient = new HttpClient();

            var result = httpClient.GetStringAsync(url).Result;

            //return JsonSerializer.Deserialize<WechatAccessTokenModel>(result)!.openid;

            return JsonSerializer.Deserialize<WechatAuthorizationCodeModel>(result)!;

        }

        /// <summary>

        /// 【获取code的回调URL为微信用户信息】

        /// <remarks>

        /// 摘要:

        ///     当前程序使用使用微信进行身份认证后进行授权登录时,微信服务器向当前程序发送的code值,该code值为使用微信进行登录时获取微信用户的信息提供参数支持。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     URL字符串,该字符串用于从微信浏览器中获取1个指定的code值,该code值为使用微信进行登录时获取微信用户的信息提供参数支持。

        /// </returns>

        /// </summary>

        [HttpGet]

        public string GetUrlToPrivacyBySnsapi_userinfo()

        {

            var RedirectUri1 = "https://7cn7680860.imdo.co/Home/Privacy";

            //要想使用微信授权,并获取该微信登录用户的信息,Scope的参数值必须为:"snsapi_userinfo",而不能为:"snsapi_base",否则会出现异常:“errcode“:48001“errmsg“:“api unauthorized...“”

            var Scope = "snsapi_userinfo";

            var State = "123";

            var url = $"https://open.weixin.qq.com/connect/oauth2/authorize?appid={AppId}&redirect_uri={HttpUtility.UrlEncode(RedirectUri1)}&response_type=code&scope={Scope}&state={State}#wechat_redirect";

            return url;

        }

        /// <param name="weChatCode">从微信浏览器中获取的code值。</param>

        /// <summary>

        /// 【使用微信进行登录时获取微信用户的信息】

        /// <remarks>

        /// 摘要:

        ///     当前程序使用使用微信进行身份认证后进行授权登录时,获取已经登录的指定微信用户相关信息。

        /// 注意:

        ///     想要获取登录时微信用户的信息,Scope的参数值必须为:"snsapi_userinfo",而不能为:"snsapi_base",否则会出现异常:“errcode“:48001“errmsg“:“api unauthorized...“”,

        ///  所该方法中所需要code值必须从“GetUrlToPrivacyBySnsapi_userinfo”中获取。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     微信登录微信用户信息模型实例。

        /// </returns>

        /// </summary>

        [HttpGet]

        public WechatLoginUserInfoModel GetWechatLoginUserInfo(string weChatCode)

        {

            var url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={AppId}&secret={AppSecret}&code={weChatCode}&grant_type=authorization_code";

            var httpClient = new HttpClient();

            var result = httpClient.GetStringAsync(url).Result;

            var wechatAuthorizationCode = JsonSerializer.Deserialize<WechatAuthorizationCodeModel>(result)!;

            var url1 = $"https://api.weixin.qq.com/sns/userinfo?access_token={wechatAuthorizationCode.access_token}&&openid={wechatAuthorizationCode.openid}";

            var result1 = httpClient.GetStringAsync(url1).Result;

            return JsonSerializer.Deserialize<WechatLoginUserInfoModel>(result1)!;

        }

        /// <summary>

        /// 【使用微信进行登录时获取微信用户的令牌信息】

        /// <remarks>

        /// 摘要:

        ///     当前程序使用使用微信进行身份认证后进行授权登录时,获取已经登录的指定微信用户的令牌信息。

        /// </remarks>

        /// <returns>

        /// 返回:

        ///     微信登录微信用户令牌信息模型实例。

        /// </returns>

        /// </summary>

        [HttpGet]

        public WechatAccessTokenModel GetWechatAccessToken()

        {

            var url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxc7337c066242de8b&secret=85901b3e6cbec634298c1707afcf915e";

            var httpClient = new HttpClient();

            var result = httpClient.GetStringAsync(url).Result;

            return JsonSerializer.Deserialize<WechatAccessTokenModel>(result)!;

        }

对以上功能更为具体实现和注释见:230807_006WeChatWebApi(间接通过code获取微信网页授权中的微信access_token)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 微信code获取开发文档是指微信提供的针对H5调用微信授权获取code的文档,用于帮助开发者了解和使用微信授权功能。 微信授权是指用户在微信客户端对第三方应用授权授权后第三方应用可以通过用户的code获取用户的基本信息,例如昵称、头像等。 H5调用微信授权获取code是指在H5页面使用微信提供的API,引导用户进行微信授权操作,并获取用户的code。开发者可以通过code换取用户的access_token,从而获取用户的基本信息。 微信code获取开发文档包含了微信授权的整个流程和使用方法,具体包括以下内容: 1. 授权流程:详细描述用户在微信客户端授权的整个流程,包括用户点击授权按钮、跳转到微信授权页面、用户同意授权等步骤。 2. 接口说明:介绍了H5页面需要调用的微信API,包括引导用户授权的接口、获取用户code的接口等。 3. 参数说明:详细描述了每个接口需要传递的参数,包括授权作用域、应用ID、重定向URL等。 4. 返回值说明:说明了每个接口返回的结果,如codeaccess_token等。 通过阅读微信code获取开发文档,开发者可以了解如何在H5页面调用微信授权功能,重点掌握用户授权的流程和参数的使用方法。同时,开发文档还提供了示例代码和常见问题的解答,方便开发者理解和使用微信授权功能。 总而言之,微信code获取开发文档是帮助开发者在H5页面调用微信授权功能的指南,提供了全面的接口说明和使用方法的文档。通过该文档,开发者可以实现在微信公众号或微信页面开发的网页获取用户的授权信息。 ### 回答2: 微信code获取开发文档是微信公众号开发文档的一部分,用于指导开发者如何在H5页面通过微信授权获取用户的code。在微信公众号,开发者可以通过H5页面开发功能,将自己的网页嵌入到微信客户端。这样用户在访问该网页时,可以直接在微信打开,无需跳转到外部浏览器。 为了获取用户的授权,开发者需要在相应的H5页面调用微信提供的授权接口,以获取用户的code。这个code是临时的,每次用户进入页面都会重新生成,且有效期为5分钟。开发者在获取code后,可以通过code来换取用户的openid,以便进行后续的操作。 在微信公众号开发文档,开发者可以找到关于如何在H5页面调用微信授权获取code的具体步骤和示例代码。文档涵盖了参数的设置、接口的调用方式以及返回结果的解析等内容,帮助开发者快速理解和实现微信授权功能。 通过阅读微信code获取开发文档,开发者可以了解到如何在H5页面嵌入微信授权功能,实现登录、绑定等操作,提升用户体验和功能扩展性。这对于微信公众号的开发人员来说,是非常重要的参考指南。 ### 回答3: 微信code获取开发文档是微信提供的一份技术文档,用于指导开发者在H5页面上调用微信授权接口,实现获取用户授权code的功能。该文档详细介绍了各种代码示例和接口调用方法,帮助开发者了解如何在微信公众号和微信页面开发使用网页授权功能。 在微信公众号和微信页面开发,如果需要获取用户的基本信息或进行用户登录验证等功能,就需要先获取用户的授权code。开发者可以通过H5页面上的按钮或链接等方式,调用微信授权接口,将用户导向微信登录页面并请求授权。用户确认授权后,微信会通过回调URL返回一个带有code参数的URL地址。 通过阅读微信code获取开发文档,开发者可以了解如何构造授权链接URL,并对回调URL的处理方式进行说明。文档还包括了接口的参数说明、权限说明、错误码列表等内容,帮助开发者快速、准确地调用接口,实现微信授权功能。 总之,微信code获取开发文档是一份重要的技术文档,为开发者提供了详细的接口使用说明和示例代码,帮助他们在H5页面调用微信授权接口,获取用户授权code,实现各种微信公众号和微信页面开发的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值