获取微信授权有两种方式
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 ; }