获取群发结果

微信服务器在完成群发消息任务后,会向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事件代码过程。


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