国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table of Contents
Text message:
Picture message:
Voice message:
Video message:
Geolocation message:
Link message:
Home WeChat Applet WeChat Development WeChat development for receiving text messages

WeChat development for receiving text messages

May 09, 2017 am 09:43 AM

The message types in WeChat are: text, picture, voice, video, geographical location, link and event message. Except for event messages, the others are collectively called ordinary messages. The push and response of messages in WeChat are transmitted in xml data packets. When a user sends a message to an official account, if the WeChat server does not receive a response within five seconds, it will disconnect and re-initiate the request, retrying a total of three times. Ordinary messages can be deduplicated using msgid to avoid the impact of duplicate messages on business logic.

If the server cannot guarantee to process and reply within five seconds, you can directly reply with an empty string. The WeChat server will not process this request and will not initiate a retry. It should be noted that the reply to the empty string mentioned here is not to reply to an empty text message, but to respond directly to Response.Write("").

The following is a brief explanation of each common message.

Text message:
<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>
Picture message:
<xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName>
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[image]]></MsgType>
 <PicUrl><![CDATA[this is a url]]></PicUrl>
 <MediaId><![CDATA[media_id]]></MediaId>
 <MsgId>1234567890123456</MsgId>
 </xml>
Voice message:
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[voice]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><Format><![CDATA[Format]]></Format><MsgId>1234567890123456</MsgId></xml>
Video message:
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1357290913</CreateTime><MsgType><![CDATA[video]]></MsgType><MediaId><![CDATA[media_id]]></MediaId><ThumbMediaId><![CDATA[thumb_media_id]]></ThumbMediaId><MsgId>1234567890123456</MsgId></xml>
Geolocation message:
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[location]]></MsgType><Location_X>23.134521</Location_X><Location_Y>113.358803</Location_Y><Scale>20</Scale><Label><![CDATA[位置信息]]></Label><MsgId>1234567890123456</MsgId></xml>
<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1351776360</CreateTime><MsgType><![CDATA[link]]></MsgType><Title><![CDATA[公眾平臺官網(wǎng)鏈接]]></Title><Description><![CDATA[公眾平臺官網(wǎng)鏈接]]></Description><Url><![CDATA[url]]></Url><MsgId>1234567890123456</MsgId></xml>

Careful programmers should have discovered that all messages (including event messages) contain the following fields

ParameterDescription
ToUserNameReceiver’s WeChat ID
FromUserNameSender’s WeChat ID, if it is normal The user is an OpenID
CreateTimeMessage creation time
MsgTypeMessage type

The types of messages have been mentioned at the beginning of the article, they are: text, image, voice, video, geographical location (location), link (link), event (event)

In order to facilitate management and code writing, we can write an enumeration for these message types. As follows:

/// <summary>
    /// 消息類型枚舉    /// </summary>
    public enum MsgType
    {        /// <summary>
        ///文本類型        /// </summary>        TEXT,        /// <summary>
        /// 圖片類型        /// </summary>        IMAGE,        /// <summary>
        /// 語音類型        /// </summary>        VOICE,        /// <summary>
        /// 視頻類型        /// </summary>        VIDEO,        /// <summary>
        /// 地理位置類型        /// </summary>        LOCATION,        /// <summary>
        /// 鏈接類型        /// </summary>        LINK,        /// <summary>
        /// 事件類型        /// </summary>        EVENT
    }

Let me explain here, event is a keyword in C#, so event cannot be used in enumerations, so for the sake of uniformity, I use all uppercase for enumerations here.

