获取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)