获取群发结果
微信服务器在完成群发消息任务后,会向Foxtable端的Http服务推送一个消息,我们可以据此获取群发结果。
首先我们要新建一个表,表名为MassMessage,用于存储消息群发结果,表结构如下:
以群发文本消息为例,将群发代码修改为:
Dim
url As
String =
"https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token={0}"
Dim
hc As
New HttpClient(CExp(url,
Functions.Execute("GetAccessToken")))
Dim
jo As
New JObject()
Dim
ja As
New
JArray
ja.Add("ofjtFwBSZ5cNqTKLSKx2TNEAxfBI")
'添加用户OpenID
ja.Add("ofjtFwGvPBfy9aGz9OJ-qWiG5oA0")
jo("touser")
= ja
jo("msgtype")
= "text"
jo("text")
= New
JObject
jo("text")("content")
= "需要群发的文本消息"
hc.Content
= jo.ToString()
jo =
JObject.Parse(hc.GetData)
If
jo("errcode")
= "0" Then
Dim dr
As DataRow
= DataTables("MassMessage").AddNew
dr("MsgID")
= jo("msg_id")
dr("Description")
= "本次群发任务说明"
Else
MessageBox.Show(jo("errmsg"))
End
If
修改代码的目的是为例在群发消息提交成功后,获取饭回来的消息ID(MsgID),微信服务器完成群发之后,推送的事件中包括消息ID。
最后修改Foxtable端的HttpRequest事件代码为:
Select
Case e.path
Case "wefox"
If e.Request.HttpMethod.ToUpper
= "GET"
If
Functions.Execute("VerifySignature",e)
Then
e.WriteString(e.GetValues("echostr"))
End
If
ElseIf e.Request.HttpMethod.ToUpper
= "Post"
Dim
xo As
Foxtable.XObject =
Foxtable.XObject.Parse(e.PlainText)
Dim st
As New
Date(1970,1,1,8,0,0)
Select
Case xo("MsgType")
Case
"text","image"
'保存和回复文本和图片消息的代码
Case
"event"
Select
Case xo("Event")
Case
"subscribe"
'关注事件
'处理用户关注事件的代码
Case
"unsubscribe"
'取消关注事件
'处理用户取消关注事件的代码'
Case
"LOCATION"
'上报地理位置事件
'处理用户上报地理位置的代码
Case
"TEMPLATESENDJOBFINISH"
'处理模板消息发送事件的代码
Case
"MASSSENDJOBFINISH"
Dim
dr As
DataRow =
DataTables("MassMessage").Find("MsgID
= " & xo("MsgID").ToString)
If
dr Is
Nothing Then
dr =
DataTables("MassMessage").AddNew()
dr("MsgID")
= xo("MsgID")
'动态生成的消息ID,每个消息都不同
End
If
dr("Status")
= xo("Status")
'记录发送状态
dr("TotalCount")
= xo("TotalCount")
'尝试发送人数
dr("SentCount")
= xo("SentCount")
'成功发送人数
dr("ErrorCount")
= xo("ErrorCount")
'发送失败人数
dr.Save()
End
Select
End
Select
End
If
End
Select
我建议你将HttpRequest事件中的每个任务都做成自定义函数,避免HttpRequest事件代码过程。