Exemple #1
0
    /// <summary>
    /// 批量获取素材
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void btnBatchGet_Click(object sender, EventArgs e)
    {
        ltrMessage.Text = "";
        lbMeterial.Items.Clear();
        string       userName = lbPublicAccount.SelectedValue;
        ErrorMessage errorMessage;
        int          count = 20;

        foreach (MultiMediaTypeEnum type in Enum.GetValues(typeof(MultiMediaTypeEnum)))
        {
            int           offset = 0;
            BatchMeterial bm     = null;
            while (true)
            {
                bm = Meterial.BatchGet(userName, type, offset, count, out errorMessage);
                if (bm == null || !errorMessage.IsSuccess)
                {
                    ltrMessage.Text = string.Format("批量获取素材错误。{0}", errorMessage);
                    break;
                }
                offset += count;
                if (bm.Item != null && bm.Item.Length > 0)
                {
                    foreach (MeterialItem mi in bm.Item)
                    {
                        lbMeterial.Items.Add(new ListItem(mi.ToString(), mi.MediaId));
                    }
                }
            }
        }
        ltrMessage.Text += string.Format("共获取到{0}个素材。", lbMeterial.Items.Count);
    }
        /// <summary>
        /// 从xml字符串解析消息
        /// </summary>
        /// <param name="xml">xml字符串</param>
        /// <returns>返回消息</returns>
        public static RequestBaseMessage Parse(string xml)
        {
            try
            {
                RequestBaseMessage msg = null;
                //将xml字符串解析成JObject对象
                XmlDocument doc = new XmlDocument();
                doc.LoadXml(xml);
                string  json    = JsonConvert.SerializeXmlNode(doc);
                JObject jo      = (JObject)JObject.Parse(json)["xml"];
                string  MsgType = (string)jo["MsgType"][CDATA_KEY];
                WXLog.Write(MsgType, "进来" + MsgType + "事件了");
                //解析消息基类
                msg = ParseBaseMessage(jo);
                ErrorMessage  e = null;
                BatchMeterial b = MyWay.Areas.WeiXin.Meterial.Meterial.BatchGet("测试公众号", MultiMediaTypeEnum.news, 0, 2, out e);
                //获取各分类的字段,并构造消息
                switch (msg.MsgType)
                {
                case RequestMessageTypeEnum.text:
                    string content = (string)jo["Content"][CDATA_KEY];
                    if (content == "天气")
                    {
                        msg = ParseImageMessage1(msg, jo, "https://mmbiz.qlogo.cn/mmbiz/D1aYATIFatWdxfb99IPptNDj3vqCiaSLpspegmdU4IFpRd40oqctN9gI9g2EZE4qq5eTqEAP2Xjb9J0onD5nNWQ/0?wx_fmt=jpeg", "nxoGNdQHF7AWPDlpfGZQ9_TkxdCdC3rUe0CbGZ5Ss5Y");
                    }
                    else if (content == "时间")
                    {
                        msg = ParseTextMessage1(msg, jo);
                    }
                    else
                    {
                        msg = ParseTextMessage(msg, jo);
                    }
                    break;

                case RequestMessageTypeEnum.image:
                    msg = ParseImageMessage(msg, jo);
                    break;

                case RequestMessageTypeEnum.voice:

                    msg = ParseVoiceMessage(msg, jo);
                    break;

                case RequestMessageTypeEnum.video:
                    msg = ParseVideoMessage(msg, jo);
                    break;

                case RequestMessageTypeEnum.location:
                    msg = ParseLocationMessage(msg, jo);
                    break;

                case RequestMessageTypeEnum.link:
                    msg = ParseLinkMessage(msg, jo);
                    break;

                case RequestMessageTypeEnum.Event:
                    msg = ParseEventMessage(msg, jo);
                    break;

                default:
                    throw new NotImplementedException(string.Format("未实现消息类型{0:g}解析。", msg.MsgType));
                }
                //返回
                return(msg);
            }
            catch (Exception ex)
            {
                Log.WriteFile(ex);
                throw;
            }
        }