主动发送消息
在收到用户消息的48小时内,我们可以主动给用户发送消息(微信称之为客服消息)。
关于客服消息的接口说明,请参考:
https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Service_Center_messages.html
客服消息的为JSON格式,且必须提交access_token作为访问凭据。
主动发送文本消息
以下是主动发送文本消息的示例代码,你可以在命令窗口运行测试:
Dim
jo As
New 
JObject
jo("touser") 
= "ofjtFwBSZ5cNqTKLSKx2TNEAxfBI"
jo("msgtype") 
= "text"
jo("text") 
=  New 
JObject
jo("text")("content") 
= "您好,我是Foxtable"
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL, Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End 
If
主动发送动态图文消息
下面是主动发送动态图文消息的示例,你可以在命令窗口运行测试:
Dim
jo As
New 
JObject
Dim
ja As
New 
JArray
jo("touser") 
= "ofjtFwBSZ5cNqTKLSKx2TNEAxfBI"
jo("msgtype") 
= "news"
For
i As
Integer = 1
To 1 
'可以一次发送最多8个图文消息,这里只发送了1个
    Dim ao
As New
JObject()
    ao("title") 
= "特朗普提名保守派大法官"
'标题
    ao("description") 
= "特朗普在白宫提名尼尔·戈萨奇为美国最高法院大法官"
'描述
    ao("url") 
= "http://news.ifeng.com/a/20170201/50640529_0.shtml"
'连接
    ao("picurl") 
= 
"https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=1632653074,1222564348&fm=80&w=179&h=119&img.JPEG"
'图片
    ja.Add(ao)
Next
jo("news") 
=  New JObject()
jo("news")("articles") 
= ja
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End 
If
除了上面的动态图文消息,还有一种永久图文消息,永久图文消息是一种素材,需要事先上传到服务器,发送的时候,将素材ID发给客户即可。
准备素材
不管是被动回复还是主动发送,除了文本和动态图文消息,其它要发送给用户的消息,包括图片、视频、语音以及永久图文消息,都必须事先将相关文件上传到微信服务器。
因为微信服务器并不会直接给用户发送文件,而是发送一个素材ID(MediaId),每一个素材ID都对应者一个素材文件。
关于素材的管理,请参考后面的《素材接口》这一章。
主动发送图片消息
必须事先将要发送的图片上传到微信服务器,因为我们发送的只能是图片素材的ID,无法直接发送文件。
主动发送图片消息参考代码:
Dim
jo As
New 
JObject
jo("touser") 
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype") 
= "image"
jo("image") 
=  New 
JObject
jo("image")("media_id") 
= 
"eHDdfBQmRtOJ-PtkD6WENicqBE7-tFFczZ6p5ZUnz0k"
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End 
If
主动发送视频消息
必须事先将要发送的视频上传到微信服务器,因为我们发送的只能是视频素材的ID,无法直接发送文件。
主动发送视频消息参考代码:
Dim
jo As
New JObject
jo("touser") 
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype") 
= "video"
jo("video") 
=  New JObject
jo("video")("media_id") 
= "eHDdfBQmRtOJ-PtkD6WENoqiLnKOzd9llepgH1VioLM"
jo("video")("title") 
= "视频标题"
jo("video")("description") 
= "视频内容简介"
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End
If
主动发送语音消息
必须事先将要发送的语音上传到微信服务器,因为我们发送的只能是语音素材的ID,无法直接发送文件。
主动发送语音消息参考代码:
Dim
jo As
New JObject
jo("touser") 
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype") 
= "voice"
jo("voice") 
=  New JObject
jo("voice")("media_id") 
= "eHDdfBQmRtOJ-PtkD6WENrp8gcW8NSKXkp9sOzn3NoQ"
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End
If
主动发送永久图文消息
和动态合成的图文消息不同,永久图文消息需要事先上传到服务器,之后将素材ID发送给用户。
主动发送永久图文消息的参考代码:
Dim
jo As
New JObject
jo("touser") 
= "oQdguwzDwS696vh5vnXU3u0aD9fk"
jo("msgtype") 
= "mpnews"
jo("mpnews") 
=  New JObject
jo("mpnews")("media_id") 
= "eHDdfBQmRtOJ-PtkD6WENpJyI8iZ7Qy2l5SvQS58Jz0"
'素材ID
Dim
URL As
String = 
"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(URL,
Functions.Execute("GetAccessToken")))
hc.Content 
= jo.ToString()
jo =
JObject.Parse(hc.GetData())
If
jo("errcode") 
= "0" Then
    MessageBox.Show("消息发送成功")
Else
    MessageBox.show("消息发送失败,原因:"
& vbcrlf 
& jo("errmsg").ToString)
End
If