Home WeChat Applet WeChat Development How to use web api to develop WeChat public account to call Turing robot interface

How to use web api to develop WeChat public account to call Turing robot interface

Mar 24, 2017 pm 02:23 PM
WeChat development

Passive response message (returning XML)

WeChat requires us to return XML data, and the format is specified. For details, please see

WeChat public platform developer documentation.

We have already written the response entity class before, because the requirement is in XML format.
We use the System.Xml.Serialization.XmlSerializer provided by Microsoft here to serialize our data into XML.
So we marked the XmlRoot attribute on the class, the XmlEnum attribute on the enumerated field, and the XmlArray and XmlArrayItem attributes on the article list in NewsMsg. What is then deserialized is the format required by WeChat.

The serialization method is as follows:

1

2

3

4

5

6

7

8

9

public string ResponseXML(object value, Type type){

    StringWriter sw = new StringWriter();

    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

 

    ns.Add("", "");  //去除命名空间

    XmlSerializer serializer = new XmlSerializer(type);

 

    serializer.Serialize(sw, value, ns);    return sw.ToString();

}

Copy after login

Note: The XML namespace must be removed here, otherwise WeChat will not recognize it.

The complete method is provided:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

public HttpResponseMessage Post(){    var requestContent = Request.Content.ReadAsStreamAsync().Result;    //从正文参数中加载微信的请求参数

    XmlDocument xmlDoc = new XmlDocument();

    xmlDoc.Load(requestContent);

 

    logger.DebugFormat("WX请求XML内容:{0}", xmlDoc.InnerText);    string msgTypeStr = xmlDoc.SelectSingleNode("xml/MsgType").InnerText;    string userName = xmlDoc.SelectSingleNode("xml/FromUserName").InnerText;    string efhName = xmlDoc.SelectSingleNode("xml/ToUserName").InnerText;    string responseContent;

    MsgType msgType;   

    //获取消息类型,若未定义,则返回。

    if (!Enum.TryParse(msgTypeStr, true, out msgType))

    {          

        responseContent = MsgService.Instance.ResponseXML(new TextMsg

            {

                FromUserName = efhName,

                MsgType = MsgType.Text,

                Content = "俺还小,不知道你在说啥子(⊙_⊙)?",

                CreateTime = UnixTimestamp.Now.ToNumeric(),

                ToUserName = userName

            }, typeof(TextMsg));        return new HttpResponseMessage(HttpStatusCode.OK)

        {

            Content = new StringContent(responseContent, Encoding.UTF8, "application/xml"),

        };

    }    if (msgType == MsgType.Event)

    {        return ProcessEvent(xmlDoc, userName, efhName);

    }   

    //图灵消息转换为微信响应消息,下一节奉上

    string content = xmlDoc.SelectSingleNode("xml/Content").InnerText;    var requestResult = TuLingService.Instance.GetMsgFromResponse(content, userName, efhName);

 

    responseContent = MsgService.Instance.ResponseXML(requestResult.Data, requestResult.DataType);    return new HttpResponseMessage(HttpStatusCode.OK)

    {

        Content = new StringContent(responseContent, Encoding.UTF8, "application/xml"),

    };

}private HttpResponseMessage ProcessEvent(XmlDocument xmlDoc, string userName, string efhName){    string eventValue = xmlDoc.SelectSingleNode("xml/Event").InnerText;    var responseContent = MsgService.Instance.ResponseXML(new TextMsg

    {

        FromUserName = efhName,

        MsgType = MsgType.Text,

        Content = eventValue.ToLower().Equals("subscribe") ? "lei好哇~" : "大爷,奴家会想你的",//其实取消订阅是不会发送消息的

        CreateTime = UnixTimestamp.Now.ToNumeric(),

        ToUserName = userName

    }, typeof(TextMsg));    return new HttpResponseMessage(HttpStatusCode.OK)

    {

        Content = new StringContent(responseContent, Encoding.UTF8, "application/xml"),

    };

}

Copy after login

So far, we have completed the response to WeChat passive reply messages.

Mapping Turing messages and WeChat messages

We have already implemented the function of passively replying to messages. Next, we need to associate the Turing robot interface with our public platform.

