微信公众号开发-授权登录(C#)

作者:vkvi 来源:ITPOW(原创) 日期:2017-1-26

前面介绍了“客户端模式”下,获取 access_token。而本文要介绍的是“授权码模式”,也就是授权登录,就是如何将登录的微信用户身份传递到我们的网站上。本文也有 access_token,但因为应用场景不同,所以无调用次数限制。

微信的授权登录分公众号网页和普通网页:

  • 公众号网页(微信网页)用的是公众号中的 appid、appsecret,用户使用微信打开网页,snsapi_base 时直接授权(用户无感知),snsapi_userinfo 时用户需要点击确定按钮授权。
  • 普通网页用的是开放平台的 appid、appsecret,用户使用微信扫二维码授权。

这里贴个利用公众号接口,让微信用户登录我们网页的代码:

上述代码的 jsonString 是包含 openid 的,那是因为我们使用了 snsapi_base 登录,如果是使用的 snsapi_userinfo 则这里的 jsonString 中不会包含 openid。

先用户点击按钮,跳转到微信登录,微信登录又跳转回来,这时带着一个重要的 code,通过这个 code 去获取用户信息等。

说明:

  • 要将跳转的网址的 IP 或域名(注意:只需要填写 IP 或域名,不要填其他部分,否则可能出现 redirect_uri 错误)先在微信的“授权回调页面域名”中配置,如果是测试公众号,则在“体验接口权限表”的“网页服务 -> 网页帐号 -> 网页授权获取用户基本信息 ”中修改。如果是认证服务号,也在类似的地方修改,但是名称叫法并不统一。如果是认证订阅号,由于没对订阅号开放授权登录,所以不具备此配置。如果是开放平台,本文代码不适合,请自行参见微信开放平台官方文档。
  • 关于 redirect_uri,还可以参见微信回调地址带 QueryString 时,微信是否能够识别?
  • scope 有两个值可选:snsapi_base 只是获取用户的 openid,优点是用户不需要点击“确认登录”按钮,直接就进来了,完全无干扰,缺点是不能获取用户的头像等信息。snsapi_userinfo 优点是可以获取用户头像、昵称等,缺点是会弹出“该网页由XXX开发,向其提供以下权限即可继续操作”的界面,需要用户点一下确认按钮,当然这也是必要的,毕竟你要获取用户的更多信息,需要用户许可,不然用户隐私就随意泄露了。
  • state 是自己随机指定的值(上面的例子是写死的),上面例子中看不出有什么用,但如果是复杂应用,我们可能需要弄清每一次回调对应的是哪一个请求,或者我们为了保障 response_type=code 这一步请求是我们发出的,并不是其他网站伪造发起的,这就靠随机产生的 state 了。

关于 WebClient 请参见:ASP.NET 抓取网页内容-用 WebClient 轻松实现文件下载上传、网页抓取

关于 JSON 字符串与类的转换,请参见:C# 中处理 JSON

上面代码中 jsonString 除了用户的 openid,还有一个 access_token,我们可以凭这个 access_token 去获取用户信息(scope 为 snsapi_userinfo 时),这就是访问一个网页的事儿,简单。这里获取的 access_token 跟本连载前面讲的 access_token 不一样,这里是网页授权 access_token,它是不限频次随便调用的。全部官方解释,请参见:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

相关文章