/// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventType"></param>
 /// <param name="eventKey"></param>
 /// <param name="scanCodeInfo"></param>
 public RequestScanCodeMessage(string toUserName, string fromUserName, DateTime createTime,
                               RequestEventTypeEnum eventType, string eventKey, ScanCodeInfo scanCodeInfo)
     : base(toUserName, fromUserName, createTime, eventType)
 {
     if (eventType != RequestEventTypeEnum.scancode_push &&
         eventType != RequestEventTypeEnum.scancode_waitmsg)
     {
         throw new ArgumentOutOfRangeException("EventType", "事件类型错误。");
     }
     ScanCodeInfo = scanCodeInfo;
 }
示例#2
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventType"></param>
 /// <param name="eventKey"></param>
 /// <param name="sendPicsInfo"></param>
 public RequestPicMessage(string toUserName, string fromUserName, DateTime createTime,
                          RequestEventTypeEnum eventType, string eventKey, SendPicsInfo sendPicsInfo)
     : base(toUserName, fromUserName, createTime, eventType)
 {
     if (eventType != RequestEventTypeEnum.pic_sysphoto &&
         eventType != RequestEventTypeEnum.pic_photo_or_album &&
         eventType != RequestEventTypeEnum.pic_weixin)
     {
         throw new ArgumentOutOfRangeException("Event", "错误的事件类型。");
     }
     EventKey     = eventKey;
     SendPicsInfo = sendPicsInfo;
 }
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventType"></param>
 /// <param name="eventKey"></param>
 /// <param name="scanType"></param>
 /// <param name="scanResult"></param>
 public RequestScanCodeMessage(string toUserName, string fromUserName, DateTime createTime,
                               RequestEventTypeEnum eventType, string eventKey, string scanType, string scanResult)
     : this(toUserName, fromUserName, createTime, eventType, eventKey, new ScanCodeInfo(scanType, scanResult))
 {
 }
示例#4
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventType"></param>
 /// <param name="eventKey"></param>
 /// <param name="pic"></param>
 public RequestPicMessage(string toUserName, string fromUserName, DateTime createTime,
                          RequestEventTypeEnum eventType, string eventKey, string pic)
     : this(toUserName, fromUserName, createTime, eventType, eventKey, new string[] { pic })
 {
 }
示例#5
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventType"></param>
 /// <param name="eventKey"></param>
 /// <param name="pics"></param>
 public RequestPicMessage(string toUserName, string fromUserName, DateTime createTime,
                          RequestEventTypeEnum eventType, string eventKey, IEnumerable <string> pics)
     : this(toUserName, fromUserName, createTime, eventType, eventKey, new SendPicsInfo(pics))
 {
 }
示例#6
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="toUserName"></param>
 /// <param name="fromUserName"></param>
 /// <param name="createTime"></param>
 /// <param name="eventKey"></param>
 public RequestEventMessage(string toUserName, string fromUserName, DateTime createTime,
                            RequestEventTypeEnum eventType)
     : base(toUserName, fromUserName, createTime, RequestMessageTypeEnum.Event)
 {
     Event = eventType;
 }
示例#7
0
        /// <summary>
        /// 解析弹出发送图片的推送事件消息
        /// </summary>
        /// <param name="baseMessage">消息基类</param>
        /// <param name="eventType">事件类型</param>
        /// <param name="jo">消息对象</param>
        /// <returns>返回弹出发送图片的推送事件消息</returns>
        private static RequestPicMessage ParsePicMessage(RequestBaseMessage baseMessage, RequestEventTypeEnum eventType, JObject jo)
        {
            string eventKey = (string)jo["EventKey"][CDATA_KEY];

            if (string.IsNullOrWhiteSpace(eventKey))
            {
                throw new ArgumentNullException("EventKey", "EventKey为空。");
            }
            JObject joSendPicsInfo = (JObject)jo["SendPicsInfo"];
            int     count          = (int)joSendPicsInfo["Count"];

            if (count <= 0)
            {
                throw new ArgumentOutOfRangeException("Count", "解析弹出发送图片的推送事件消息出错,图片数量必须大于0。");
            }
            else
            {
                JToken jtPicList = joSendPicsInfo["PicList"];
                if (jtPicList.Type == JTokenType.Array)
                {
                    string[] pics      = new string[count];
                    JArray   jaPicList = (JArray)jtPicList;
                    int      idx       = 0;
                    foreach (JObject joItem in jaPicList)
                    {
                        string pic = (string)joItem["item"]["PicMd5Sum"][CDATA_KEY];
                        pics[idx] = pic;
                        idx++;
                    }
                    return(new RequestPicMessage(baseMessage.ToUserName, baseMessage.FromUserName, baseMessage.CreateTime,
                                                 eventType, eventKey, pics));
                }
                else if (jtPicList.Type == JTokenType.Object)
                {
                    JObject joPicList = (JObject)jtPicList;
                    string  pic       = (string)joPicList["item"]["PicMd5Sum"][CDATA_KEY];
                    return(new RequestPicMessage(baseMessage.ToUserName, baseMessage.FromUserName, baseMessage.CreateTime,
                                                 eventType, eventKey, pic));
                }
                else
                {
                    throw new ArgumentOutOfRangeException("PicList", "解析弹出发送图片的推送事件消息出错,图片列表不正确。");
                }
            }
        }
