WeChat Official Account Admin Platform Message API Guide
Keyword: WeChat Message API Text Image Location Link Event Music RichMedia
Author: PondBay Studio[WeChat Developer EXPERT]
Address: http://www.cnblogs.com/txw1958/p/WeChat-Message-API.html
Guide for Message API
Contents[hide] |
Introduction
The WeChat Official Account Admin Platform provides developers with a Message API to manage incoming messages and reply logic.
Apply for Message API
Click Apply and fill in a name, phone and email for a contact person, as well as a URL pointing to your server and a token. The token is used to generate a signature for communication between your app and WeChat.
URL Access
When the application is submitted, a GET request will be sent to the URL provided above with the 4 parameters below:
| Parameter | Description |
|---|---|
| signature | signature for communication encryption |
| timestamp | time stamp |
| nonce | a random number |
| echostr | a random string |
You should check whether the HTTP request is from WeChat by verifying the signature. If the signature is correct, you should return the echostr.
The signature will be generated in the following way using the token (that you provided), timestamp and nonce.
1. Sort the 3 values of token, timestamp and nonce alphabetically.
2. Combine the 3 parameters into one string, encrypt it using SHA-1.
3. Compare the SHA-1 digest string with the signature from the request. If they are the same, the access request is from WeChat.
Pushing Messages
When a WeChat user sends a message to an Official Account, WeChat Official Account Admin Platform will POST it to you via the URL you provided.
Text messages
<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>
| Parameter | Description |
|---|---|
| ToUserName | WeChat ID of your app |
| FromUserName | a unique ID for the sender |
| CreateTime | create time of the message |
| MsgType | message type ("text" for text messages) |
| Content | message contents |
| MsgId | a unique ID for the message (64 bit integer) |
Image messages
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1348831860</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
<PicUrl><![CDATA[this is a url]></PicUrl>
<MsgId>1234567890123456</MsgId>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | WeChat ID of your app |
| FromUserName | a unique ID for the sender |
| CreateTime | create time of the message |
| MsgType | message type ("image" for image messages) |
| PicUrl | URL for the image |
| MsgId | a unique ID for the message (64 bit integer) |
Location data messages
<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[location]]></Label>
<MsgId>1234567890123456</MsgId>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | WeChat ID of your app |
| FromUserName | a unique ID for the sender |
| CreateTime | create time of the message |
| MsgType | message type ("location" for location messages) |
| Location_X | latitude of the location |
| Location_Y | longitude of the location |
| Scale | scale of the map |
| Label | location description |
| MsgId | a unique ID for the message (64 bit integer) |
Link messages
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1357290913</CreateTime>
<MsgType><![CDATA[link]]></MsgType>
<Title><![CDATA[WeChat Official Account Platform portal]]></Title>
<Description><![CDATA[The URL of the portal]]></Description>
<Url><![CDATA[url]]></Url>
<MsgId>1234567890123456</MsgId>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | WeChat ID of your app |
| FromUserName | a unique ID for the sender |
| CreateTime | create time of the message |
| MsgType | message type ("link" for link messages) |
| Title | title of the message |
| Description | description of the message |
| Url | url which is sent to users |
| MsgId | a unique ID for the message (64 bit integer) |
Event messages
<xml><ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[FromUser]]></FromUserName>
<CreateTime>123456789</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[EVENT]]></Event>
<EventKey><![CDATA[EVENTKEY]]></EventKey>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | WeChat ID of your app |
| FromUserName | a unique ID for the sender |
| CreateTime | create time of the message |
| MsgType | message type ("event" for event messages) |
| Event | event type, currently we have 3 types: subscribe, unsubscribe, CLICK(coming soon) |
| EventKey | for future usage |
Messages Replies
You can reply to incoming messages. Now the platform supports different kinds of messages, including text, image, voice, video and music. You can also do the operation 'add to my favorites'.
If you fail to perform your response within 5 seconds, we will close the connection.
The data structure for a reply message:
Text messages
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[content]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | a unique ID for the receiver, you can get it from the request |
| FromUserName | WeChat ID of your app |
| CreateTime | create time of the message, the type is integer |
| MsgType | message type ("text" for text messages) |
| Content | reply message contents |
| FuncFlag | add a star for the message if the bit (0x0001) is set |
Music message
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
<Music>
<Title><![CDATA[TITLE]]></Title>
<Description><![CDATA[DESCRIPTION]]></Description>
<MusicUrl><![CDATA[MUSIC_Url]]></MusicUrl>
<HQMusicUrl><![CDATA[HQ_MUSIC_Url]]></HQMusicUrl>
<ThumbMediaId><![CDATA[media_id]]></ThumbMediaId>
</Music>
<FuncFlag>0</FuncFlag>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | a unique ID for the receiver, you can get it from the request |
| FromUserName | WeChat ID of your app |
| CreateTime | create time of the message, the type is integer |
| MsgType | message type("music" for music messages) |
| MusicUrl | URL for the music |
| HQMusicUrl | URL for high quality, WeChat will access it when using WiFi |
| ThumbMediaId | OPTIONAL. You will get this ID after you upload the thumb (80*80) by using the API |
| FuncFlag | add a star for the message if the bit (0x0001) is set |
Rich media messages
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>2</ArticleCount>
<Articles>
<item>
<Title><![CDATA[title1]]></Title>
<Description><![CDATA[description1]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
<item>
<Title><![CDATA[title]]></Title>
<Description><![CDATA[description]]></Description>
<PicUrl><![CDATA[picurl]]></PicUrl>
<Url><![CDATA[url]]></Url>
</item>
</Articles>
<FuncFlag>1</FuncFlag>
</xml>
| Parameter | Description |
|---|---|
| ToUserName | a unique ID for the receiver, you can get it from the request |
| FromUserName | WeChat ID of your app |
| CreateTime | create time of the message, the type is integer |
| MsgType | message type ("news" for rich media messages) |
| ArticleCount | quantity of rich media messages (no larger than 10) |
| Articles | contents of rich media messages. The first item will be displayed in large image by default. |
| Title | title of the rich media message |
| Description | description of the rich media message |
| PicUrl | URL of images in the rich media message. Domain name of this URL should be the same as the one of URL provided in basic info. Recommended image size: 640*320 (large image); 80*80 (small image) |
| Url | redirection link of the rich media message |
Notes
1. One user's unique ID is different for different Official Accounts.
2. Recommend you use port 80 for your app server.
Sample code
PHP:Download
PondBay Studio is the Expert of WeChat Development, and has a lots of cases in China, Japan, Europe and US. The Founder has served the top companies such as China HuaWei and Israel Company. You can Contact US via email 
WeChat Official Account Admin Platform Message API Guide的更多相关文章
- WeChat Official Account Admin Platform API Introduction
Keyword: WeChat API Introduction Message and GeneralAuthor: PondBay Studio[WeChat Developer EXPERT] ...
- Django REST Framework API Guide 08
1.Filtering 2.Pagination FIltering GenericAPIView的子类筛选queryset的简单方法是重写.get_quueryset()方法. 1.根据当前用户进行 ...
- Django REST Framework API Guide 01
之前按照REST Framework官方文档提供的简介写了一系列的简单的介绍博客,说白了就是翻译了一下简介,而且翻译的很烂.到真正的生产时,就会发现很鸡肋,连熟悉大概知道rest framework都 ...
- Story of Jerry Wang's Wechat subscription account
As an SAP Techinical Ambassador,Jerry is always willing to share his SAP expertise to various social ...
- TrineaAndroidCommon API Guide
android-common-lib 关于我,欢迎关注微博:Trinea 主页:trinea.cn 邮箱:trinea.cn#gmail.com 微信:codek2 主要包括:缓存( ...
- Django REST Framework API Guide 03
本节大纲 1.Routers 2.Parsers 3.Renderers Routers Usage from rest_framework import routers router = route ...
- Django REST Framework API Guide 06
本节大纲 1.Validators 2.Authentication Validators 在REST框架中处理验证的大多数时间,您将仅仅依赖于缺省字段验证,或在序列化器或字段类上编写显式验证方法.但 ...
- Django REST Framework API Guide 04
本节大纲 1.serializers 1.Serializers Serializers允许复杂的数据,像queryset和模型实例转换成源生的Python数据类型.从而可以更简单的被渲染成JSON, ...
- Django REST Framework API Guide 07
本节大纲 1.Permissions 2.Throttling Permissions 权限是用来授权或者拒绝用户访问API的不同部分的不同的类的.基础的权限划分 1.IsAuthenticated ...
随机推荐
- Go推出的主要目的之一就是G内部大东西太多了,系统级开发巨型项目非常痛苦,Go定位取代C++,Go以简单取胜(KISS)
以前为了做compiler,研读+实现了几乎所有种类的语言.现在看语法手册几乎很快就可以理解整个语言的内容.后来我对比了一下go和rust,发现go的类型系统简直就是拼凑的.这会导致跟C语言一样,需要 ...
- Bolt 动画
引擎内置的 种动画 --PosChangeAnimation 平移 local ani = XLGetObject("Xunlei.UIEngine.AnimationFactory&quo ...
- The type sun.management.ManagementFactory is not visible
Eclipse默认将这些受访问限制的API设成了Error.解决方法:只要将Windows---Preferences---Java--Complicer---Errors/Warings里面的Dep ...
- BZOJ 3207 花神的嘲讽计划Ⅰ(函数式线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3207 题意:给出一个数列,若干询问.每个询问查询[L,R]区间内是否存在某个长度为K的子 ...
- [51NOD1126]求递推序列的第n项(矩阵快速幂)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 存在参数a,b为负数的情况.这时候要这么处理: 根据mo ...
- C#获取网页中某个元素的位置,并模拟点击
我们在开发中,往往要得到网页中某个元素的位置,并且点击它.要模拟一次鼠标点击并不难,只要调用一个API就行了,关键就是怎么样得到这个元素的位置,还有判断是否要滚动滚动条,要滚动多少行能让元素显示出来. ...
- HDU 4902
数据太弱,直接让我小暴力一下就过了,一开始没注意到时间是15000MS,队友发现真是太给力了 #include <cstdio> #include <cstring> ],x[ ...
- bzoj1132
每次都选最左边的点,然后以这个点为原点 统计和这个点构成的三角形面积和 不难想到极角排序然后由叉积很容易求出 shl ; eps=1e-8; var i,j,k,m,n:longint; x,y:.. ...
- NoSQL开篇——为什么要使用NoSQL
NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...
- [反汇编练习] 160个CrackMe之003
[反汇编练习] 160个CrackMe之003. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...