asp.net下微信网页授权

来源:互联网 发布:可以做生意的软件 编辑:程序博客网 时间:2024/04/30 15:25

微信网页授权我相信做微信开发的小伙伴都可能遇见过这样的问题

1.我们要明白微信网页授权主要是用来做什么?

用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信 息, 进 而实现业务逻辑。

网页授权分以下几步
1. 配置网页授权回调域名
2. 用户同意授权,获取code
3. 通过code换取网页授权access_token
4. 刷新access_token(如果需要)
5. 拉取用户信息(需scope为 snsapi_userinfo)

1. 配置网页授权回调域名
现在微信高级接口列表中并没有-OAuth2.0 微信修改了配置地方
公共号设置=>功能设置=>网页授权域名 的设置选项中,修改授权回调域名
这里写图片描述!这里写图片描述这里写图片描述
这里图片弄的比较小,小伙伴们可以登录公共微信号后台自己看
关于网页授权回调域名的说明:

1、这里填写的是域名(是一个字符串),而不是URL,因此请勿加 http:// 等协议头
2、授权回调域名配置规范为全域名,比如需要网页授权的域名为:www.qq.com,配置以后此域名下面的页面http://www.qq.com/music.html 、 http://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.com 、 http://music.qq.com 、 http://qq.com无法进行OAuth2.0鉴权

2. 用户同意授权,获取code

在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:

https://open.weixin.qq.com/connect/oauth2/authorizeappid=APPID&

redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

若提示“该链接无法访问”,请检查参数是否填写错误,是否拥有scope参数对应的授权作用域权限。

这里写图片描述

这里写图片描述

redirect_uri:就是当网页获取code之后需要跳转的页面地址
1.例如http://www.xxxx.net/index.aspx我当前页面要进行网页授权, 则填写redirect_uri
为http://www.xxxx.net/index.aspx

3. 通过code换取网页授权access_token

首先请注意,这里通过code换取的是一个特殊的网页授权access_token,与基础支持中的access_token(该access_token用于调用其他接口)不同。公众号可通过下述接口来获取网页授权access_token。如果网页授权的作用域为snsapi_base,则本步骤中获取到网页授权access_token的同时,也获取到了openid,snsapi_base式的网页授权流程即到此为止。
尤其注意:由于公众号的secret和获取到的access_token安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新access_token、通过access_token获取用户信息等步骤,也必须从服务器发起。

请求方法 获取code后,请求以下链接获取access_token:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

这里写图片描述这里写图片描述

4. 刷新access_token(如果需要)
这里可以参照微信公共平台提供的
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN[这里写链接内容]
5. 拉取用户信息(需scope为 snsapi_userinfo)
想必大家看到这里看到烦了 都是一些纸上谈兵的事情,上代码了
比如我http://www.xxxx.net/index.aspx想进行网页授权
这里我微信公共后台的数据AppID,Appsecret…等一些数据是放在了数据库

比如现在通过ID来读取读取数据库数据,但是在项目中为了安全可能只是传一个ID,大家更具项目需求来写吧!

“`第一次打开网页的时候:http://www.xxxx.net/index.aspx?ID=xxxx

protected string toopenid { get; set; }protected void Page_Load(object sender, EventArgs e){        DAL da = new DAL();        var appid = string.Empty;        var appsecret = string.Empty;        var code = Request.QueryString["Code"];        var ID= Request.QueryString["ID"];        if (string.IsNullOrEmpty(code))  //在网页授权之后会回调该页面 如果有值就不需要在去获取code        {            if (!string.IsNullOrWhiteSpace(ID))            {                DataRow shopdataRow = da.GetAppID(ID);                if (shopdataRow != null)                {                     appid = (String)shopdataRow["appid"];                     Response.Redirect(BuildWebCodeUrl(appid, "http://www.xxxx.net/index.aspx?appid =" + appid, "snsapi_base",                      "a-zA-Z0-9"));                     //这步用户同意授权,获取code,获取之后回调当我当前页面                     //大家有要问了为什么这里需要传递appID呢?这个appID是当我获取完之后通过appID来查询数据来获取appsecret                }            }        }        else        {            if (!string.IsNullOrWhiteSpace(appid ))            {                DataRow shopdataRow = da.Getappsecret(appid );                if (shopdataRow != null)                {                    appsecret = (String)shopdataRow["appsecret"];                 }            }            //Post 这里就是一个Post方法来获取用户的openid而已            WebCredential theWebCredential = Post(appid, appsecret, code);            toopenid = theWebCredential.openid;          }

WeiXin.BuildWebCodeUrl:说明
///
/// 得到获取code的Url
///
/// 公众号的唯一标识
/// 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
/// 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)
/// 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值
///
public static string BuildWebCodeUrl(string appid, string redirect, string scope, string state = “”)
{

  return string.Format("https://open.weixin.qq.com/connect/oauth2/  authorize?appid={0}&redirect_uri={1}&response_type=code&scope={2}&state=       {3}#wechat_redirect", appid, redirect, scope, state); }

如果是用Asp。net做的可以下载
https://github.com/loogn/WeiXinSDK/tree/master/Loogn.WeiXinSDK
这个是一个微信开发的C#包

写的不好,大家多原谅哈

0 0
原创粉丝点击