示例#1
0
        void Process(Func <dynamic> mediaIdFiled, Func <dynamic> part, Func <dynamic> createAtFiled
                     , Action <string> setMediaId, Action <int> setCreateAt, string type)
        {
            string mediaId1 = mediaIdFiled();
            int    create1  = 0;

            int.TryParse(createAtFiled(), out create1);
            if (string.IsNullOrWhiteSpace(mediaId1) || create1 == 0 ||
                _winXinService.ConvertWXDateTimeInt(DateTime.Now) - create1 >= 3600 * 24 * 3)
            {
                var model1 = _weiXinSdk.UploadFile(part(), type);
                if (model1 != null)
                {
                    //将上传后的媒体项保存到内容中.
                    setMediaId(model1.media_id);
                    setCreateAt(model1.created_at);
                }
            }
        }
        public ActionResult Index(WXReqModel model)
        {
            var workContext = _orchardServices.WorkContext;
            var wxSettings  = workContext.CurrentSite.As <WinXinSettingsPart>();

            if (model.ToUserName != wxSettings.UserName)
            {
                return(Content(string.Format(@"<xml>
<ToUserName><![CDATA[{0}]]></ToUserName>
<FromUserName><![CDATA[{1}]]></FromUserName>
<CreateTime>{2}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[{3}]]></Content>
</xml>
", model.FromUserName, model.ToUserName, _winXinService.ConvertWXDateTimeInt(DateTime.Now), T("微信平台对接错误,本平台不为此服务号或订阅号提供服务!"))));
            }

            string name = null;

            switch (model.MsgType)
            {
            case "text":
                name = "微信文本消息";
                break;

            case "image":
                name = "微信图片消息";
                break;

            case "voice":
                name = "微信语音消息";
                break;

            case "video":
                name = "微信视频消息";
                break;

            case "location":
                name = "微信地理位置消息";
                break;

            case "link":
                name = "微信链接消息";
                break;

            case "event":
                name = "微信事件消息";
                if (model.Event == "LOCATION")
                {
                    name = "微信上报地理位置事件";
                }
                break;

            default:
                throw new OrchardException(T(string.Format("未知的消息类型:{0}", model.MsgType)));
            }
            if (String.IsNullOrEmpty(Owner))
            {
                Owner = _siteService.GetSiteSettings().SuperUser;
            }
            var owner = _membershipService.GetUser(Owner);
            var msg   = _contentManager.New("WeiXinMsg");

            msg.As <ICommonPart>().Owner = owner;
            var part = msg.As <WXMsgPart>();

            part.ToUserName   = model.ToUserName;
            part.FromUserName = model.FromUserName;
            part.CreateTime   = model.CreateTime;
            part.MsgType      = model.MsgType;
            part.Content      = model.Content;
            part.Location_X   = model.Location_X;
            part.Location_Y   = model.Location_Y;
            part.Scale        = model.Scale;
            part.Label        = model.Label;
            part.PicUrl       = model.PicUrl;
            part.EventKey     = model.EventKey;
            part.Event        = model.Event;

            part.MsgId        = model.MsgId;
            part.MediaId      = model.MediaId;
            part.Format       = model.Format;
            part.ThumbMediaId = model.ThumbMediaId;
            part.Title        = model.Title;
            part.Description  = model.Description;
            part.Url          = model.Url;
            part.Ticket       = model.Ticket;
            part.Latitude     = model.Latitude;
            part.Longitude    = model.Longitude;
            part.Precision    = model.Precision;
            part.Recongnition = model.Recongnition;
            part.XML          = model.XML;

            _contentManager.Create(msg);

            _workflowManager.TriggerEvent(name, msg, () => new Dictionary <string, object> {
                { "Content", msg }
            });

            var tupleList = _weiXinResp.List();
            var list      = Shape.List(Attributes: new Dictionary <string, object> {
                { "ToUserName", model.FromUserName }, { "FromUserName", model.ToUserName }
            });

            list.AddRange(tupleList.Select(t => _contentManager.BuildDisplay(t.Item1, "Detail")));

            var viewModel = Shape.ViewModel()
                            .ContentItems(list);

            return(View(viewModel));
        }