2024年3月23日发(作者:)

微信公众平台开发接口

一、 消息接口

二、 通用接口

三、 自定义菜单接口

四、 使用限制

五、 返回码说明

第 1 页 共 20 页

消息接口指南

返回

出自开放平台

跳转到: 导航, 搜索

目录

[隐藏]

1 简介

2 申请消息接口

3 网址接入

4 消息推送

o

4.1 文本消息

o

4.2 图片消息

o

4.3 地理位置消息

o

4.4 链接消息

o

4.5 事件推送

5 消息回复

o

5.1 回复文本消息

o

5.2 回复音乐消息

o

5.3 回复图文消息

6 注意事项

7 示例代码

简介

公众平台消息接口为开发者提供了一种新的消息处理方式。

申请消息接口

点击申请,填写网址url和token,其中token可由开发者可以任意填写,用作

生成签名。

第 2 页 共 20 页

网址接入

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带

上四个参数:

参数

signature

timestamp

nonce

echostr

微信加密签名

时间戳

随机数

随机字符串

描述

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次

GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接

入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce

参数。

第 3 页 共 20 页

加密/校验流程:

1. 将token、timestamp、nonce三个参数进行字典序排序

2. 将三个参数字符串拼接成一个字符串进行sha1加密

3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

消息推送

当普通微信用户向公众账号发消息时,微信服务器将POST该消息到填写的URL

上。结构如下:

文本消息

1348831860

23456

参数

ToUserName

FromUserName

CreateTime

MsgType

Content

MsgId

开发者微信号

发送方帐号(一个OpenID)

消息创建时间 (整型)

text

文本消息内容

消息id,64位整型

描述

图片消息

1348831860

第 4 页 共 20 页

23456

参数

ToUserName

FromUserName

CreateTime

MsgType

PicUrl

MsgId

开发者微信号

发送方帐号(一个OpenID)

消息创建时间 (整型)

image

图片链接

消息id,64位整型

描述

地理位置消息

1351776360

23.134521

113.358803

20

23456

参数

ToUserName

FromUserName

CreateTime

MsgType

Location_X

Location_Y

Scale

Label

MsgId

开发者微信号

发送方帐号(一个OpenID)

消息创建时间 (整型)

location

地理位置纬度

地理位置经度

地图缩放大小

地理位置信息

消息id,64位整型

描述

链接消息

第 5 页 共 20 页

1351776360

<![CDATA[公众平台官网链接]]>

23456

参数

ToUserName

FromUserName

CreateTime

MsgType

Title

Description

Url

MsgId

接收方微信号

发送方微信号,若为普通用户,则是一个OpenID

消息创建时间

消息类型,link

消息标题

消息描述

消息链接

消息id,64位整型

描述

事件推送

事件推送只支持微信4.5版本,目前开启自定义菜单接口事件推送、关注与取消

关注事件推送。其余功能即将开放,敬请期待。

123456789

参数

ToUserName 接收方微信号

描述

FromUserName 发送方微信号,若为普通用户,则是一个OpenID

CreateTime

MsgType

消息创建时间

消息类型,event

第 6 页 共 20 页

Event

EventKey

事件类型,subscribe(订阅)、unsubscribe(取消订阅)、

CLICK(自定义菜单点击事件)

事件KEY值,与自定义菜单接口中KEY值对应

消息回复

对于每一个POST请求,开发者在响应包中返回特定xml结构,对该消息进行响

应(现支持回复文本、图文、语音、视频、音乐和对收到的消息进行星标操作)。

微信服务器在五秒内收不到响应会断掉连接。

回复xml结构如下:

回复文本消息

12345678

0

参数

ToUserName

FromUserName

CreateTime

MsgType

Content

FuncFlag

描述

接收方帐号(收到的OpenID)

开发者微信号

消息创建时间

text

回复的消息内容,长度不超过2048字节

位0x0001被标志时,星标刚收到的消息。

回复音乐消息

12345678

第 7 页 共 20 页

<![CDATA[TITLE]]>

0

参数

ToUserName

FromUserName

CreateTime

MsgType

MusicUrl

HQMusicUrl

FuncFlag

描述

接收方帐号(收到的OpenID)

开发者微信号

消息创建时间

music

音乐链接

高质量音乐链接,WIFI环境优先使用该链接播放音乐

位0x0001被标志时,星标刚收到的消息。

回复图文消息

12345678

2

<![CDATA[title1]]>

<![CDATA[title]]>

1

第 8 页 共 20 页

参数

ToUserName

描述

接收方帐号(收到的OpenID)

FromUserName 开发者微信号

CreateTime

MsgType

消息创建时间

news

ArticleCount 图文消息个数,限制为10条以内

Articles

