获取access_token

关于获取access_token的接口说明,参考:

https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html


除了被动回复消息,所有微信接口的调用,都必须提交access_token。

什么是
access_token呢?

你要调用微信接口,微信服务器肯定要验证你的身份,按理提交开发者ID(appID)和开发者密钥(
appsecret)即可。

但是开发者ID和开发者密钥是是固定不变的,频繁通过POST方式提交,会存在一定的安全隐患。

access_token可以说是appID和appsecret的替代者,我们定期向微信服务器提交appID和appsecret,微信服务器动态生成一个access_token,之后所有的接口调用,都 要提交此access_token作为身份验证凭据。

access_token的寿命只有2小时,也就是说2小时后,我们必须重新获取新的access_token,使用新的access_token调用微信接口。

调用接口获取access_token时,请登录“微信公众平台-开发-基本配置”提前将调用接口的电脑的外网IP地址添加到IP白名单中,否则将无法调用成功。

需要注意的是,access_token一天只能生成2000次。


根据接口说明,我们新建一个自定义函数GetAccessToken用于获取
access_token,代码为:

Static
CreateTime As Date '记录最近一次生成access_token的时间
Static
AccessTocken As String '记录最近一次生成的access_token
Dim
AppId As String= "wx8acdb7df5beb68fd" '开发者ID
Dim
AppSecret As String = "a5a3b06a790d4200a151e6b13c3dc263" '开发者密匙
Dim
tp As TimeSpan = Date.Now - CreateTime
Dim
url As String = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}"
If
tp.TotalSeconds > 3600 Then
    Dim hc As New HttpClient(CExp(url,AppId,AppSecret))
    Dim ret As String = hc.GetData()
    If ret = "" Then
'
如果失败,再尝试一次
        hc.GetData()
    End If
    CreateTime = Date.Now()
    Dim jo As JObject = JObject.Parse(ret)
    If jo("errcode") Is Nothing Then
       
AccessTocken = jo("access_token")
    Else
        MessageBox.show("获取access_token失败,原因:" & vbcrlf & jo("errmsg").ToString)
    End
If

End
If
Return
AccessTocken

以上代码中的开发者ID(AppId )和开发者密钥(AppSecret)必须改为自己申请的测试号或公众号的,否则你所有代码都可能无法正常运行。

提示:

1、为保险起见,以上代码每1小时刷新一次
access_token,而不是接口说明中的2小时。
2、
代码用静态变量保存上一次获取的access_token以及获取时间,每次获取之前都先比较上一次获取的时间,如果没有超过1小时,则直接返回之前获取的access_token,否则调用接口获取新的access_token。
3、关于静态变量,参考:使用静态变量
4、本文档将会大量使用CExp函数动态合成微信接口地址,关于CExp函数,请参考:动态合成表达式之二

现在你可以很方便地获取
access_token了,例如在命令窗口执行:

Dim
access_token As String = Functions.Execute("GetAccessToken")
Output
.Show(access_token)


本页地址:http://www.foxtable.com/mobilehelp/topics/0178.htm