위챗 애플릿 위챗 개발 asp.net을 이용한 WeChat 공개 플랫폼 개발 (3) WeChat 메시지 캡슐화 및 반영 할당

asp.net을 이용한 WeChat 공개 플랫폼 개발 (3) WeChat 메시지 캡슐화 및 반영 할당

Feb 23, 2017 pm 02:07 PM
위챗 공개 플랫폼

이전 기사에서는 전체 프레임워크가 구축되고 입장 확인이 구현되었습니다. 확인을 통과한 후 LookMsgType 메서드로 넘겨집니다. LookMsgType 메서드는 주로 WeChat에서 보낸 다양한 메시지를 분해합니다. 유형은 비즈니스 로직에 전달되며, 레이어를 처리하는 데에는 if 또는 스위치를 사용하는 것이 좋습니다. LookMsgType 메서드는 여기에 게시되어 있습니다:

public void LookMsgType(string msgType)
        {

            #region 判断消息类型
            switch (msgType)
            {
                case "text":
                    RText mText = new RText();
                    mText = ReadXml.GetModel<rtext>(mText, xmlModel);
                    BLLWei.DoText(dbHome, mText);//文本消息
                    break;
                case "image":
                    RImg mImg = new RImg();
                    mImg = ReadXml.GetModel<rimg>(mImg, xmlModel);
                    BLLWei.DoImg(dbHome,mImg);//图片
                    break;
                case "voice": //声音
                    RVoice mVoice = new RVoice();
                    mVoice = ReadXml.GetModel<rvoice>(mVoice, xmlModel);
                    BLLWei.DoVoice(dbHome,mVoice);
                    break;

                case "video"://视频
                    RVideo mVideo = new RVideo();
                    mVideo = ReadXml.GetModel<rvideo>(mVideo, xmlModel);
                    BLLWei.DoVideo(dbHome, mVideo);
                    break;

                case "location"://地理位置
                    RLocation mLocation = new RLocation();
                    mLocation = ReadXml.GetModel<rlocation>(mLocation, xmlModel);
                    BLLWei.DoLocation(dbHome,mLocation);
                    break;
                case "link"://链接
                    RLink mLink = new RLink();
                    mLink = ReadXml.GetModel<rlink>(mLink, xmlModel);
                    BLLWei.DoLink(dbHome,mLink);
                    break;
                #region 事件
                case "event":

                    switch (ReadXml.ReadModel("Event", xmlModel))
                    {
                        case "subscribe":

                            if (ReadXml.ReadModel("EventKey", xmlModel).IndexOf("qrscene_") >= 0)
                            {
                                RCodeNotSub mNotSub = new RCodeNotSub();
                                mNotSub = ReadXml.GetModel<rcodenotsub>(mNotSub, xmlModel);
                                BLLWei.DoCodeNotSub(dbHome,mNotSub);//未关注的新用户,扫描带参数的二维码关注
                            }
                            else
                            {
                                RSub mSub = new RSub();
                                mSub = ReadXml.GetModel<rsub>(mSub, xmlModel);
                                BLLWei.DoSub(dbHome,mSub);//普通关注
                            }
                            break;
                        case "unsubscribe":
                            RUnsub mUnSub = new RUnsub ();
                            mUnSub = ReadXml.GetModel<runsub>(mUnSub, xmlModel);
                            BLLWei.DoUnSub(dbHome,mUnSub);//取消关注
                            break;

                        case "SCAN":
                            RCodeSub mCodeSub = new RCodeSub();
                            mCodeSub = ReadXml.GetModel<rcodesub>(mCodeSub, xmlModel);
                            BLLWei.DoCodeSub(dbHome,mCodeSub);//已经关注的用户扫描带参数的二维码
                            break;
                        case "LOCATION"://用户上报地理位置

                            RSubLocation mSubLoc = new RSubLocation();
                            mSubLoc = ReadXml.GetModel<rsublocation>(mSubLoc, xmlModel);

                            BLLWei.DoSubLocation(dbHome, mSubLoc);
                            break;
                        case "CLICK"://自定义菜单点击

                            RMenuClick mMenuClk = new RMenuClick();
                            mMenuClk = ReadXml.GetModel<rmenuclick>(mMenuClk, xmlModel);
                            BLLWei.DoMenuClick(dbHome, mMenuClk);
                            break;
                        case "VIEW"://自定义菜单跳转事件

                            RMenuView mMenuVw = new RMenuView();
                            mMenuVw = ReadXml.GetModel<rmenuview>(mMenuVw, xmlModel);
                            BLLWei.DoMenuView(dbHome, mMenuVw);
                            break;
                    };
                    break;
                #endregion
            }
            #endregion
        }</rmenuview></rmenuclick></rsublocation></rcodesub></runsub></rsub></rcodenotsub></rlink></rlocation></rvideo></rvoice></rimg></rtext>
로그인 후 복사