示例#8
0
        /// <summary>
        /// 解析扫码的推送事件消息
        /// </summary>
        /// <param name="baseMessage">消息基类</param>
        /// <param name="eventType">事件类型</param>
        /// <param name="jo">消息对象</param>
        /// <returns>返回扫码的推送事件消息</returns>
        private static RequestScanCodeMessage ParseScanCodeMessage(RequestBaseMessage baseMessage, RequestEventTypeEnum eventType, JObject jo)
        {
            string eventKey = (string)jo["EventKey"][CDATA_KEY];

            if (string.IsNullOrWhiteSpace(eventKey))
            {
                throw new ArgumentNullException("EventKey", "EventKey为空。");
            }
            JObject joScanCodeInfo = (JObject)jo["ScanCodeInfo"];
            string  scanType       = (string)joScanCodeInfo["ScanType"][CDATA_KEY];
            string  scanResult     = (string)joScanCodeInfo["ScanResult"][CDATA_KEY];

            return(new RequestScanCodeMessage(baseMessage.ToUserName, baseMessage.FromUserName, baseMessage.CreateTime,
                                              eventType, eventKey, scanType, scanResult));
        }
示例#9
0
        /// <summary>
        /// 解析事件消息
        /// </summary>
        /// <param name="baseMessage">消息基类</param>
        /// <param name="jo">消息对象</param>
        /// <returns>返回事件消息</returns>
        private static RequestBaseMessage ParseEventMessage(RequestBaseMessage baseMessage, JObject jo)
        {
            RequestBaseMessage msg      = null;
            string             strEvent = (string)jo["Event"][CDATA_KEY];

            if (string.IsNullOrWhiteSpace(strEvent))
            {
                throw new ArgumentNullException("Event", "Event为空。");
            }
            RequestEventTypeEnum eventType = (RequestEventTypeEnum)Enum.Parse(typeof(RequestEventTypeEnum), strEvent, true);

            switch (eventType)
            {
            case RequestEventTypeEnum.subscribe:
                msg = ParseSubscribeMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.unsubscribe:
                msg = ParseUnsubscribeMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.SCAN:
                msg = ParseScanMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.LOCATION:
                msg = ParseReportLocationMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.CLICK:
                msg = ParseClickMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.VIEW:
                msg = ParseViewMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.scancode_push:
            case RequestEventTypeEnum.scancode_waitmsg:
                msg = ParseScanCodeMessage(baseMessage, eventType, jo);
                break;

            case RequestEventTypeEnum.pic_sysphoto:
            case RequestEventTypeEnum.pic_photo_or_album:
            case RequestEventTypeEnum.pic_weixin:
                msg = ParsePicMessage(baseMessage, eventType, jo);
                break;

            case RequestEventTypeEnum.location_select:
                msg = ParseLocationSelectMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.MASSSENDJOBFINISH:
                msg = ParseMassSendJobFinishMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.TEMPLATESENDJOBFINISH:
                msg = ParseTemplateSendJobFinishMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.kf_create_session:
                msg = ParseKfCreateAccountMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.kf_close_session:
                msg = ParseKfCloseAccountMessage(baseMessage, jo);
                break;

            case RequestEventTypeEnum.kf_switch_session:
                msg = ParseKfSwitchAccountMessage(baseMessage, jo);
                break;

            default:
                throw new NotImplementedException(string.Format("未实现消息类型{0:g}解析。", msg.MsgType));
            }
            return(msg);
        }