获取AccessToken

企业微信通过 CorpID和应用的Secret获取AccessToken。

CorpID是企业微信的标识,每个企业微信拥有一个唯一的CorpID;Secret是指定应用的凭证密钥,不同的应用
有不同的 Secret。也就是说AccessToken是针对具体应用的,并不是整个企业微信所有应用都一样。

我们可以定义一个自定义函数,名为GetQYAccessToken,用于获取企业微信的
AccessToken,代码参考:

Static CreateTime As Date '记录最近一次生成access_token的时间
Static
AccessTocken As String '记录最近一次生成的access_token
Dim
CorpID As String "ww7deed3af842576ed" '企业微信的CorpID
Dim
Secret As String = "sO7RjwoisX82kB_gcRY4isEU8ZC6sJVcGs6CDlz8Nkc" '管理组的Secret
Dim
tp As TimeSpan = Date.Now - CreateTime
If
tp.TotalSeconds > 3600 Then
    Dim url As String = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}"
    Dim hc As New HttpClient(CExp(url, CorpID, Secret))
    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("access_token") IsNot Nothing Then
       
AccessTocken = jo("access_token")
    Else
        MessageBox.show("获取access_token失败,原因:" & vbcrlf & jo.ToString)
    End If

End
If
Return
AccessTocken

企业微信的AccessToken在有效期内重复获取,返回的值是一样的,所以企业微信并不需要设置中控服务器。

管理多个应用的AccessToken

如果需要管理多个应用的AccessToken,可以按照下面方式改改自定义函数。

首先在全局代码定义一个字典对象
public _dict
AccessToken as new Dictionary(of String, object())

然后定义一个自定义函数,名为GetQYAccessTokenBySecret代码参考:

Dim CorpID As String args(0) '企业微信的CorpID
Dim Secret As String = args(1) '管理组的Secret
Dim CreateTime As Date = Date.Today.AddDays(-1)
If _dictAccessToken.ContainsKey(Secret)
    CreateTime = _dictAccessToken(Secret)(0)
End If
Dim tp As TimeSpan = Date.Now - CreateTime
If tp.TotalSeconds > 3600 Then
    Dim url As String = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}"
    Dim hc As New HttpClient(CExp(url, CorpID, Secret))
    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("access_token") IsNot Nothing Then
        If _dictAccessToken.ContainsKey(CorpID)
            _dictAccessToken(Secret)(0) = CreateTime
            _dictAccessToken(Secret)(1) = jo("access_token")
        Else
            _dictAccessToken.Add(Secret,{CreateTime ,jo("access_token")})
        End If
    Else
        MessageBox.show("获取access_token失败,原因:" & vbcrlf & jo.ToString)
        Return Nothing
    End If
End If
Return _dictAccessToken(Secret)(1)

最后调用的时候,需要传入CorpID和应用的Secret,代码参考:

Dim access_token As String = Functions.Execute("GetQYAccessTokenBySecret","ww7deed3af842576ed","sO7RjwoisX82kB_gcRY4isEU8ZC6sJVcGs6CDlz8Nkc")
Output.Show(access_token)


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