Since all message bodies have the above fields, you can write a base class, and then different message entities inherit this base class. (I have been struggling with a problem. I used to write all the fields in the message body in a class, which is very convenient to call. However, there are more and more fields in the class, which makes me uncomfortable. In addition, I I have little knowledge and object-oriented and am not proficient in using it, so I always list all the fields in a class

When calling, directly var ss = WeiXinRequest.RequestHelper(token, EncodingAESKey, appid ; The readability has been improved, but calling it is not as convenient as before. Friends, please give me some suggestions

)

The following are the base classes of each message entity:

public abstract class BaseMessage
    {        /// <summary>
        /// 開發(fā)者微信號        /// </summary>
        public string ToUserName { get; set; }       /// <summary>
        /// 發(fā)送方帳號(一個OpenID)       /// </summary>
        public string FromUserName { get; set; }        /// <summary>
        /// 消息創(chuàng)建時間 (整型)        /// </summary>
        public string CreateTime { get; set; }        /// <summary>
        /// 消息類型        /// </summary>
        public MsgType MsgType { get; set; }        public virtual void ResponseNull()
        {
            Utils.ResponseWrite("");
        }        public virtual void ResText(EnterParam param, string content)
        {            
        }        /// <summary>
        /// 回復(fù)消息(音樂)        /// </summary>
        public  void ResMusic(EnterParam param, Music mu)
        {
        }        public  void ResVideo(EnterParam param, Video v)
        {        }        /// <summary>
        /// 回復(fù)消息(圖片)        /// </summary>
        public  void ResPicture(EnterParam param, Picture pic, string domain)
        {
}        /// <summary>
        /// 回復(fù)消息(圖文列表)        /// </summary>
        /// <param name="param"></param>
        /// <param name="art"></param>
        public  void ResArticles(EnterParam param, List<Articles> art)
        {        }        /// <summary>
        /// 多客服轉(zhuǎn)發(fā)        /// </summary>
        /// <param name="param"></param>
        public  void ResDKF(EnterParam param)
        {
}        /// <summary>
        /// 多客服轉(zhuǎn)發(fā)如果指定的客服沒有接入能力(不在線、沒有開啟自動接入或者自動接入已滿),該用戶會一直等待指定客服有接入能力后才會被接入,而不會被其他客服接待。建議在指定客服時,先查詢客服的接入能力指定到有能力接入的客服,保證客戶能夠及時得到服務(wù)。        /// </summary>
        /// <param name="param">用戶發(fā)送的消息體</param>
        /// <param name="KfAccount">多客服賬號</param>
        public  void ResDKF(EnterParam param, string KfAccount)
        {        }        private  void Response(EnterParam param, string data)
        {            
        }
    }

The base class defines the public fields of the message body and the virtual methods used to respond to user requests (the response message is not the focus of this article, so the method body is not posted. Please pay attention to subsequent articles) .

One of the parameters of the method in the base class is of type EnterParam. This class is the parameter that needs to be used when the user accesses and verifies the authenticity of the message, including token, encryption key, appid, etc. The definition is as follows:

/// <summary>
    /// 微信接入?yún)?shù)    /// </summary>
    public class EnterParam
    {        /// <summary>
        /// 是否加密        /// </summary>
        public bool IsAes { get; set; }        /// <summary>
        /// 接入token        /// </summary>
        public string token { get; set; }        /// <summary>
        ///微信appid        /// </summary>
        public string appid { get; set; }        /// <summary>
        /// 加密密鑰        /// </summary>
        public string EncodingAESKey { get; set; }
    }
Text entity:
public class TextMessage:BaseMessage
    {       /// <summary>
       /// 消息內(nèi)容       /// </summary>
        public string Content { get; set; }       /// <summary>
        /// 消息id,64位整型       /// </summary>
        public string MsgId { get; set; }

    
    }

Picture entity:

public class ImgMessage : BaseMessage
    {       /// <summary>
       /// 圖片路徑       /// </summary>
        public string PicUrl { get; set; }       /// <summary>
        /// 消息id,64位整型       /// </summary>
        public string MsgId { get; set; }        /// <summary>
        /// 媒體ID        /// </summary>
        public string MediaId { get; set; }

     
    }

Voice entity:

public class VoiceMessage : BaseMessage
    {       /// <summary>
       /// 縮略圖ID       /// </summary>
        public string MsgId { get; set; }       /// <summary>
        /// 格式       /// </summary>
        public string Format { get; set; }        /// <summary>
        /// 媒體ID        /// </summary>
        public string MediaId { get; set; }        /// <summary>
        /// 語音識別結(jié)果        /// </summary>
        public string Recognition { get; set; }

    
    }

Video entity:

public class VideoMessage : BaseMessage
    {       /// <summary>
       /// 縮略圖ID       /// </summary>
        public string ThumbMediaId { get; set; }       /// <summary>
        /// 消息id,64位整型       /// </summary>
        public string MsgId { get; set; }        /// <summary>
        /// 媒體ID        /// </summary>
        public string MediaId { get; set; }

    
    }

Link entity:

public class LinkMessage : BaseMessage
    {       /// <summary>
       /// 縮略圖ID       /// </summary>
        public string MsgId { get; set; }       /// <summary>
        /// 標題       /// </summary>
        public string Title { get; set; }        /// <summary>
        /// 描述        /// </summary>
        public string Description { get; set; }        /// <summary>
        /// 鏈接地址        /// </summary>
        public string Url { get; set; }

     
    }

After the message entity is defined, the next step is to parse the message body pushed by the WeChat server into the corresponding entity. I originally planned to use the XML serialization that comes with C# to send serialized components, but when I tried it, I always reported some XMLs error, so I simply used reflection to write a processing method:

public static T ConvertObj<T>(string xmlstr)
        {
            XElement xdoc = XElement.Parse(xmlstr);            var type = typeof(T);            var t = Activator.CreateInstance<T>();            foreach (XElement element in xdoc.Elements())
            {                var pr = type.GetProperty(element.Name.ToString());                if (element.HasElements)
                {//這里主要是兼容微信新添加的菜單類型。nnd,竟然有子屬性,所以這里就做了個子屬性的處理                    foreach (var ele in element.Elements())
                    {
                        pr = type.GetProperty(ele.Name.ToString());
                        pr.SetValue(t, Convert.ChangeType(ele.Value, pr.PropertyType), null);
                    }                    continue;
                }                if (pr.PropertyType.Name == "MsgType")//獲取消息模型
                {
                    pr.SetValue(t, (MsgType)Enum.Parse(typeof(MsgType), element.Value.ToUpper()), null);                    continue;
                }                if (pr.PropertyType.Name == "Event")//獲取事件類型。
                {
                    pr.SetValue(t, (Event)Enum.Parse(typeof(Event), element.Value.ToUpper()), null);                    continue;
                }
                pr.SetValue(t, Convert.ChangeType(element.Value, pr.PropertyType), null);
            }            return t;
        }

The method for processing XML is well defined. Finally, the following is about parsing the corresponding entities according to different message types:

public class MessageFactory
    {        public static BaseMessage CreateMessage(string xml)
        {
            XElement xdoc = XElement.Parse(xml);            var msgtype = xdoc.Element("MsgType").Value.ToUpper();
            MsgType type = (MsgType)Enum.Parse(typeof(MsgType), msgtype);            switch (type)
            {                case MsgType.TEXT: return Utils.ConvertObj<TextMessage>(xml);                case MsgType.IMAGE: return Utils.ConvertObj<ImgMessage>(xml);                case MsgType.VIDEO: return Utils.ConvertObj<VideoMessage>(xml);                case MsgType.VOICE: return Utils.ConvertObj<VoiceMessage>(xml);                case MsgType.LINK:                    return Utils.ConvertObj<LinkMessage>(xml);                case MsgType.LOCATION:                    return Utils.ConvertObj<LocationMessage>(xml);                case MsgType.EVENT://事件類型                {
                    
                } break;                default:                    return Utils.ConvertObj<BaseMessage>(xml);
            }
        }
    }

