回顾上一章节将到的授权成功,微信上的提醒标志:
然后微信服务器回调你设定好的回调地址。在附带上授权码和过期时间。那么在里面我们具体怎么来查找获取授权公众号的基本信息呢?
首先官网上提及:
通过授权码和自己接口调用凭据换去授权方的授权信息【其实就是接下来调用公众号各项api的授权凭据token和用来刷新过期凭据的token】。
大致步骤:
1、通过微信附带到回调地址的授权码+第二章提及的【component_access_token】来换取授权信息
2、通过授权公众号的access_token去调用微信api,这期间要注意监测token的有效期
接下来提及的只是参考,具体业务请以自己的需求为准!!
首先获取授权信息,然后查找自己表里是否是以前授权过的,是的话,直接更改标识状态,不是重新插入一条语句。当然接下去的获取授权方的基本信息也是一样的原理。
至于刷新accessToken,原理和前面讲的获取ComponentAccessToken是一致的,只不过这里的区别是,如果没有找到用户记录返回错误信息了。具体代码如下:
privatestaticstringget_auth_access_token()
{
if(wid =="0")
{
var session = System.Web.HttpContext.Current.Session["wid"];
if (session !=null)
{
wid = session.ToString().Trim();
}
return"用户数据丢失,请尝试重新进入!";
}
stringtoken =string.Empty;
string sql =string.Empty;
sql ="select top 1 id, auth_appid, auth_access_token,auth_refresh_token, addtime from [WX_weixinOpen_authInfo] where wx_id='"+ wid +"' order by addtime desc";
DataTable aDt = DaCommon.DbHelperSQL.Query(sql).Tables[0];
if(aDt.Rows.Count > 0)
{
DateTime time =Convert.ToDateTime(aDt.Rows[0]["addtime"]);
token = aDt.Rows[0]["auth_access_token"].ToString();
string auth_appid = aDt.Rows[0]["auth_appid"].ToString();
string refreshToken=aDt.Rows[0]["auth_refresh_token"].ToString();
if (time <DateTime.Now)//过期了重新获取
{
ResponseAuthorizerToken atoken=InterfaceApi.Refresh_authorizer_token(Golbal_Component_accessToken,auth_appid, refreshToken);
token = atoken.authorizer_access_token;
time=DateTime.Now.AddSeconds(atoken.expires_in -1800);//重新设定时间
sql ="update[WX_weixinOpen_authInfo] set addtime='"+time+"' ";
if (!string.IsNullOrEmpty(token))
{
sql +=", auth_access_token='" + token +"'";
}
if (!string.IsNullOrEmpty(atoken.authorizer_refresh_token))
{
sql +=", auth_refresh_token='" +atoken.authorizer_refresh_token +"'";
}
sql +=" where auth_appid='" +auth_appid +"'";
DaCommon.DbHelperSQL.ExecuteSql(sql);
}
}
returntoken;
}
最终返回的结果如下:
ps::后来测试发现回调地址只能带一个参数,2个以上会被微信砍掉的!!!如下图:
日志观察: