您的位置:首页 > 编程语言 > ASP

asp.net下微信网页授权

2016-10-25 14:33 239 查看
微信网页授权我相信做微信开发的小伙伴都可能遇见过这样的问题

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.htmlhttp://www.qq.com/login.html 都可以进行OAuth2.0鉴权。但http://pay.qq.comhttp://music.qq.comhttp://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#包

写的不好,大家多原谅哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net
相关文章推荐