微信微信公众号自定义菜单单更改了发布 大概多久能生效 我这就开发者能显示更改发

微信公众帐号开发-自定义菜单的创建及菜单事件响应
注:文章代码来源于柳峰的微信公众平台应用开发
微信开发公众平台自定义菜单需要花钱认证才能实现,不想花钱只能玩测试账号了,不过这并不影响开发。我的开发都是基于柳峰老师的微信公众平台应用开发做的。
只要我们使用公众平台测试账号就可以开发自定义菜单了,比较方便,测试账号开放了很多接口,很方便。
在开发自定义菜单的时候可以参考微信公众平台开发者文档的自定义菜单创建。
一、自定义菜单
1、自定义菜单最多包括3个一级菜单,每个一级菜单最多包含5个二级菜单。
2、一级菜单最多4个汉字,二级菜单最多7个汉字,多出来的部分将会以&...&代替。
3、创建自定义菜单后,菜单的刷新策略是,在用户进入公众号会话页或公众号profile页时,如果发现上一次拉取菜单的请求在5分钟以前,就会拉取一下菜单,如果菜单有更新,就会刷新客户端的菜单。测试时可以尝试取消关注公众账号后再次关注,则可以看到创建后的效果。
自定义菜单接口可实现多种类型按钮,如下:
1、click:点击推事件
用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event 的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互;
2、view:跳转URL
用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。
3、scancode_push:扫码推事件
用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。
4、scancode_waitmsg:扫码推事件且弹出&消息接收中&提示框
用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出&消息接收中&提示框,随后可能会收到开发者下发的消息。
5、pic_sysphoto:弹出拍照发图
用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。
6、pic_photo_or_album:弹出拍照或者相册发图
用户点击按钮后,微信客户端将弹出选择器供用户选择&拍照&或者&从手机相册选择&。用户选择后即走其他两种流程。
7、pic_weixin:弹出微信相册发图器
用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。
8、location_select:弹出地理位置选择器
用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。
9、media_id:下发消息(除文本消息)
用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在&素材管理/新增永久素材&接口上传后获得的合法id。
10、view_limited:跳转图文消息URL
用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在&素材管理/新增永久素材&接口上传后获得的合法id
二、访问自定义菜单接口
1:获取access_token
自定义菜单的创建、查询和删除需要调用公众平台开放的自定义菜单接口,而调用该接口需要先获取access_token(接口访问凭证),这些接口全都是基于https协议的,因此我们先要解决如何在java程序中发送https请求的问题。
获取接口访问凭证access_token:
获取access_token是通过GET方式访问如下链接:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
链接中有三个参数,分别是grant_type、appid和secret。根据图中的参数说明,grant_type传固定值client_credential,而appid和secret就是申请完自定义菜单后微信分配给我们的。
请求发送成功后,微信服务器会返回一个json串,包含access_token和expires_in两个元素。其中,access_token就是我们最终需要的凭证,而expires_in是凭证的有效期,单位是秒,7200秒也就是2个小时。这就意味着,不是每次访问特殊接口,都需要重新获取一次access_token,只要access_token还在有效期内,就一直可以使用。
2:菜单创建
创建菜单要调用菜单接口
接口调用请求说明
http请求方式:POST(请使用https协议)
其实就是向地址以POST方式提交一个JSON格式的菜单字符串。
三、封装通用请求方法(自定义信任管理器)
创建菜单需要两个接口,一个是获取access_token接口,一个是自定义菜单接口,都是https请求。
1:创建证书信任管理器
对于https请求,我们需要一个证书信任管理器,这个管理器类需要自己定义,但需要实现X509TrustManager接口,代码如下:
package org.liufeng.weixin.
import java.security.cert.CertificateE
import java.security.cert.X509C
import javax.net.ssl.X509TrustM
* 证书信任管理器(用于https请求)
* @author liufeng
public class MyX509TrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
public X509Certificate[] getAcceptedIssuers() {
证书管理器的作用就是信任指定所有证书。
2:创建通用https请求
通用https请求应该
1)支持HTTPS请求;
2)支持GET、POST两种方式;
3)支持参数提交,也支持无参数的情况;
package org.liufeng.weixin.
import java.io.BufferedR
import java.io.InputS
import java.io.InputStreamR
import java.io.OutputS
import java.net.ConnectE
import java.net.URL;
import javax.net.ssl.HttpsURLC
import javax.net.ssl.SSLC
import javax.net.ssl.SSLSocketF
import javax.net.ssl.TrustM
import net.sf.json.JSONO
import org.slf4j.L
import org.slf4j.LoggerF
* 公众平台通用接口工具类
* @author liuyq
public class WeixinUtil {
private static Logger log = LoggerFactory.getLogger(WeixinUtil.class);
* 发起https请求并获取结果
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
public static JSONObject httpRequest(String requestUrl, String requestMethod, String outputStr) {
JSONObject jsonObject =
StringBuffer buffer = new StringBuffer();
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance(&SSL&, &SunJSSE&);
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
// 设置请求方式(GET/POST)
httpUrlConn.setRequestMethod(requestMethod);
if (&GET&.equalsIgnoreCase(requestMethod))
httpUrlConn.connect();
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 注意编码格式,防止中文乱码
outputStream.write(outputStr.getBytes(&UTF-8&));
outputStream.close();
// 将返回的输入流转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, &utf-8&);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str =
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
inputStream =
httpUrlConn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error(&Weixin server connection timed out.&);
} catch (Exception e) {
log.error(&https request error:{}&, e);
return jsonO
四、封装菜单实体类
1:按钮的分类
我们通常会把自定义菜单项看做是按钮,按钮的类型分成click(点击事件)和view(访问网页)。
click类型的按钮有type、name和key3个属性,而view类型的按钮有type、name和url3个属性
2:首先是调用获取凭证接口后,微信服务器会返回json格式的数据:{&access_token&:&ACCESS_TOKEN&,&expires_in&:7200},我们将其封装为一个AccessToken对象,对象有二个属性:token和expiresIn,代码如下:
package org.liufeng.weixin.
* 微信通用接口凭证
* @author liufeng
public class AccessToken {
// 获取到的凭证
// 凭证有效时间,单位:秒
private int expiresIn;
public String getToken() {
public void setToken(String token) {
this.token =
public int getExpiresIn() {
return expiresIn;
public void setExpiresIn(int expiresIn) {
this.expiresIn = expiresIn;
接下来是对菜单结构的封装。因为我们是采用面向对象的方式,最终提交的json格式菜单数据就应该是由对象直接转换得到,而不是在程序代码中拼一大堆json数据。菜单结构封装的依据是公众平台API文档中给出的那一段json格式的菜单结构,如下所示:
click和view的请求示例
&button&:[
&type&:&click&,
&name&:&今日歌曲&,
&key&:&V1001_TODAY_MUSIC&
&name&:&菜单&,
&sub_button&:[
&type&:&view&,
&name&:&搜索&,
&url&:&https://www.soso.com/&
&type&:&view&,
&name&:&视频&,
&url&:&https://v.qq.com/&
&type&:&click&,
&name&:&赞一下我们&,
&key&:&V1001_GOOD&
3:封装菜单结构
每个按钮对象都要一个共同的name属性,因此需要定义一个按钮对象基类,所有的按钮对象都需要继承该类。基类的代码如下:
package org.liufeng.weixin.
* 按钮的基类
* @author liufeng
public class Button {
public String getName() {
public void setName(String name) {
this.name =
接着是子菜单项的封装。这里对子菜单是这样定义的:没有子菜单的菜单项,有可能是二级菜单项,也有可能是不含二级菜单的一级菜单。这类子菜单项一定会包含三个属性:type、name和key,封装的代码如下:
package org.liufeng.weixin.
* 普通按钮(子按钮)
* @author liufeng
public class CommonButton extends Button {
public String getType() {
public void setType(String type) {
this.type =
public String getKey() {
public void setKey(String key) {
this.key =
对父菜单项的定义:包含有二级菜单项的一级菜单。这类菜单项包含有二个属性:name和sub_button,而sub_button以是一个子菜单项数组。父菜单项的封装代码如下:
package org.liufeng.weixin.
* 复杂按钮(父按钮)
* @author liufeng
public class ComplexButton extends Button {
private Button[] sub_
public Button[] getSub_button() {
return sub_
public void setSub_button(Button[] sub_button) {
this.sub_button = sub_
对整个菜单进行封装,菜单对象包含多个菜单项(最多只能有3个),这些菜单项即可以是子菜单项(不含二级菜单的一级菜单),也可以是父菜单项(包含二级菜单的菜单项)
package org.liufeng.weixin.
* @author liufeng
public class Menu {
private Button[]
public Button[] getButton() {
public void setButton(Button[] button) {
this.button =
这样我们就完成了菜单实体类的封装。
凭证access_token的获取方法
继续在先前通用请求方法的类WeixinUtil.java中加入以下代码,用于获取接口访问凭证:
// 获取access_token的接口地址(GET) 限200(次/天)
public final static String access_token_url = &https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET&;
* 获取access_token
* @param appid 凭证
* @param appsecret 密钥
public static AccessToken getAccessToken(String appid, String appsecret) {
AccessToken accessToken =
String requestUrl = access_token_url.replace(&APPID&, appid).replace(&APPSECRET&, appsecret);
JSONObject jsonObject = httpRequest(requestUrl, &GET&, null);
// 如果请求成功
if (null != jsonObject) {
accessToken = new AccessToken();
accessToken.setToken(jsonObject.getString(&access_token&));
accessToken.setExpiresIn(jsonObject.getInt(&expires_in&));
} catch (JSONException e) {
accessToken =
// 获取token失败
log.error(&获取token失败 errcode:{} errmsg:{}&, jsonObject.getInt(&errcode&), jsonObject.getString(&errmsg&));
return accessT
自定义菜单的创建方法
继续在先前通用请求方法的类WeixinUtil.java中加入以下代码,用于创建自定义菜单:
// 菜单创建(POST) 限100(次/天)
public static String menu_create_url = &https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN&;
* 创建菜单
* @param menu 菜单实例
* @param accessToken 有效的access_token
* @return 0表示成功,其他值表示失败
public static int createMenu(Menu menu, String accessToken) {
int result = 0;
// 拼装创建菜单的url
String url = menu_create_url.replace(&ACCESS_TOKEN&, accessToken);
// 将菜单对象转换成json字符串
String jsonMenu = JSONObject.fromObject(menu).toString();
// 调用接口创建菜单
JSONObject jsonObject = httpRequest(url, &POST&, jsonMenu);
if (null != jsonObject) {
if (0 != jsonObject.getInt(&errcode&)) {
result = jsonObject.getInt(&errcode&);
log.error(&创建菜单失败 errcode:{} errmsg:{}&, jsonObject.getInt(&errcode&), jsonObject.getString(&errmsg&));
调用封装的方法创建自定义菜单
package org.liufeng.weixin.
import org.liufeng.weixin.pojo.AccessT
import org.liufeng.weixin.pojo.B
import org.liufeng.weixin.pojo.CommonB
import org.liufeng.weixin.pojo.ComplexB
import org.liufeng.weixin.pojo.M
import org.liufeng.weixin.util.WeixinU
import org.slf4j.L
import org.slf4j.LoggerF
* 菜单管理器类
* @author liufeng
public class MenuManager {
private static Logger log = LoggerFactory.getLogger(MenuManager.class);
public static void main(String[] args) {
// 第三方用户唯一凭证
String appId = &000000&;
// 第三方用户唯一凭证密钥
String appSecret = &&;
// 调用接口获取access_token
AccessToken at = WeixinUtil.getAccessToken(appId, appSecret);
if (null != at) {
// 调用接口创建菜单
int result = WeixinUtil.createMenu(getMenu(), at.getToken());
// 判断菜单创建结果
if (0 == result)
log.info(&菜单创建成功!&);
log.info(&菜单创建失败,错误码:& + result);
* 组装菜单数据
private static Menu getMenu() {
CommonButton btn11 = new CommonButton();
btn11.setName(&天气预报&);
btn11.setType(&click&);
btn11.setKey(&11&);
CommonButton btn12 = new CommonButton();
btn12.setName(&公交查询&);
btn12.setType(&click&);
btn12.setKey(&12&);
CommonButton btn13 = new CommonButton();
btn13.setName(&周边搜索&);
btn13.setType(&click&);
btn13.setKey(&13&);
CommonButton btn14 = new CommonButton();
btn14.setName(&历史上的今天&);
btn14.setType(&click&);
btn14.setKey(&14&);
CommonButton btn21 = new CommonButton();
btn21.setName(&歌曲点播&);
btn21.setType(&click&);
btn21.setKey(&21&);
CommonButton btn22 = new CommonButton();
btn22.setName(&经典游戏&);
btn22.setType(&click&);
btn22.setKey(&22&);
CommonButton btn23 = new CommonButton();
btn23.setName(&美女电台&);
btn23.setType(&click&);
btn23.setKey(&23&);
CommonButton btn24 = new CommonButton();
btn24.setName(&人脸识别&);
btn24.setType(&click&);
btn24.setKey(&24&);
CommonButton btn25 = new CommonButton();
btn25.setName(&聊天唠嗑&);
btn25.setType(&click&);
btn25.setKey(&25&);
CommonButton btn31 = new CommonButton();
btn31.setName(&Q友圈&);
btn31.setType(&click&);
btn31.setKey(&31&);
CommonButton btn32 = new CommonButton();
btn32.setName(&电影排行榜&);
btn32.setType(&click&);
btn32.setKey(&32&);
CommonButton btn33 = new CommonButton();
btn33.setName(&幽默笑话&);
btn33.setType(&click&);
btn33.setKey(&33&);
ComplexButton mainBtn1 = new ComplexButton();
mainBtn1.setName(&生活助手&);
mainBtn1.setSub_button(new CommonButton[] { btn11, btn12, btn13, btn14 });
ComplexButton mainBtn2 = new ComplexButton();
mainBtn2.setName(&休闲驿站&);
mainBtn2.setSub_button(new CommonButton[] { btn21, btn22, btn23, btn24, btn25 });
ComplexButton mainBtn3 = new ComplexButton();
mainBtn3.setName(&更多体验&);
mainBtn3.setSub_button(new CommonButton[] { btn31, btn32, btn33 });
* 这是公众号xiaoqrobot目前的菜单结构,每个一级菜单都有二级菜单项
* 在某个一级菜单下没有二级菜单的情况,menu该如何定义呢?
* 比如,第三个一级菜单项不是&更多体验&,而直接是&幽默笑话&,那么menu应该这样定义:
* menu.setButton(new Button[] { mainBtn1, mainBtn2, btn33 });
Menu menu = new Menu();
menu.setButton(new Button[] { mainBtn1, mainBtn2, mainBtn3 });
注意:在运行以上代码时,需要将appId和appSecret换成你自己公众号的。
响应菜单点击事件
package org.liufeng.course.
import java.util.D
import java.util.M
import javax.servlet.http.HttpServletR
import org.liufeng.course.message.resp.TextM
import org.liufeng.course.util.MessageU
* 核心服务类
* @author liufeng
public class CoreService {
* 处理微信发来的请求
* @param request
public static String processRequest(HttpServletRequest request) {
String respMessage =
// 默认返回的文本消息内容
String respContent = &请求处理异常,请稍候尝试!&;
// xml请求解析
Map requestMap = MessageUtil.parseXml(request);
// 发送方帐号(open_id)
String fromUserName = requestMap.get(&FromUserName&);
// 公众帐号
String toUserName = requestMap.get(&ToUserName&);
// 消息类型
String msgType = requestMap.get(&MsgType&);
// 回复文本消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setFuncFlag(0);
// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
respContent = &您发送的是文本消息!&;
// 图片消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_IMAGE)) {
respContent = &您发送的是图片消息!&;
// 地理位置消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LOCATION)) {
respContent = &您发送的是地理位置消息!&;
// 链接消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_LINK)) {
respContent = &您发送的是链接消息!&;
// 音频消息
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_VOICE)) {
respContent = &您发送的是音频消息!&;
// 事件推送
else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {
// 事件类型
String eventType = requestMap.get(&Event&);
if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {
respContent = &谢谢您的关注!&;
// 取消订阅
else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {
// TODO 取消订阅后用户再收不到公众号发送的消息,因此不需要回复消息
// 自定义菜单点击事件
else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {
// 事件KEY值,与创建自定义菜单时指定的KEY值对应
String eventKey = requestMap.get(&EventKey&);
if (eventKey.equals(&11&)) {
respContent = &天气预报菜单项被点击!&;
} else if (eventKey.equals(&12&)) {
respContent = &公交查询菜单项被点击!&;
} else if (eventKey.equals(&13&)) {
respContent = &周边搜索菜单项被点击!&;
} else if (eventKey.equals(&14&)) {
respContent = &历史上的今天菜单项被点击!&;
} else if (eventKey.equals(&21&)) {
respContent = &歌曲点播菜单项被点击!&;
} else if (eventKey.equals(&22&)) {
respContent = &经典游戏菜单项被点击!&;
} else if (eventKey.equals(&23&)) {
respContent = &美女电台菜单项被点击!&;
} else if (eventKey.equals(&24&)) {
respContent = &人脸识别菜单项被点击!&;
} else if (eventKey.equals(&25&)) {
respContent = &聊天唠嗑菜单项被点击!&;
} else if (eventKey.equals(&31&)) {
respContent = &Q友圈菜单项被点击!&;
} else if (eventKey.equals(&32&)) {
respContent = &电影排行榜菜单项被点击!&;
} else if (eventKey.equals(&33&)) {
respContent = &幽默笑话菜单项被点击!&;
textMessage.setContent(respContent);
respMessage = MessageUtil.textMessageToXml(textMessage);
} catch (Exception e) {
e.printStackTrace();
return respM这篇文章主要介绍了java实现微信公众平台自定义菜单的创建示例,需要的朋友可以参考下 import java.io.IOE import java.io.InputS import java.io.OutputS import java.net.HttpURLC import java.net.MalformedURLE import java.net.URL; import org.json.JSONO
这篇文章主要介绍了Python实现微信公众平台自定义菜单实例,本文直接给出实现代码,需要的朋友可以参考下 首先先获取access_token,并保存与全局之中 def token(requset): url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s' % ( Config.AppID, Config.AppSecret) result = urllib
微信公众平台自定义菜单PHP开发,微信公众平台自定义菜单是如何实现的呢?其实很简单,首先在微信公众平台升级为服务号,获取appid和 appsecret,然后根据这2个参数获取access_token,在根据access_token,post一串字符到微信服务器就可以了.代码如 下: 回调URL(config.php)代码: define(AppId, &wxabcdef&);//定义AppId,需要在微信公众平台申请自定义菜单后会得到 define(AppSecr
微信公众平台开发之自定义菜单创建JAVA源码 创建项目添加httpclient.jar.fastjson.jar支持 专注微信公众平台app开发群: 自定义菜单的问题总结: 1.自定义菜单只有服务号可以申请,订阅号暂时无法申请(继续观望微信的开放政策) 2.菜单响应回复方式可以是[图文].[音乐].[文本]三种方式 3.自定义菜单创建之后无法立即生效,可以采用先取消关注,再关注的方式查看效果 微信自定义菜单创建官网文档 package com.using.weixin.comm
微信公众平台服务号开放了自定义菜单API,本案例介绍C#开发微信公众号自定义菜单功能.在此基础上可以开发更完善的自定义菜单管理功能 &%@ Page Language=&C#& AutoEventWireup=&true& CodeBehind=&cm.aspx.cs& Inherits=&guotaotao_weixin.cm& %& &!DOCTYPE html PUBLIC &-//W3C//
首先上截图: 使用vs2012+C#开发. 代码下载地址: 猛戳这里下载
自定义菜单作为能够帮助公众号丰富界面,让用户更好更快地理解公众号的重要功能,现在针对开发者增加了点击菜单后调起扫一扫(支持二维码/一维码).发图片.发地理位置的能力,需开发实现.原有自定义菜单开发权限的公众号,均可获得以上能力.增加的详细能力如下: 1. 扫码推送事件 用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息. 2. 扫码推送事件,且弹出&消息接收中&提示框 用户点击按钮后,微信
微信推出自定义菜单,让很多人大抱期望,但我认为这不是公众账号必要具备的,我个人感觉现在形式大于实用,大部分用户其实已经习惯了通过输入来获取内容,实在没有必要太执着于自定义菜单的使用,服务好才是根本. 最近微信悄悄推出了自定义菜单内测,又一次吸引了无数人的眼球,不管是谁19号这天都在干那么几件事,一是填写表格申请内测,二是研究自定义菜单接口文档,三是写自定义菜单的各种分析文章,四是托各种关系想早点拿到内测资格. Ztalk也不能免俗的拿了公司资料去申请,但因为是自媒体估计是拿不到的,会有点失望,但
这篇文章主要介绍了php实现微信公众平台账号自定义菜单类的方法,涉及针对微信接口API的二次开发,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了php实现微信公众平台账号自定义菜单类的方法.分享给大家供大家参考.具体分析如下: 微信公众平台服务号可申请自定义菜单了,其它的号暂时不支持自定义菜单了,这个不但可以使用api来操作,还可以直接在后台定义菜单与参数. 申请自定义菜单 服务号可以申请自定义菜单,使用QQ登录的公众号,可以升级为邮箱登录,使用邮箱登录的公众号,可以修改登录邮箱,群发消
微信现在的功能越来越强大了,申请认证后的开发者能自定义菜单,用户直接点击微信界面下方的菜单,就能直接去到指定的页面,下面小编用[微信公众平台测试号]为大家演示一下怎么创建自定义菜单. 工具/原料 认证后的微信公众平台 微信公众平台切换开发者模式 方法/步骤 登录[微信公众平台],选择[功能]菜单下面的[高级功能],进入[开发模式]. 由于小编的微信公众平台还没通过认证,下面用[申请测试账户]为大家演示. 微信公众平台接口测试帐号申请,无需公众帐号.快速申请接口测试号,直接体验和测试公众平台所有高
这篇文章主要介绍了PHP使用Face++接口开发微信公众平台人脸识别系统的方法,涉及微信公众平台相关接口的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了PHP使用Face++接口开发微信公众平台人脸识别系统的方法.分享给大家供大家参考.具体如下: 效果图如下: 具体步骤如下: 首先,先登录Face++的官网注册账号:官网链接 注册之后会获取到api_secret和api_key,这些在调用接口的时候需要用到. 然后接下来的就是使用PHP脚本调用API了. 在使用PHP开发微信公
这篇文章主要介绍了微信公众平台实现获取用户OpenID的方法,需要开发人员经过微信授权后获取高级接口才能使用此功能,用户OpenID对于微信公众平台建设有着非常广泛的用途,需要的朋友可以参考下 本文实例讲述了微信公众平台实现获取用户OpenID的方法.分享给大家供大家参考.具体分析如下: 用户点击微信自定义菜单view类型按钮后,微信客户端将会打开开发者在按钮中填写的url值 (即网页链接),达到打开网页的目的,但是view不能获取用户的openid,需要使用微信&网页授权获取用户基本信息&qu
这篇文章主要介绍了php实现基于微信公众平台开发SDK(demo)扩展的方法,包括处理文本消息.天气.翻译.聊天信息及自定义菜单等,需要的朋友可以参考下 本文实例讲述了php实现基于微信公众平台开发SDK(demo)扩展的方法.分享给大家供大家参考.具体分析如下: 该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用.代码如下: define(&TOKEN&, &xingans&quot
微信公众平台SDK for Go 网站 : https://github.com/sidbusy/weixinmp 这是一个使用Go语言编写的微信公众平台开发接口封装包. Updates Release
---------------- 创建/查询/删除自定义菜单 Release
---------------- 上传/下载多媒体文件 创建/换取带参数的二维码 Release
---------------- 效验请求真实性 解析请求 获取/
在这篇微信公众平台开发教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯.及HTTP/XML/CSS/JS等基础 我们将使用微信公众账号方倍工作室作为讲解的例子,二维码见底部. 本系列教程将引导你完成如下任务: 创建新浪云计算平台应用启用微信公众平台开发模式基础接口消息及事件微信公众平台PHP SDK微信公众平台开发模式原理开发天气预报功能 第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台作为服务器资源,并且申请PHP环境+MySQL数据
由于微信的大热,为了更好的方便使用微信的用户查询一些信息,这篇文章是入门级的微信公众平台开发教程,需要的朋友可以参考下 在这篇入门教程中,我们假定你已经有了PHP语言程序.MySQL数据库.计算机网络通讯及XML语言基础.如果你还没有,那么请先学习相关知识. 我们将使用微信公众账号方倍工作室(账号:pondbaystudio,二维码在最底部)作为讲解的例子. 这篇入门教程将引导你完成如下任务: 创建百度云平台应用启用微信公众平台开发模式获取订阅.文字.图片.语音.视频消息回复文本.图文及音乐消息
微信基础交互 在谈更高性能的微信公众平台接口开发之前,我们先了解下微信开发的基础.微信公众平台官网的解释是:公众平台开发接口提供与用户进行消息交互.自定义菜单交互的能力.对于已接入的第三方接口,当用户发送消息时,微信会推送至第三方服务器.以上就是微信公众平台的开发流程,很多人因不明白而使开发受阻,如图1所示. 图1 微信公众平台开发流程 用户主动发送的消息分成普通消息.事件消息.语音识别结果.普通消息包含文本.图片.语音.视频.位置.链接等多维度消息,也是开发者们最常用的.事件消息包含关注.取消
一些资料 微信公众平台 官方WIKI 简明文档(无需登录) 微信公众平台消息接口API指南 企业微信公众平台建设指南 微信公众平台商业模式探索 微信公众平台消息接口开发系列 微信公众平台消息接口开发(1)启用接口 微信公众平台消息接口开发(2)你的服务器没有正确响应Token验证的解决方法 微信公众平台消息接口开发(3)中英翻译 微信公众平台消息接口开发(4)天气预报 微信公众平台消息接口开发(5)股票查询 微信公众平台消息接口开发(6)电话号码链接与网址链接 微信公众平台消息接口开发(7)快递
在使用python一步一步搭建微信公众平台(二)中最后我们留下了一个问题,就是单引号的content在render到xml中时,返回给用户的信息会被转码,如'&&&'会被转为&&&用户在收到有&&&等内容的时候都会转,非常难看,我查找了一些网页,几乎都是问如果将特殊符号转为转义,而没有说怎么转回来,最后看到说这个转码是因为在&![CDATA[]]& 在CDATA中的内容就是为了避免发生这种由于特殊符号引起的问题,那么我们可以把rend
本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称.头像.性别.国家.省份.城市.语言. 本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录. 在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token和授权Access
在公司弄了一个星期的微信公众平台的接口开发,由于之前没弄过,开发的过程遇到了很多的小问题.下面我就总结一下我在开发过程中遇到了的问题和解决方法: 0x01首先是接口的配置问题 其实接口的配置一开始是没有问题的,但是后来我把它改成其他的之后再想改回来的时候发现改不回来了,总是报下面的错 后来才知道,修该接口配置的时候不能用之前用过的URL和TOKEN的组合. 0x02自定义菜单问题 在自定义菜单的设置过程中开始的时候发现怎么都设置不好,服务器总是返回 {&errcode&:40016,&
0.资料 * 官方文档(http://mp.weixin.qq.com/wiki/home/index.html) *&微信公众平台搭建与开发揭秘& * 玩转微信公众平台(http://blog.csdn.net/column/details/weixin-start530.html): * 订餐系统之微信点餐&订餐系统之微信支付,踩了官方demo的坑: 1.开发者模式基本功能 编辑模式比较简单,登录mp.weixin.qq.com一看就会,在此略过.若要申请自定义菜单&微信认证
[编者按]由CSDN和&程序员&杂志联合主办的 2014年微信开发者大会 将于8月23日在北京举行,邀请了来自于一线的微信开发商技术负责人或资深工程师从企业应用开发高级篇.智能客服与LBS.微信支付.微信上的HTML5社交应用.微信小店开发等角度为与会者带来实战分享( 议程 ).目前报名处于优惠票价阶段,通过申请加入CSDN CTO俱乐部即可享受8折购票价格(票款中均含午餐),在8月1日前完成付款的同学还将免费获赠微信开发图书一本(两选一,活动现场发放). 值得一提的是,CSDN优秀博主.畅销
微擎 网站 : http://www.we7.cc/ 微信公众平台自助引擎,简称微擎,微擎是一款免费开源的微信公众平台管理系统. 注:使用微擎必须要有自己的服务器.虚拟空间或者自己的BAE,且必须要支持PHP+MYSQL,上传微擎程序后按系统指引安装即可. 微擎新特性: 免费的开源系统 高度的安全特性!100%的自由控制!便于二次开发! 自动获取帐号信息 只需要一键即可快速获取用户信息,添加账号更简便! 多样化的消息推送模式 新增了推送模式,突破了原有的使用次数限制,更具营销价值! 支持多微信账
每天到底有多少人收到群发的消息,有多少人打开看了,有多少人转发分享了,有多少人回复消息进行互动了,这些数据相信所有做公众平台的朋友都非常关心,今天--老贼给各位大揭秘!(福利在最后--) 昨天晚上收到ZTalk的朋友(阳光总是暖暖的)爆料说是能看到微信公众后台详细数据了,不光有图有真相还提供了查看网址,我登陆上去一看果然牛逼大发了,所有的数据全齐(订阅号和服务号均可查看)! 先告诉大家如何查看自己的数据,首先登陆微信公众平台后台,然后可以看到网页的地址栏里有一个token数字请记录下来,如下图红
微信也没有什么神秘的,看看内容贡献者@叶于华 写的有关小县城的微信营销,你就知道了,微信营销比微博更适合二三线城市.看看,老叶是怎么一步一步利用微信工作平台进行营销的. 先说说微信公众平台是什么样的东东? 1.微信公共平台是微信官方推出的一项服务产品. 2.目前微信公众平台只支持PC,并可以绑定私号进行群发. 我为什么要使用微信公众平台? 1.大家都知道腾讯微博与新浪微博的区别,我这里不细说了.我们县只是浙西地区的一个山区,也是国内外有名的景区,但当地人使用互联网使用群体还是以QQ为主. 2.每
这篇文章主要介绍了微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动,需要的朋友可以参考下 在腾讯的微信公众平台开发者文档,网页授权获取用户基本信息这一节中写道&在微信公众号请求用户网页授权之前,开发者需要先到公众平台网站的我的服务页中配置授权回调域名.请注意,这里填写的域名不要加http://&,链接: http://mp.weixin.qq.com/wiki/index.php?title=%e7%bd%91%e9%a1%b5%e6%8e%88%e6%9d%83%e8%8
这篇文章主要介绍了微信公众平台接口开发入门示例,较为简单透彻的分析了微信公众平台接口开发的技巧与具体方法,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了微信公众平台接口开发入门示例.分享给大家供大家参考.具体如下: 微信公众平台的接口开发是一个现在比较常用的功能了,很多的人都会去了解一下微信公众平台一些简单开发应用,这里就来给大家介绍一个入门示例. 这段时间都在忙于微信公众号平台来发,现在已经接近尾声了,所以对于微信开发平台的接口如何使用,在这里也唠刀一两句. 微信平台的开发并不像
weixin-popular 网站 : https://github.com/liyiorg/weixin-popular 简介: weixin-popular 包括微信公众平台基础API与支付API,提供便捷的API调用接口. API 列表: TokenAPI access_token 获取 MediaAPI 多媒体上传下载(临时素材) MaterialAPI 永久素材 MenuAPI 菜单 MessageAPI 信息发送(客服消息.群发消息.模板消息) PayAPI 支付订单相关接口 Pay
最近流行微信,特别是微信公众平台的推出,广大欲创业者摩拳擦掌,虎嗅等各家媒体更是集中报道,这时候不谈点微信的事情都不好跟人打招呼了. 本着实事求是,知行合一的态度,尝试注册了几个账号,想看看这公众平台到底有多大潜力.每天发几条广告这种媒体类的公众账号就没必要去玩了.最终用微信公众平台的自定义接口功能开发了两个简单的应用,一个叫&托福题库&(toefl_test),主要功能是通过微信练习托福阅读题.公众账号给用户发送一道题目,用户反馈答案,公众账号再反馈结果,如此往复.另一个叫&quot
这篇文章主要介绍了PHP对接微信公众平台消息接口开发流程,如何使用PHP版接口操作公众平台消息,需要的朋友可以参考下 一.写好接口程序 在你的服务器上上传好一个接口程序文件,如http://www.yourdomain.com/weixin.php 内容如下: &?php define(&TOKEN&, &weixin&);//自己定义的token 就是个通信的私钥 $wechatObj = new wechatCallbackapiTest(); $wech
这篇文章主要介绍了PHP版微信公众平台微信API类,目前主要实现了微信红包接口,陆续会继续进行更新,非常的实用,这里推荐给小伙伴们,有需要的朋友可以参考下. 重写了一下PHP下面的微信API接口, 微信红包支持,JSAPI的动态参数接口支持 http://git.oschina.net/youkuiyuan/yky_test/blob/master/class/wxapi.class.php 微信API类 - 增加红包支持 &?php /*****************************
最近,微博上刮起了一阵秀微信公众平台账号风,看到各种媒体.网站.草根大号都在秀二维码.我认为这可能是个新平台的崛起,就好像当年微博的崛起一样,往往第一批用户总能获得大量资源,形成了三分天下的局面. 之所以预见微信公众平台能崛起,取决于它的一个广告语:我的品牌,上亿人看见.确实如此,博客你错过了,SNS,你错过了;微博,你错过了,而微信新推出的公众平台,你不能再错过了. 微信公众号的申请方式 任何人都可以申请,微信公众号的申请地址及平台地址在:mp.weixin.qq.com 都去试试吧. 需要注
这篇文章主要介绍了微信公众平台开发实现2048游戏的方法,较为详细的讲述的2048游戏的原理以及微信公众平台开发2048游戏的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了微信公众平台开发实现2048游戏的方法.分享给大家供大家参考.具体如下: 一.2048游戏概述 &2048&是比较流行的一款数字游戏.原版2048首先在github上发布,原作者是Gabriele Cirulli.它是基于&1024&和&小3传奇&的玩法开发而成的新型数字游戏 . 随后2
这篇文章主要介绍了基于php的微信公众平台开发入门,实例分析了微信公众平台从注册.配置方法及接口代码的实现技巧,深入浅出,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了基于php的微信公众平台开发方法.分享给大家供大家参考.具体如下: 最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的- 今天来分享一下开发经验~ 微信公众平台提供的接口很简单,先看看消息交互流程: 说的通俗一些,用户使用微信发送消息 -& 微信将数据发送给开发者 -& 开发者处理消息并返回数据至微信 -&gt
对于腾讯强大的灵感借鉴能力,前段时间小马哥毫无压力的表示,&你坐了车别人就不能制造车了吗?很多东西其他互联网公司都在做,因为我们第一个做得那么全面,所以压力全部压我们身上,随着时间推演,加上我们创新投入,新产品推出,这种质疑越来越少.&不知道创业者们怎么看小马哥的这一席话,但相信新浪应该还是比较赞成的态度,微博即将上线&媒体公众平台&,直指微信公众平台. 微博&媒体公众平台&主要是针对众多的媒体(以及各种&自媒体&)推出的微博
最近比较关注微信公众平台的发展,听说微信的开放平台会有大动作. 着手研究了下微信公众平台的API接口自动回复.设计得还不错. 同时关注了下基于微信公众平台API做的一些第三方平台. 有以下一些 乐享微信 地址:http://wxapi.cn/ 介绍:提供各种生活类查询的API接入,不过现在也开始收费了. 智能360语义云 地址:http://www.yuyicloud.com/ 介绍:处理内测版的语义云,完全网站上说的那么强大,不,也许我觉得操作过于复杂,以至于我连语义云的文档都看不懂.不过功能
前言:微信公众平台支持将普通客户发送过来的消息,转发到你自己的WEB服务器上,你可以根据自己的业务判断逻辑,回复不同的消息内容给普通客户.下面开始讲我的实战过程: 1.登陆微信公众平台后,进入菜单&高级功能&,选择进入&开发模式&,此时,它会提示你输入你的消息转发的网址和token,如下图所示: 在这个例子里头,我们的URL采用的方式是用JAVA写一个servlet,然后填上该servlet在公网的地址(servlet是什么我就不解释了,java最基础的东西),To
第一次写技术博客,一直逛开源中国,感觉愧对大家,只索取没付出.先用无源码筛选掉一部分浮躁的读者,不过说句实话,代码这东西最好自己写,没什么技术难点,我学C#才两年. 因为是模拟网页登录,所以需要对http多少有些了解,一年前我正在看百度百科的HTTP协议,经理看见了问我:看这个干嘛(因为我们公司是一个做WEB应用的小公司,所以一般也真的用不着这些)?我呵呵一笑.建议大家不管学什么语音,尽量多去接触一些底层的东西,总有一天有用的.这个需要对web前端其实就是JS要有一定的了解,最好是开发过web项
最近微信的公众平台比较火,于是我也想弄个微信来玩玩.如何注册微信公众号?点击之后就可以看到官方的答案了(额,比较坑爹). 注册之后,可以选择编辑模式和开发模式,这里要说的是开发模式. 首先要开启开发模式必须要进行Token的一个验证,你给出一个地址,微信发送请求,然后你给出相应,就这么简单.虽然说是简单,但是这是事后才说的,官方只有PHP的DEMO,我用JAVA开发的时候各种蛋疼不会弄,不过好在还是弄出来了. 上传代码 以下代码是校验Token的关键代码,其中还有一个SHA1加密的类在附件中,这
一.什么是OAuth2.0 官方网站:http://oauth.net/ http://oauth.net/2/ 权威定义:OAuth is An open protocol to allow secure authorization in a simple and standard method from web, mobile and desktop applications. OAuth是一个开放协议,允许用户让第三方应用以安全且标准的方式获取该用户在某一网站.移动或桌面应用上存储的私密的
微信公众平台使用了seajs开源框架,发现几乎都实现了组件化,比如:下拉菜单.富文本编辑器(虽然也是用的ueditor但是看起来更简单美观).弹出层.图片上传等等.先实现了一个简单的下拉菜单,以后有时间试着把其他组件也扒下来...主要是所有js都压缩处理了,所以扒下来的js变量名都是各种abc,读起来非常蛋疼. 如果需要的话,我再把所有代码分享到云盘... 目录结构 展示效果 index.html代码 &!DOCTYPE html& &html& &head& &
一旦接入验证成功,成为正式开发者,你可能会迫不及待地想通过手机微信发送一条&Hello, Wechat&到你的公众号服务器.不过上一篇的那个程序还无法处理手机提交的文本消息,本篇将介绍如何用Golang编写公众号程序来接收手机端发送的 文本消息以及回复响应消息. 根据微信公众平台开发文档中描述:&当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上&.我们 用一个示意图展示一下这个消息流程: 微信服务器通过一个HTTP Po
这篇文章主要介绍了微信公众平台消息接口校验与消息接口响应的方法,实例分析了微信公众平台开发的具体步骤及wechatCallbackapiTest等类的用法,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了微信公众平台消息接口校验与消息接口响应的方法.分享给大家供大家参考.具体分析如下: 开发微信公众平台消息接口过程中,我们首先需要验证消息接口的有效性,验证通过后,才可以进行其他开发,首先我们来看一下微信公众平台给我的 PHP SDK. 1.需要设置一个 TOKEN 信息,代码如下:
为维护作者权益,鼓励优质内容产生,微信公众平台今日上线原创声明功能,暂时面向微信认证的媒体类型公众帐号公测. 一.申请原创声明 原创者可在微信公众平台后台的&素材管理&处进入&图文消息&编辑,点击&申请原创声明&. 并填写提交原创声明的信息. 申请原创声明的文章在群发成功后,原创声明系统会对其进行智能比对,系统比对需要一定时间(半小时以内),比对通过后,系统会自动对文章添加&原创&标识. 二.原创声明热点问题Q&A Q
微信公众平台数据接口正式向所有已微信认证(通过资质认证即可)的服务号和订阅号开放.通过数据接口,公众号开发者可以便利地获取更详细.更灵活的运营数据.具体能力如下: 1.用户分析数据接口 通过该接口可以获取公众号的用户增减数据和累计用户数据. 2.图文分析数据接口 通过该接口可以获取公众号群发的图文消息的阅读.分享.收藏等数据. 3.消息分析数据接口 通过该接口可以获取用户向公众号发送消息的数据,包括消息发送人数.次数,以及消息发布次数的分布等. 4.接口分析数据接口 通过该接口可以获取公众号在通
微信公众平台堪称是2012年度国内互联网产品领域国内最大的创新,有朋友问我怎么看微信公众平台,我其实没怎么&看& ,因为我一直在尝试学习利用微信公众平台,在做运营上的实践.我个人运营了&小道消息&,基本上是每天一篇文章,和朋友们交流一下我的一些观点:丁香园团队前一段时间也利用微信的开放消息接口做了&用药助手&的即时信息查询的功能,目前来看还只是具备一定的功能,改进的地方还有许多. 如果非要我说微信公众平台是怎么回事,那么可能一句话就够了&quot
今天,登录微信的后台,我们看到微信已经&悄悄地&开放了公众平台! 之前微信开放平台内测的时候,我们作为第一批认证媒体入驻,用户能关注爱范儿的微信公众号,并每日收到少量精致的推送文章.这一平台向公众开放,意味着这个产品已经明确了它的发展方向,开始启航.普通用户得以一窥全貌,并将在新的形态下形成新的沟通场景. --从今天开始,每一个人都可以用一个 QQ 号码,打造自己的一个微信的公众号,并在微信平台上实现和特定群体的文字.图片.语音的全方位沟通.互动. 如何申请及使用 使用 QQ 号码,可
微信公众平台,去中心化的平台级创新 在上周五,微信悄悄开放了它的公众平台,从今天开始,每一个人都可以用一个 QQ 号码,打造自己的一个微信的公众号,并在微信平台上实现和特定群体的文字.图片.语音的全方位沟通.互动. 关于微信公众平台几个你需要知道的信息 #1 利用二维码的发布与订阅方式 微信的最重要的发布和订阅方式,是通过发布公众号的二维码,让微信用户随手扫描订阅.任何微信公众帐号用户,都在设置种找到一个如下格式的二维码,品牌 ID 会放到二维码的中部. #2 精准消息推送 微信公众帐号可以通过
目前,公众平台推送给公众账号的基础消息和公众账号回复的响应消息存在一定程度的安全风险,为了更好的保护用户和公众账号的信息安全,公众平台将对信息安全进行升级,升级内容如下: 1. 新增消息体签名验证,用于公众平台和公众账号验证消息体正确性 2. 针对推送给微信公众账号的普通消息和事件消息,以及推送给设备公众账号的设备消息进行加密 3. 公众账号对密文消息的回复也要求加密 开发者需注意,公众账号主动调用API的情况将不受影响. 启用加解密功能(即选择兼容模式或安全模式)后,公众平台服务器在向公众账号
Copyright (C) , All Rights Reserved.
版权所有 闽ICP备号
processed in 0.076 (s). 11 q(s)}

我要回帖

更多关于 微信自定义菜单不生效 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信