Office中国论坛/Access中国论坛

标题: 【抛砖引玉】在Access中使用微信企业号2 [打印本页]

作者: fan0217    时间: 2016-12-28 23:19
标题: 【抛砖引玉】在Access中使用微信企业号2
本帖最后由 fan0217 于 2016-12-28 23:21 编辑

解决前次发布的代码,返回字符串编码问题:

  1. '下列常量换成你自己的即可
  2. Public Const Corpid = "wxf4a9ef92f9f6cXXX"  '企业Id,可从微信企业号后台获取
  3. Public Const Corpsecret = "FH6346paGvlTOkN5JeU96TltGNmwxcCYUYqvWRm3Q2JVEnVL3egfLYNBLkIf_Aoy"  '管理组的凭证密钥

  4. '获取AccessToken,Https请求方式: GET
  5. Private Function GetTokenJson() As String
  6.     Dim url  As String
  7.     Dim ret()  As Byte
  8.     Dim token As String
  9.         url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" & Corpid & "&corpsecret=" & Corpsecret
  10.         ret = HttpGet(url)
  11.         token = ret
  12.         GetTokenJson = token
  13. End Function

  14. '用了个较笨的方法,请自行找个解析JSON的方法替代
  15. Public Function GetToken() As String
  16.         Dim tokenJson As String
  17.         tokenJson = GetTokenJson
  18.         Dim tmp As String
  19.         tmp = Split(tokenJson, ",")(0)
  20.         tmp = Split(tmp, ":")(1)
  21.         tmp = Replace(tmp, """", "")
  22.         GetToken = tmp
  23. End Function

  24. '获取发送消息的Json数据
  25. Public Function GetSendTextJson(touser As String, agentid As Integer, content As String) As String
  26.     Dim str As String
  27.         str = str & "{"
  28.         str = str & Replace("""touser"": ""#touser"",", "#touser", touser)
  29.         str = str & """msgtype"": ""text"","
  30.         str = str & Replace("""agentid"": #agentid,", "#agentid", agentid)
  31.         str = str & """text"": {"
  32.         str = str & Replace("""content"": ""#content""", "#content", content)
  33.         str = str & "},"
  34.         str = str & """safe"":0"
  35.         str = str & "}"
  36.         GetSendTextJson = str
  37. End Function

  38. '发送消息,,Https请求方式: POST
  39. '参数    必须    说明
  40. 'touser  否  成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
  41. 'toparty 否  部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
  42. 'totag   否  标签ID列表,多个接收者用‘|’分隔。当touser为@all时忽略本参数
  43. 'msgtype 是  消息类型,此时固定为:text
  44. 'agentid 是  企业应用的id,整型。可在应用的设置页面查看
  45. 'content 是  消息内容
  46. 'safe    否  表示是否是保密消息,0表示否,1表示是,默认0
  47. Public Function SendText(token As String, touser As String, agentid As Integer, text As String) As String
  48.     Dim url As String
  49.     Dim jsonData As String
  50.     Dim ret()  As Byte
  51.         url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" & token

  52.         jsonData = GetSendTextJson(touser, agentid, text)
  53.         Debug.Print jsonData
  54.         
  55.         ret = HttpPost(url, jsonData)
  56.         
  57.         SendText = ret
  58.         
  59. End Function

  60. Function HttpGet(url As String) As String
  61.      Dim xmlHttp As Object
  62.      Set xmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")
  63.      If Not IsObject(xmlHttp) Then
  64.          Set xmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")
  65.          If Not IsObject(xmlHttp) Then Exit Function
  66.      End If
  67.      xmlHttp.Open "GET", url, False
  68.      xmlHttp.setRequestHeader "CONTENT-TYPE", "application/json;charset=UTF-8"
  69.      xmlHttp.send

  70.      Do While xmlHttp.ReadyState <> 4
  71.          DoEvents
  72.      Loop
  73.   
  74.         Dim ret As String
  75.         ret = xmlHttp.responseText

  76.        HttpGet = ret
  77. End Function

  78. Function HttpPost(url As String, postMsg As String) As String
  79.      Dim xmlHttp As Object
  80.      Set xmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")
  81.      If Not IsObject(xmlHttp) Then
  82.          Set xmlHttp = CreateObject("Msxml2.XMLHTTP.3.0")
  83.          If Not IsObject(xmlHttp) Then Exit Function
  84.      End If
  85.      xmlHttp.Open "POST", url, False
  86.      xmlHttp.setRequestHeader "CONTENT-TYPE", "application/Json;charset=UTF-8"
  87.      xmlHttp.send (postMsg)

  88.      Do While xmlHttp.ReadyState <> 4
  89.          DoEvents
  90.      Loop

  91.         Dim ret As String
  92.         ret = xmlHttp.responseText
  93.         HttpPost = ret
  94. End Function
复制代码


参考文档:http://qydev.weixin.qq.com/wiki/ ... 3%E8%AF%B4%E6%98%8E



  1. Sub Test()
  2.     Dim token As String
  3.     token = GetToken
  4.     Debug.Print token
  5. End Sub

  6. Sub SendTest()
  7.     Dim token As String
  8.     token = GetToken
  9.     Debug.Print SendText(token, "@all", 0, "你好!这是测试消息,收到请回复。--fans发送")
  10. End Sub
复制代码

示例:
作者: zpy2    时间: 2016-12-29 11:33
ret = xmlHttp.responseText
这句返回utf8,要转吧。
另外,签名里的erp要微信才行吗?
作者: fan0217    时间: 2016-12-29 11:37
zpy2 发表于 2016-12-29 11:33
ret = xmlHttp.responseText
这句返回utf8,要转吧。
另外,签名里的erp要微信才行吗?

这段代码经过测试的,替换成自己的参数即可。
作者: zpy2    时间: 2016-12-29 11:42
没有企业号,应该是不错的。这代码与erp都要企业号吗?
作者: fan0217    时间: 2016-12-29 11:48
本帖最后由 fan0217 于 2016-12-29 11:51 编辑
zpy2 发表于 2016-12-29 11:42
没有企业号,应该是不错的。这代码与erp都要企业号吗?

代码需要微信企业号
ERP非必须,可直接用户名密码登录
作者: zpy2    时间: 2016-12-29 12:00
我用手机访问的,登陆后显示请在企业微信号中登陆。大概电脑才行吧。
作者: access新新新手    时间: 2017-8-29 10:19
老师您好!请讲讲如何使用的
作者: fan0217    时间: 2017-9-6 23:32
access新新新手 发表于 2017-8-29 10:19
老师您好!请讲讲如何使用的

上面已经讲了啊




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3