写在前面:关注最下方公众号“Dotnet专栏”回复“微信开发”免费获取源码。
我们今天就来实现微信网页授权和获取用户信息,这篇文章呢主要是挑代码讲流程,详细的我们可以去看微信公众平台官方说明,等这个系列讲完,完整的代码会放给大家玩哈。系列后面还有回复用户发送的信息。access_token、CheckJsapi_ticket的实时更新和JSSDK的接口调用诸如接入扫一扫拍照地图门店等等,所以就一次性搞完再放源码了,一篇文章写太多也乱。
链接: 微信官方文档.
流程简单分三步
- 第一步: 用户进入授权页面同意授权,获取code
- 第二步: 通过第一步返回的code换取网页授权access_token
- 第三步: 根据第二步返回来的access_token和openid获取用户基本信息
第一步:授权页面同意授权,获取code值
public ActionResult Index(string reUrl="")
{
return Redirect($"https://open.weixin.qq.com/connect/oauth2/authorize?appid={WxConfig.Config.appID}&redirect_uri=http://{WxConfig.Config.domain}/Home/Login?reUrl={reUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect");
}
参数说明:
appid:公众号的唯一标识
redirect_uri:授权后重定向的回调链接地址,就是用户点击授权同意后跳到下个想要访问的页面, 请使用 urlEncode 对链接进行处理
response_type:返回类型,请填写code
scope:应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state:重定向后会带上state参数
wechat_redirect:无论直接打开还是做页面302重定向时候,必须带此参数
好了,如果我们的测试号都配置好了的话,数据库中的值也是我们订阅号配置的值,那么就会成功授权然后会带参数code=CODE&state=STATE跳到redirect_uri这个地址,我用的是授权了以后跳到登录页面Login,看自己需要哈。
第二步:通过code换取网页授权access_token
参数说明
appid:公众号的唯一标识
secret:公众号的appsecret
code:第一步返回的code值grant_type:就是访问类型,具体看文档哈,这里填写为authorization_code
UserOpenIdModel userOpenIdModel = _JsonSerializer.Deserialize<UserOpenIdModel>(webClient.DownloadString($"https://api.weixin.qq.com/sns/oauth2/access_token?appid={WxConfig.Config.appID}&secret={WxConfig.Config.appsecret}&code={code}&grant_type=authorization_code"));
OK fine,请求后我们用一个model来接一下返回的json数据。
第三步:获取用户基本信息
参数说明:
access_token:第二步返回的值
openid:用户的唯一标识
lang:返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
UserInfoModel userInfoModel = _JsonSerializer.Deserialize<UserInfoModel>(webClient.DownloadString($"https://api.weixin.qq.com/sns/userinfo?access_token={userOpenIdModel.access_token}&openid={userOpenIdModel.openid}&lang=zh_CN"));
和第二步一样,我们用一个model接返回的json数据,字段命名都很清楚了哈哈,
关注我们,获取更多Dotnet开发资源