CreateMessage method passes in the data packet (if encrypted, it needs to be decrypted and passed in), and returns the corresponding entity in the form of a base class .

The reception of ordinary messages is almost finished here. Combined with the previous blog post, now the modified access code is posted as follows:

public class WxRequest
    {       public static BaseMessage Load(EnterParam param, bool bug = true)
       {           string postStr = "";
           Stream s = VqiRequest.GetInputStream();//此方法是對System.Web.HttpContext.Current.Request.InputStream的封裝,可直接代碼
           byte[] b = new byte[s.Length];
           s.Read(b, 0, (int)s.Length);
           postStr = Encoding.UTF8.GetString(b);//獲取微信服務(wù)器推送過來的字符串
           var timestamp = VqiRequest.GetQueryString("timestamp");           var nonce = VqiRequest.GetQueryString("nonce");           var msg_signature = VqiRequest.GetQueryString("msg_signature");           var encrypt_type = VqiRequest.GetQueryString("encrypt_type");           string data = "";           if (encrypt_type=="aes")//加密模式處理           {
               param.IsAes = true;               var ret = new MsgCrypt(param.token, param.EncodingAESKey, param.appid);               int r = ret.DecryptMsg(msg_signature, timestamp, nonce, postStr, ref data);               if (r != 0)
               {
                   WxApi.Base.WriteBug("消息解密失敗");                   return null;

               }
           }           else
           {
               param.IsAes = false;
               data = postStr;
           }           if (bug)
           {
               Utils.WriteTxt(data);
           }           return MessageFactory.CreateMessage(data);
       }
    }
[Related recommendations]

1.

WeChat public account platform source code download

2.

WeChat LaLa Takeout 2.2.4 decrypted open source version of WeChat Rubik’s Cube source code

The above is the detailed content of WeChat development for receiving text messages. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1502
276
PHP WeChat development: How to implement message encryption and decryption PHP WeChat development: How to implement message encryption and decryption May 13, 2023 am 11:40 AM

