技术学习

我所喜欢的

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

获取微信授权有两种方式

1:通过AppID和AppSecret,后台可以直接获取

2:通过网页授权(主要应用场景是Web端例如公众号等需要获取用户基本信息,需要用户授权,最终通过Code换取access_token)

由于目前Senparc等框架都比较重量级,往往使用其开发时不光要理解微信官方的开发文档,还要理解其类库的使用方式,比较繁琐,其实微信通讯只要理解了微信官方的通讯模式,实现起来还是比较简单的,所以本文尽量以Flurl为基础,通过官方的文档来实现,不借助成型的微信专用类库来实现。

另外注意开发时可以申请微信开发公众号的测试号来进行开发,支持IP和域名方便调试,但是正式发布时只支持经过ICP备案的域名,这点务必注意,提前做好域名申请及备案ICP备案的相关工作。

公众号测试号申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

 

(1)AppID & AppSecret直接获取AccessToken

官方接口调用说明:

https请求方式:    GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

 代码如下:

///
///Access_Token_Url:换成自己的AppID & AppSecret
///
public static AccessTokenModel GetAccessToken()
{
    var accessToken = WechatMPUrls.Access_Token_Url.GetJsonAsync<AccessTokenModel>().GetAwaiter().GetResult();
    return accessToken;
}



public class AccessTokenModel
{
    public string access_token { get; set; }


    public int expires_in { get; set; } 
}

 (2)微信网页授权主要分成两步【官方文档因为还同时说明了一些其他问题分成了4步,可以参考官方说明,这里为了简化只说明最必须的两步】

1 第一步:用户同意授权,获取code(根据个人公众号信息构造URL,引导用户访问【例如追加到公众号的菜单连接】,主要就是AppID和个人开发的回调URL以及一些授权的参数,例如只获取个人openid可以采用静默授权的参数,获取用户基本信息需要弹出窗口用户授权,另外需要注意的是回调URL参数需要做URL编码,网上有在线工具可以提供)

2 第二步:通过code换取网页授权access_token(回调的URL需要开发者开发的内容)

回调URL开发的功能(C# MVC开发的示例)

//示例一:采用Senparc
/// <summary>
/// 1:引导用户访问微信服务器Url(https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect)
///   该URL需要设置参数 1) redirect_uri:需要开发 2)SCOPE:snsapi_base和snsapi_userinfo 3)state:可选,自定义
///   默认拥有scope参数中的snsapi_base和snsapi_userinfo 权限)->如果是snsapi_userinfo需要用户授权,授权通过通过后微信服务器将跳转至 redirect_uri/?code=CODE&state=STATE参数指定的地址(redirect_uri需要URL编码)
/// 2:开发第一步redirect_uri 用于获取CODE参数,拿着CODE参数获取access_token (https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code)
/// 3:拉取用户信息(需scope为 snsapi_userinfo),如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了
///     https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
///     
/// 总结:开发Redirect_Uri,用于获取CODE,进而获取access_token来获取用户基本信息
/// 微信公众号配置: 网页服务->网页帐号 ->网页授权获取用户基本信息 ->修改:nb-fzcxc.cn 注意:不需要http/https头部,也不需要到具体的页面,到域名即可
/// </summary>
/// <returns></returns>

public string WechatCallBack(string code, string state)
{
    try
    {
        var wxRes = OAuthApi.GetAccessToken(appID, appsecret, code);
        return $"Token:{wxRes.access_token}";
    }
    catch (Exception ex)
    {
        return ex.Message;
    }
}

  示例2:采用FlUrl获取

 可以看到相比第一种方式只是URL不一样了,并且多了一个code参数而已,code参数回调时微信服务器会带到URL中,相关代码如下:

public static OAuthAccessTokenModel OAuthGetAccessToken(string code,string state)
{
    string appId = "";
    string appSecret = "";
    string url = $"https://api.weixin.qq.com/sns/oauth2/access_token?appid={appId}&secret={appSecret}&code={code}&grant_type=authorization_code";
    var accessToken = url.GetJsonAsync<OAuthAccessTokenModel>().GetAwaiter().GetResult() ;
    return accessToken ;
}

 

posted on 2024-05-16 17:36  飘扬De黑夜  阅读(1123)  评论(0编辑  收藏  举报