Title

Description

PicUrl

Url

多条图文消息信息,默认第一个item为大图

图文消息标题

图文消息描述

图片链接,支持JPG、PNG格式,较好的效果为大图640*320,

小图80*80。

点击图文消息跳转链接

注意事项

1.用户OpenID对一个公众号是固定唯一的串

2.请使用80端口

示例代码

PHP:下载

第 9 页 共 20 页

=====PHP 示例代码==============

/**

* wechat php test

*/

//define your token

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();

class wechatCallbackapiTest

{

public function valid()

{

$echoStr = $_GET["echostr"];

//valid signature , option

if($this->checkSignature()){

echo $echoStr;

exit;

}

}

public function responseMsg()

{

//get post data, May be due to the different environments

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

//extract post data

if (!empty($postStr)){

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement',

LIBXML_NOCDATA);

$fromUsername = $postObj->FromUserName;

$toUsername = $postObj->ToUserName;

$keyword = trim($postObj->Content);

$time = time();

$textTpl = "

%s

第 10 页 共 20 页

0

";

if(!empty( $keyword ))

{

$msgType = "text";

$contentStr = "Welcome to wechat world!";

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time,

$msgType, $contentStr);

echo $resultStr;

}else{

echo "";

}

}else {

echo "";

exit;

}

}

private function checkSignature()

{

$signature = $_GET["signature"];

$timestamp = $_GET["timestamp"];

$nonce = $_GET["nonce"];

$token = TOKEN;

$tmpArr = array($token, $timestamp, $nonce);

sort($tmpArr);

$tmpStr = implode( $tmpArr );

$tmpStr = sha1( $tmpStr );

if( $tmpStr == $signature ){

return true;

}else{

return false;

}

}

}

>

===========================end==========================

第 11 页 共 20 页

通用接口文档

返回

出自开放平台

跳转到: 导航, 搜索

简介

通用接口是使用HTTP请求,让开发者直接与微信服务器交互,实现媒体文件上

传、媒体文件获取等功能,达到获取图片、语音、视频等媒体文件的目的。

调用接口所需要的access_token必须通过获取凭证接口获取。

获取凭证

接口说明

在使用通用接口前,你需要做以下两步工作:

1.拥有一个微信公众账号,并获取到appid和appsecret(在公众平台申请内测

资格,审核通过后可获得)

2.通过获取凭证接口获取到access_token

注意:

access_token是第三方访问api资源的票据;

access_token对应于公众号是全局唯一的票据,重复获取将导致上次获取的

access_token失效。

请求说明

http请求方式: GET

/cgi-bin/token?grant_type=client_credential&

appid=APPID&secret=APPSECRET

参数说明

参数

grant_type

是否必须

说明

获取access_token填写client_credential

第 12 页 共 20 页

appid

secret

返回说明

第三方用户唯一凭证

第三方用户唯一凭证密钥,既appsecret

正确的Json返回结果:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

参数

access_token

expires_in

错误的Json返回示例:

{"errcode":40013,"errmsg":"invalid appid"}

统一返回码说明

获取到的凭证

凭证有效时间,单位:秒

说明

返回码说明

返回

出自开放平台

跳转到: 导航, 搜索

返回码说明

返回码

-1

0

40001

40002

40003

40004

40005

系统繁忙

请求成功

验证失败

不合法的凭证类型

不合法的OpenID

不合法的媒体文件类型

不合法的文件类型

说明

第 13 页 共 20 页

40006

40007

40008

40009

40010

40011

40012

40013

40014

40014

40015

40016

40017

40018

40019

40020

40021

40022

40023

40024

40025

40026

40027

40028

41001

41002

41003

41004

41005

41006

不合法的文件大小

不合法的媒体文件id

不合法的消息类型

不合法的图片文件大小

不合法的语音文件大小

不合法的视频文件大小

不合法的缩略图文件大小

不合法的APPID

不合法的access_token

不合法的access_token

不合法的菜单类型

不合法的按钮个数

不合法的按钮个数

不合法的按钮名字长度

不合法的按钮KEY长度

不合法的按钮URL长度

不合法的菜单版本号

不合法的子菜单级数

不合法的子菜单按钮个数

不合法的子菜单按钮类型

不合法的子菜单按钮名字长度

不合法的子菜单按钮KEY长度

不合法的子菜单按钮URL长度

不合法的自定义菜单使用用户

缺少access_token参数

缺少appid参数

缺少refresh_token参数

缺少secret参数

缺少多媒体文件数据

缺少media_id参数

第 14 页 共 20 页

41007

42001

43001

43002

43003

44001

44002

44003

45001

45002

45003

45004

45005

45006

45007

45008

45009

45010

46001

46002

46003