Analyzing the parameters returned by the Turing robot, we found that all types of content have code and text parameters. And because we need to directly correspond Turing's message to WeChat's response message, we define an interface and provide a conversion method

1

2

3

4

public class TuLingResult{    //消息类型(我们在序列化为XML的时候需要提供类型)

    public Type DataType { get; set; }    public object Data { get; set; }

}public interface IResponse{    TuLingResult ToTuLingResult(string fromUserName, string toUserName);

}

Copy after login

Create an entity of text data as the base class of Turing message (corresponding to WeChat's Text message)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

public class TextResult : IResponse{    public int Code { get; set; }    public string Text { get; set; }    public virtual TuLingResult ToTuLingResult(string fromUserName, string toUserName)    {        return new TuLingResult

        {

            DataType = typeof(TextMsg),

            Data = new TextMsg

             {

                 FromUserName = fromUserName,

                 ToUserName = toUserName,

                 Content = Text,

                 CreateTime = UnixTimestamp.Now.ToNumeric(),

                 MsgType = MsgType.Text

             }

        };

    }

}

Copy after login

Then create entity classes for various data in sequence.
For example: News (corresponding to WeChat graphic messages)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

public class NewsResult : TextResult{    public List<NewsInfo> List { get; set; }    public override TuLingResult ToTuLingResult(string fromUserName, string toUserName)    {        if (List.Count > 10)

        {

            List = List.Take(10).ToList();

        }        return new TuLingResult

        {

            DataType = typeof(NewsMsg),

            Data = new NewsMsg

            {

                FromUserName = fromUserName,

                ToUserName = toUserName,

                ArticleCount = List.Count,

                Articles = List.Select(m => new MsgNewsInfo

                {

                    Title = m.Article,

                    Description = m.Source,

                    Url = m.DetailUrl,

                    PicUrl = m.Icon

                }).ToList(),

                CreateTime = UnixTimestamp.Now.ToNumeric(),

                MsgType=MsgType.News

            }

        };

    }

}public class NewsInfo{    /// <summary>

    /// 标题

    /// </summary>

    public string Article { get; set; }    /// <summary>

    /// 来源

    /// </summary>

    public string Source { get; set; }    /// <summary>

    /// 详情地址

    /// </summary>

    public string DetailUrl { get; set; }    /// <summary>

    /// 图标地址

    /// </summary>

    public string Icon { get; set; }

}

Copy after login

Similarly create various data entity classes provided by Turing robot

The data entities we want to support have been defined After that, we can start to request the Turing interface and obtain the real message. Here we use HttpClient to implement it.

1

2

3

4

5

6

7

8

9

private const string TULING_API_URL = "http://www.tuling123.com/openapi/api";private const string TULING_API_KEY = "XXXXX";//图灵的APIKEYpublic TuLingResult GetMsgFromResponse(string keyword, string userFlag, string efhName){    string linkString = string.Format("{0}?key={1}&info={2}&userid={3}"

        , TULING_API_URL, TULING_API_KEY, keyword, userFlag);    string content = string.Empty;    using (HttpClient client = new HttpClient())

    {

        HttpResponseMessage response = client.GetAsync(linkString).Result;

 

        content = response.Content.ReadAsStringAsync().Result;

        logger.DebugFormat("图灵机器人响应:{0}", content);

    }    return ConvertToMsg(content, userFlag, efhName);

}

Copy after login

Turing returns the code identification message type and error information, so we first parse the response message into TextResult and get the Turing type.

First define the Turing type enumeration

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

public enum ResultType

{

    TL_FORMAT_DATA = 50000,

    TL_TEXT_DATA = 100000,

    TL_LINK_DATA = 200000,

    TL_NOVEL_DATA = 301000,

    TL_NEWS_DATA = 302000,

    TL_APP_DATA = 304000,

    TL_TRAIN_DATA = 305000,

    TL_AIRPORT_DATA = 306000,

    TL_TUAN_DATA = 307000,

    TL_TUWEN_DATA = 308000,

    TL_HOTEL_DATA = 309000,

    TL_LOTTERY_DATA = 310000,

    TL_PRICE_DATA = 311000,

