微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单
技术qq交流群:JavaDream:251572072
------------------------------------------------------------------------
1.这里只做一个很简单的例子:
2.像我一样木有钱升级服务号的,去申请测试号吧:
3.下面看代码,太sample了,木有什么好讲的啦..亲们不会的话,加qq群吧..嘿嘿
-----------------------------------------------------------
5.创建项目ROOT:
a.用到的jar包
// dom4j-1.6.jar
//commons-beanutils-1.8.3.jar
//commons-collections-3.1.jar
//commons-lang-2.3.jar
//commons-logging-1.0.4.jar
//ezmorph-1.0.6.jar
//json-lib-2.1.jar
//slf4j-api-1.5.8.jar
//slf4j-nop-1.5.8.jar
以上的jar包是上次用的.
fastjson-1.1.1.jar
httpclient-4.2.5.jar
httpcore-4.2.4.jar
------------------------------------
b.项目结构:
credream
credream.entity
--/ROOT/src/credream/entity/AccessToken.java
credream.https
/ROOT/src/credream/https/HttpClientConnectionManager.java
/ROOT/src/credream/https/MySSLSocketFactory.java
/ROOT/src/credream/https/TrustAnyTrustManager.java
credream.utils
--/ROOT/src/credream/utils/MyX509TrustManager.java
--/ROOT/src/credream/utils/SHA1.java
--/ROOT/src/credream/utils/WechatCallbackApi.java
--/ROOT/src/credream/utils/WeixinUtil.java
--//这个类是用来进行微信服务器验证的,需要用到token,微信服务器验证的时候,会向
--//对应的url,传送get参数,这个类,接收了参数后,利用参数进行计算,加密,对比...
--//
/ROOT/src/credream/utils/WxMenuUtils.java//这个类是用来进行菜单的操作
credream.weixin
--/ROOT/src/credream/weixin/weixinUtil.java
含有--是这次,用不到的类
----------------------------------------------------------------------
c.下面是操作菜单用到的代码:这个部分其实不用公网的ip,只需要把appid,和appsecret传给微信服务器,微信服务器会
返回accesstoken,这个东西很有用的,需要把这个作为参数传给微信服务器,看代码吧先:
d./ROOT/src/credream/utils/WeixinUtil.java
package credream.utils;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import credream.https.HttpClientConnectionManager;
/**
* 微信自定义菜单创建
*/
public class WxMenuUtils {
// http客户端
public static DefaultHttpClient httpclient;
static {
httpclient = new DefaultHttpClient();
httpclient = (DefaultHttpClient) HttpClientConnectionManager.getSSLInstance(httpclient);
// 接受任何证书的浏览器客户端
}
public static void main(String[] args) {
try {
// 获取accessToken -参数appid,secret
String accessToken = getAccessToken("appid(这里填写你自己的啊)", "appsecret(这里填写你自己的啊)");
System.out.println(accessToken);
// 创建菜单
//String s = "{\"button\":[{\"name\":\"休闲娱乐\",\"sub_button\":[{\"type\":\"click\",\"name\":\"笑话大全\",\"key\":\"m_joke\"},{\"type\":\"click\",\"name\":\"内涵段子\",\"key\":\"m_duanzi\"},{\"type\":\"click\",\"name\":\"爆笑图片\",\"key\":\"m_laughImg\"}]},{\"name\":\"实用工具\",\"sub_button\":[{\"type\":\"click\",\"name\":\"天气查询\",\"key\":\"m_weather\"},{\"type\":\"click\",\"name\":\"公交查询\",\"key\":\"m_bus\"}]},{\"type\":\"click\",\"name\":\"关于企特\",\"key\":\"m_about\"}]}";
String s = "{\"button\":[{\"name\":\"休闲娱乐\",\"sub_button\":[{\"type\":\"click\",\"name\":\"笑话大全\",\"key\":\"m_joke\"},{\"type\":\"click\",\"name\":\"内涵段子\",\"key\":\"m_duanzi\"},{\"type\":\"click\",\"name\":\"爆笑图片\",\"key\":\"m_laughImg\"}]},{\"name\":\"实用工具\",\"sub_button\":[{\"type\":\"click\",\"name\":\"天气查询\",\"key\":\"m_weather\"},{\"type\":\"click\",\"name\":\"公交查询\",\"key\":\"m_bus\"},{\"type\":\"click\",\"name\":\"功能菜单\",\"key\":\"m_sysmenu\"}]},{\"name\":\"消息示例\",\"sub_button\":[{\"type\":\"click\",\"name\":\"关于企特\",\"key\":\"m_about\"},{\"type\":\"click\",\"name\":\"图文消息\",\"key\":\"m_imgmsg\"},{\"type\":\"click\",\"name\":\"音乐消息\",\"key\":\"m_musicmsg\"}]}]}";
String res = createMenu(s, accessToken);
System.out.println(res);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 创建菜单
*/
public static String createMenu(String params, String accessToken) throws Exception {
HttpPost httpost = HttpClientConnectionManager.getPostMethod("https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + accessToken);
httpost.setEntity(new StringEntity(params, "UTF-8"));
HttpResponse response = httpclient.execute(httpost);
String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
System.out.println(jsonStr);
JSONObject object = JSON.parseObject(jsonStr);
return object.getString("errmsg");
}
/**
* 获取accessToken
*/
public static String getAccessToken(String appid, String secret) throws Exception {
HttpGet get = HttpClientConnectionManager.getGetMethod("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);
HttpResponse response = httpclient.execute(get);
String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
JSONObject object = JSON.parseObject(jsonStr);
return object.getString("access_token");
}
/**
* 查询菜单
*/
public static String getMenuInfo(String accessToken) throws Exception {
HttpGet get = HttpClientConnectionManager.getGetMethod("https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" + accessToken);
HttpResponse response = httpclient.execute(get);
String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
return jsonStr;
}
/**
* 删除自定义菜单
*/
public static String getAccessToken(String accessToken) throws Exception {
HttpGet get = HttpClientConnectionManager.getGetMethod("https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" + accessToken);
HttpResponse response = httpclient.execute(get);
String jsonStr = EntityUtils.toString(response.getEntity(), "utf-8");
JSONObject object = JSON.parseObject(jsonStr);
return object.getString("errmsg");
}
}
-------------------------------------------------------------------------------------------------------------
1.下面是一个辅助类,用来管理证书的:
2.第一个:管理http链接和参数提交
/ROOT/src/credream/https/HttpClientConnectionManager.java
package credream.https;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.impl.client.DefaultHttpClient;
public class HttpClientConnectionManager {
/**
* 获取SSL验证的HttpClient
* @param httpClient
* @return
*/
public static HttpClient getSSLInstance(HttpClient httpClient){
ClientConnectionManager ccm = httpClient.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", MySSLSocketFactory.getInstance(), 443));
httpClient = new DefaultHttpClient(ccm, httpClient.getParams());
return httpClient;
}
/**
* 模拟浏览器post提交
* @param url
* @return
*/
public static HttpPost getPostMethod(String url) {
HttpPost pmethod = new HttpPost(url); // 设置响应头信息
pmethod.addHeader("Connection", "keep-alive");
pmethod.addHeader("Accept", "*/*");
pmethod.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
pmethod.addHeader("Host", "mp.weixin.qq.com");
pmethod.addHeader("X-Requested-With", "XMLHttpRequest");
pmethod.addHeader("Cache-Control", "max-age=0");
pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
return pmethod;
}
/**
* 模拟浏览器GET提交
* @param url
* @return
*/
public static HttpGet getGetMethod(String url) {
HttpGet pmethod = new HttpGet(url);
// 设置响应头信息
pmethod.addHeader("Connection", "keep-alive");
pmethod.addHeader("Cache-Control", "max-age=0");
pmethod.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
pmethod.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/;q=0.8");
return pmethod;
}
}
-----------------------------------------------------------------------------------------------------------------
3.证书管理器:
/ROOT/src/credream/https/TrustAnyTrustManager.java
package credream.https;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
* 这个是一个证书管理器和下面的MyX509TrustManager类是一样的
* @author credream
*
*/
public class TrustAnyTrustManager implements X509TrustManager{
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}
-------------------------------------------------------------------------------------------
4./ROOT/src/credream/https/MySSLSocketFactory.java
package credream.https;
/**
* 这里是证书的一个工厂类,用来实现证书的创建
* @author credream
*/
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import org.apache.http.conn.ssl.SSLSocketFactory;
public class MySSLSocketFactory extends SSLSocketFactory{
static{
mySSLSocketFactory = new MySSLSocketFactory(createSContext());
}
private static MySSLSocketFactory mySSLSocketFactory = null;
private static SSLContext createSContext(){
SSLContext sslcontext = null;
try {
sslcontext = SSLContext.getInstance("SSL");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
try {
sslcontext.init(null, new TrustManager[]{new TrustAnyTrustManager()}, null);
} catch (KeyManagementException e) {
e.printStackTrace();
return null;
}
return sslcontext;
}
@SuppressWarnings("deprecation")
private MySSLSocketFactory(SSLContext sslContext) {
super(sslContext);
this.setHostnameVerifier(ALLOW_ALL_HOSTNAME_VERIFIER);
}
public static MySSLSocketFactory getInstance(){
if(mySSLSocketFactory != null){
return mySSLSocketFactory;
}else{
return mySSLSocketFactory = new MySSLSocketFactory(createSContext());
}
}
}
---------------------------------------------------------------------------------------------------
其实没有必要创建web应用,普通的java类,含有main方法就可以简单的实现菜单的创建,也没必要一定要用公网ip,
上面是所有的创建菜单的代码.
---------------------------------------------------------------------------------------------------------
微信公众开放平台开发08---纯java 实现微信开发:编写自定义菜单相关推荐
- 微信公众开放平台开发02---微信公众平台PHP接口和java接口对比
微信公众开放平台开发02---微信公众平台PHP接口和java接口对比 技术qq交流群:JavaDream:251572072 ----------------------------------- ...
- 微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试
微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 技术qq交流群:JavaDream ...
- 微信公众开放平台开发04---百度BAE,java应用部署服务器,jetty了解
微信公众开放平台开发04---百度BAE,java应用部署服务器,jetty了解 技术qq交流群:JavaDream:251572072 1.Jetty 是一个开源的servlet容器,它为基于Jav ...
- 百度云搭建微信公众平台服务器,微信大众开放平台开发03-百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试...
微信公众开放平台开发03---百度BAE上搭建属于自己的微信公众平台 -JAVA,微信公众开放平台部署到百度云中BASE2.0,进行调试,木有钱买云服务器的亲们试试 微信公众开放平台开发03---百度 ...
- 微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证
微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证 技术qq交流群:JavaDream:251572072 ------------------------- ...
- 微信公众开放平台开发01---微信公众平台介绍,以及开发准备
微信公众开放平台开发01---微信公众平台介绍,以及开发准备 技术qq交流群:JavaDream:251572072 部分内容收集于网络: 1.先分享一份源码: 微信公众开放平台开发 -智能机器人ja ...
- 微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja
微信公众开放平台开发05---jetty部署异常:rg.apache.jasper.JasperException: PWC6345: There is an error in invoking ja ...
- 微信公众开放平台开发06---复习一下servlet
微信公众开放平台开发06---复习一下servlet 技术qq交流群:JavaDream:251572072 ------------------------------------------- ...
- 微信开发(4):微信第三方开放平台的搭建(java)
什么是第三方开放平台 来波官方解释: 我才是官方文档 第三方平台的开放,让公众号或小程序运营者在面向垂直行业需求时,可以通过一键登录授权给第三方开发者,来完成相关能力. 简单的说,就是让公众号授权给第 ...
最新文章
- 禁止PHP警告性错误
- imagepreview使用案例_微信小程序wx.previewImage预览图片实例详解
- C语言中的枚举和联合体
- 我在美国与“狼”共舞的日子(7)
- 前端学习(2422):反馈
- php 管理员表和用户表,求discuz的管理员数据表和用户数据表结构
- java nio 按行读取_Java NIO按行读取文本文件
- 学python看谁的视频比较好-python学习视频好的有哪些
- 8芯网线中哪几根是有用的?
- 一个程序员的失恋故事
- html 警告图标,HTML+CSS入门 CSS实现核辐射警告标志
- 【2021】Structure-Preserving Deraining with Residue Channel Prior Guidance
- CXF 处理yyyy-MM-dd HH:mm:ss日期失败
- 夜神模拟器adb查看log
- 使用Atom编写以太坊智能合约
- 与人工智能相关的创业公司或团队
- 计算机科学时间长被拒,计算机科学与探索外审一般多长时间 - 论文投稿 - 小木虫 - 学术 科研 互动社区...
- 【miscellaneous】最新HEVC/H.265 4K视频,显卡解码测试
- python中的数据类型和控制流
- 屏蔽 手机QQ黄钻官方团队总送礼物 的简单方法
热门文章
- 【Deep Learning 一】课程一(Neural Networks and Deep Learning),第一周(Introduction to Deep Learning)答案
- python与机器学习(二)Numpy / Pandas /矩阵相乘速度对比
- 06_LR和最大熵模型_统计学习方法
- js (jQuery) 之 取值
- mysql慢查询分析工具和分析方法
- JavaScript高级程序设计(2)在HTML中使用JavaScript
- [elixir! #0023] 引擎盖下, `IO.puts` 如何运作
- linux 审计工具auditd日志audit.log时间戳转换查看
- Iocomp .net仿真仪表控件包
- ofstream 的中文目录问题