47001

缺少子菜单数据

access_token超时

需要GET请求

需要POST请求

需要HTTPS请求

多媒体文件为空

POST的数据包为空

图文消息内容为空

多媒体文件大小超过限制

消息内容超过限制

标题字段超过限制

描述字段超过限制

链接字段超过限制

图片链接字段超过限制

语音播放时间超过限制

图文消息超过限制

接口调用超过限制

创建菜单个数超过限制

不存在媒体数据

不存在的菜单版本

不存在的菜单数据

解析JSON/XML内容错误

取自

“/wiki/?title=%E8%BF%94%E5%9B%9E%E7%

A0%81%E8%AF%B4%E6%98%8E”

自定义菜单接口

第 15 页 共 20 页

返回

出自开放平台

跳转到: 导航, 搜索

目录

[隐藏]

1 简介

2 菜单创建

3 菜单查询

4 菜单删除

简介

开发者获取使用凭证(如何获取凭证)后,可以使用该凭证对公众账号的自定义

菜单进行创建、查询和删除等操作。 自定义菜单接口可实现以下类型按钮:

click(点击事件):

用户点击click类型按钮后,微信服务器会通过消息接口(event类型)推送点击

事件给开发者,并且带上按钮中开发者填写的key值,开发者可以通过自定义的

key值进行消息回复。

创建自定义菜单后,由于微信客户端缓存,需要24小时微信客户端才会展现出

来。建议测试时可以尝试取消关注公众账号后,再次关注,则可以看到创建后的

效果。

菜单创建

接口说明

通过POST一个特定结构体,实现在微信客户端创建自定义菜单。

请求说明

http请求方式:POST

/cgi-bin/menu/create?access_token=ACCESS_TOK

EN

第 16 页 共 20 页

请求示例

{

"button":[

{

"type":"click",

"name":"今日歌曲",

"key":"V1001_TODAY_MUSIC"

},

{

"type":"click",

"name":"歌手简介",

"key":"V1001_TODAY_SINGER"

},

{

"name":"菜单",

"sub_button":[

{

"type":"click",

"name":"hello word",

"key":"V1001_HELLO_WORLD"

},

{

"type":"click",

"name":"赞一下我们",

"key":"V1001_GOOD"

}]

}]

}

创建后效果:

第 17 页 共 20 页

参数说明

参数

button

sub_button

type

name

key

返回说明

正确的Json返回结果:

{"errcode":0,"errmsg":"ok"}

第 18 页 共 20 页

是否必须

类型为click必须

说明

按钮数组,按钮个数应为2~3个

子按钮数组,按钮个数应为2~5个

按钮类型,目前有click类型

按钮描述,既按钮名字,不超过16个字节,子菜单不

超过40个字节

按钮KEY值,用于消息接口(event类型)推送,不超过

128字节

错误的Json返回结果

{"errcode":40018,"errmsg":"invalid button name size"}

统一返回码说明

菜单查询

接口说明

查询当前使用的自定义菜单结构。

请求说明

http请求方式:GET

/cgi-bin/menu/get?access_token=ACCESS_TOKEN

返回说明

对应创建接口,正确的Json返回结果:

{"menu":{"button":[{"type":"click","name":"今日歌曲

","key":"V1001_TODAY_MUSIC","sub_button":[]},{"type":"click","name":"

歌手简介","key":"V1001_TODAY_SINGER","sub_button":[]},{"name":"菜单

","sub_button":[{"type":"click","name":"hello

word","key":"V1001_HELLO_WORLD","sub_button":[]},{"type":"click","nam

e":"赞一下我们","key":"V1001_GOOD","sub_button":[]}]}]}}

统一返回码说明

菜单删除

接口说明

取消当前使用的自定义菜单。

请求说明

http请求方式:GET

/cgi-bin/menu/delete?access_token=ACCESS_TOK

EN

返回说明

第 19 页 共 20 页

对应创建接口,正确的Json返回结果:

{"errcode":0,"errmsg":"ok"}

统一返回码说明

接口权限

返回

出自开放平台

跳转到: 导航, 搜索

简介

请先确保公众账号已经拥有接口调用权限。

默认每个公众帐号都不能超过下面的频率限制。 当超出调用接口频率限制,调

用对应接口将会收到如下错误信息:

{"errcode":45009,"errmsg":"api freq out of limit"}

接口调用频率限制

接口名称

获取凭证接口

自定义菜单创建接口

自定义菜单查询接口

自定义菜单删除接口

200(次/天)

100(次/天)

1000(次/天)

100(次/天)

频率限制

取自

“/wiki/?title=%E6%8E%A5%E5%8F%A3%E6%

9D%83%E9%99%90”

第 20 页 共 20 页