PHP is an open source scripting language that is widely used in web development and server-side programming, especially in WeChat development. Today, more and more companies and developers are starting to use PHP for WeChat development because it has become a truly easy-to-learn and easy-to-use development language. In WeChat development, message encryption and decryption are a very important issue because they involve data security. For messages without encryption and decryption methods, hackers can easily obtain the data, posing a threat to users.

PHP WeChat development: How to implement voting function PHP WeChat development: How to implement voting function May 14, 2023 am 11:21 AM

In the development of WeChat public accounts, the voting function is often used. The voting function is a great way for users to quickly participate in interactions, and it is also an important tool for holding events and surveying opinions. This article will introduce you how to use PHP to implement WeChat voting function. Obtain the authorization of the WeChat official account. First, you need to obtain the authorization of the WeChat official account. On the WeChat public platform, you need to configure the API address of the WeChat public account, the official account, and the token corresponding to the public account. In the process of our development using PHP language, we need to use the PH officially provided by WeChat

Using PHP to develop WeChat mass messaging tools Using PHP to develop WeChat mass messaging tools May 13, 2023 pm 05:00 PM

With the popularity of WeChat, more and more companies are beginning to use it as a marketing tool. The WeChat group messaging function is one of the important means for enterprises to conduct WeChat marketing. However, if you only rely on manual sending, it is an extremely time-consuming and laborious task for marketers. Therefore, it is particularly important to develop a WeChat mass messaging tool. This article will introduce how to use PHP to develop WeChat mass messaging tools. 1. Preparation work To develop WeChat mass messaging tools, we need to master the following technical points: Basic knowledge of PHP WeChat public platform development Development tools: Sub

PHP WeChat development: How to implement customer service chat window management PHP WeChat development: How to implement customer service chat window management May 13, 2023 pm 05:51 PM

WeChat is currently one of the social platforms with the largest user base in the world. With the popularity of mobile Internet, more and more companies are beginning to realize the importance of WeChat marketing. When conducting WeChat marketing, customer service is a crucial part. In order to better manage the customer service chat window, we can use PHP language for WeChat development. 1. Introduction to PHP WeChat development PHP is an open source server-side scripting language that is widely used in the field of Web development. Combined with the development interface provided by WeChat public platform, we can use PHP language to conduct WeChat

PHP WeChat development: How to implement user tag management PHP WeChat development: How to implement user tag management May 13, 2023 pm 04:31 PM

In the development of WeChat public accounts, user tag management is a very important function, which allows developers to better understand and manage their users. This article will introduce how to use PHP to implement the WeChat user tag management function. 1. Obtain the openid of the WeChat user. Before using the WeChat user tag management function, we first need to obtain the user's openid. In the development of WeChat public accounts, it is a common practice to obtain openid through user authorization. After the user authorization is completed, we can obtain the user through the following code

PHP WeChat development: How to implement group message sending records PHP WeChat development: How to implement group message sending records May 13, 2023 pm 04:31 PM

As WeChat becomes an increasingly important communication tool in people's lives, its agile messaging function is quickly favored by a large number of enterprises and individuals. For enterprises, developing WeChat into a marketing platform has become a trend, and the importance of WeChat development has gradually become more prominent. Among them, the group sending function is even more widely used. So, as a PHP programmer, how to implement group message sending records? The following will give you a brief introduction. 1. Understand the development knowledge related to WeChat public accounts. Before understanding how to implement group message sending records, I

Steps to implement WeChat public account development using PHP Steps to implement WeChat public account development using PHP Jun 27, 2023 pm 12:26 PM

How to use PHP to develop WeChat public accounts WeChat public accounts have become an important channel for promotion and interaction for many companies, and PHP, as a commonly used Web language, can also be used to develop WeChat public accounts. This article will introduce the specific steps to use PHP to develop WeChat public accounts. Step 1: Obtain the developer account of the WeChat official account. Before starting the development of the WeChat official account, you need to apply for a developer account of the WeChat official account. For the specific registration process, please refer to the official website of WeChat public platform

How to use PHP for WeChat development? How to use PHP for WeChat development? May 21, 2023 am 08:37 AM

With the development of the Internet and mobile smart devices, WeChat has become an indispensable part of the social and marketing fields. In this increasingly digital era, how to use PHP for WeChat development has become the focus of many developers. This article mainly introduces the relevant knowledge points on how to use PHP for WeChat development, as well as some of the tips and precautions. 1. Development environment preparation Before developing WeChat, you first need to prepare the corresponding development environment. Specifically, you need to install the PHP operating environment and the WeChat public platform

See all articles