외부 레이어 스위치가 메시지 유형을 결정합니다. 이벤트 유형이 사용되면 다시 전환하여 특정 이벤트 유형(팔로우, 팔로우 취소, 사용자 정의 메뉴 이벤트)을 결정합니다. 등) 이 시점에서 WeChat에서 보낸 모든 메시지가 처리되었습니다. 위 메시지 모델과 ReadXml.GetModel 메서드는 모델에 값을 할당하는 데 사용됩니다. 처리를 위해 비즈니스 논리 계층의 해당 메서드로 전달됩니다. 메시지 캡슐화 및 모델 할당을 위한 메서드는 다음과 같습니다.

1. 메시지 캡슐화:

WeChat에서 보낸 모든 메시지를 데이터 모델에 생성하고 메시지에 해당하는 클래스를 생성합니다. 전체 데이터 모델 클래스 라이브러리는 아래와 같습니다:

asp.net을 이용한 WeChat 공개 플랫폼 개발 (3) WeChat 메시지 캡슐화 및 반영 할당

------메시지 수신:

문자 메시지 RText . cs

public class RText
    {
        public string ToUserName { get; set; }// 开发者微信号
        public string FromUserName { get; set; }// 用户号(OpenID)
        public long CreateTime { get; set; }// 创建时间
        public string MsgType { get; set; } //消息类型
        public string Content { get; set; }//内容
        public long MsgId { get; set; }//消息ID

    }
로그인 후 복사

메뉴를 사용자 정의하고 RMenuClick.cs

public class RMenuClick
    {
        public string ToUserName { get; set; }// 开发者微信号
        public string FromUserName { get; set; }// 用户号(OpenID)
        public long CreateTime { get; set; }// 创建时间
        public string MsgType { get; set; } //消息类型

        public string Event { get; set; }//事件类型
        public string EventKey { get; set; }//事件key
        
    }
로그인 후 복사

를 클릭하세요. 다른 것도 비슷해서 하나씩 나열되지 않습니다.

-----메시지 보내기

문자 메시지 보내기 SText.cs

public class SText
    {



        public string ToUserName { get; set; }// 用户号(OpenID)
        public string FromUserName { get; set; }// 开发者微信号

        public long CreateTime { get; set; }// 创建时间

        public string MsgType { get { return "text"; } } //消息类型

        public string Content { get; set; }//内容


    }

SText
로그인 후 복사

그래픽 메시지 보내기 SNews.cs

namespace DataModel.Send
{
    public class SNews
    {
        public string ToUserName { get; set; }// 用户号(OpenID)
        public string FromUserName { get; set; }// 开发者微信号

        public long CreateTime { get; set; }// 创建时间

        public string MsgType { get { return "news"; } } //消息类型

        public int ArticleCount { get; set; }//图文个数

        public List<articlesmodel> Articles { get; set; }//图文列表
    }
    public class ArticlesModel //默认第一条大图显示
    {
        public string Title { get; set; }//标题
        public string Description { get; set; }//描述
        public string PicUrl { get; set; }//图片链接  
        public string Url { get; set; }//点击之后跳转的链接

    }
}</articlesmodel>
로그인 후 복사

그래픽 메시지를 보낼 때 WeChat에 대한 답변에는 여러 개의 특정 그래픽 메시지(최대 10개)가 있으므로 별도의 ArticlesModel이 있습니다. 다음 문서에서는 그래픽 메시지 전송에 대해 설명합니다.

2. Reflection을 통해 모델에 값을 할당

이전 글 입구에는 이미 xml을 파싱하는 방법이 있고, 이제 메시지가 캡슐화되어 있습니다. 매번 코드를 수동으로 작성하여 해당 모델을 할당하는 것입니다. 여기의 LookMsgType 메서드에서는 메시지에 값을 할당할 때 ReadXml.GetModel과 동일한 메서드를 사용합니다.

/// <summary>
        /// 通过反射给接收消息model赋值
        /// </summary>
        /// <typeparam></typeparam>
        /// <param>
        /// <returns></returns>
        public static T GetModel<t>(T model, Dictionary<string> xmlModel) where T : class
        {
            var m = model.GetType();
            foreach (PropertyInfo p in m.GetProperties())
            {
                string name = p.Name;
                if (xmlModel.Keys.Contains(name))
                {
                    string value=xmlModel.Where(x => x.Key == name).FirstOrDefault().Value;
                    p.SetValue(model,
                    string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, p.PropertyType), null); 
                }
            }
            return model;
        }</string></t>
로그인 후 복사

T 모델은 사용할 메시지 클래스인 xmlmodel은 입구에서 전달되는 WeChat에서 전송된 구문 분석된 xml 정보입니다. 이렇게 하면 수동으로 코드를 작성할 필요가 없습니다. 매번 값을 할당하십시오.

좋아요, 이 기사에서는 Lookmsgtype 메소드를 구현하고 메시지 캡슐화 및 반사 할당을 구현한 다음 비즈니스 로직 계층에서 처리 및 특정 구현을 수행했습니다...

asp .net 개발 더보기 위챗 공개 플랫폼 (3) 위챗 메시지 캡슐화 및 반영 할당 관련 글은 PHP 중국어 홈페이지를 주목해주세요!


본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)