主动发送消息

在收到用户消息的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


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