    TL_RESTAURANT_DATA = 312000,

 

    TL_ERROR_LENGTH = 40001,

    TL_ERROR_EMPTY = 40002,

    TL_ERROR_INVALID = 40003,

    TL_ERROR_OUTLIMIT = 40004,

    TL_ERROR_NOTSUPPORT = 40005,

    TL_ERROR_SERVERUPDATE = 40006,

    TL_ERROR_SERVERERROR = 40007

}

Copy after login

The return code corresponding to Turing

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

100000  文本类数据

200000  网址类数据

301000  小说

302000  新闻

304000  应用、软件、下载

305000  列车

306000  航班

307000  团购

308000  优惠

309000  酒店

310000  彩票

311000  价格

312000  餐厅

40001   key的长度错误(32位)

40002   请求内容为空

40003   key错误或帐号未激活

40004   当天请求次数已用完

40005   暂不支持该功能

40006   服务器升级中

40007   服务器数据格式异常

50000   机器人设定的“学用户说话”或者“默认回答”

Copy after login

And then get the message type

1

2

3

4

5

6

private ResultType GetResultType(string response)

{

    var result = JsonConvert.DeserializeObject<TextResult>(response);

 

    return (ResultType)result.Code;

}

Copy after login

, we will Corresponding TuLingResult can be returned according to different types.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

public TuLingResult ConvertToMsg(string response, string userFlag, string efhName)

{

    IResponse result = null;

 

    var resultType = GetResultType(response);    switch (resultType)

    {        case ResultType.TL_TEXT_DATA:

            result = JsonConvert.DeserializeObject<TextResult>(response);            break;        case ResultType.TL_LINK_DATA:

            result = JsonConvert.DeserializeObject<LinkResult>(response);            break;        case ResultType.TL_NEWS_DATA:

            result = JsonConvert.DeserializeObject<NewsResult>(response);            break;        case ResultType.TL_TUWEN_DATA:

            result = JsonConvert.DeserializeObject<TuWenResult>(response);            break;        case ResultType.TL_TRAIN_DATA:

            result = JsonConvert.DeserializeObject<TrainResult>(response);            break;        case ResultType.TL_AIRPORT_DATA:

            result = JsonConvert.DeserializeObject<AirportResult>(response);            break;        case ResultType.TL_APP_DATA:

            result = JsonConvert.DeserializeObject<AppResult>(response);            break;        case ResultType.TL_HOTEL_DATA:

            result = JsonConvert.DeserializeObject<HotelResult>(response);            break;        case ResultType.TL_PRICE_DATA:

            result = JsonConvert.DeserializeObject<PriceResult>(response);            break;        case ResultType.TL_ERROR_LENGTH:

        case ResultType.TL_ERROR_INVALID:

        case ResultType.TL_ERROR_EMPTY:

        case ResultType.TL_ERROR_OUTLIMIT:

            result = new TextResult { Text = "您的输入有误" };            break;        case ResultType.TL_ERROR_SERVERERROR:

        case ResultType.TL_ERROR_SERVERUPDATE:

            result = new TextResult { Text = "服务器忙,暂时无法为您提供服务" };            break;        case ResultType.TL_ERROR_NOTSUPPORT:

            result = new TextResult { Text = "俺还小,您说的这个还得慢慢学习,以后再来试吧" };            break;

        default:

            result = new TextResult { Text = "俺还小,不知道你在说啥子(⊙_⊙)?" };            break;

    }    return result.ToTuLingResult(efhName, userFlag);

}

Copy after login

Then, we can serialize the Data in the TuLingResult we got into the XML required by WeChat

1

2

3

4

5

6

var requestResult = TuLingService.Instance.GetMsgFromResponse(content, userName, efhName);

 

responseContent = MsgService.Instance.ResponseXML(requestResult.Data, requestResult.DataType);return new HttpResponseMessage(HttpStatusCode.OK)

{

    Content = new StringContent(responseContent, Encoding.UTF8, "application/xml"),

};

Copy after login

The above is the detailed content of How to use web api to develop WeChat public account to call Turing robot interface. 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

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.

Undress AI Tool

Undress AI Tool

Undress images for free

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)

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.

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 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

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 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

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