设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3524|回复: 7
打印 上一主题 下一主题

[模块/函数] 【抛砖引玉】在Access中使用微信企业号2

[复制链接]
跳转到指定楼层
1#
发表于 2016-12-28 23:19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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
复制代码

示例:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖 订阅订阅

点击这里给我发消息

2#
发表于 2016-12-29 11:33:24 来自手机 | 只看该作者
ret = xmlHttp.responseText
这句返回utf8,要转吧。
另外,签名里的erp要微信才行吗?
来自: 微社区
3#
 楼主| 发表于 2016-12-29 11:37:19 | 只看该作者
zpy2 发表于 2016-12-29 11:33
ret = xmlHttp.responseText
这句返回utf8,要转吧。
另外,签名里的erp要微信才行吗?

这段代码经过测试的,替换成自己的参数即可。

点击这里给我发消息

4#
发表于 2016-12-29 11:42:15 来自手机 | 只看该作者
没有企业号,应该是不错的。这代码与erp都要企业号吗?
来自: 微社区
5#
 楼主| 发表于 2016-12-29 11:48:07 | 只看该作者
本帖最后由 fan0217 于 2016-12-29 11:51 编辑
zpy2 发表于 2016-12-29 11:42
没有企业号,应该是不错的。这代码与erp都要企业号吗?

代码需要微信企业号
ERP非必须,可直接用户名密码登录

点击这里给我发消息

6#
发表于 2016-12-29 12:00:58 来自手机 | 只看该作者
我用手机访问的,登陆后显示请在企业微信号中登陆。大概电脑才行吧。
来自: 微社区
7#
发表于 2017-8-29 10:19:56 | 只看该作者
老师您好!请讲讲如何使用的
8#
 楼主| 发表于 2017-9-6 23:32:32 | 只看该作者
access新新新手 发表于 2017-8-29 10:19
老师您好!请讲讲如何使用的

上面已经讲了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-25 11:47 , Processed in 0.121178 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表