微信大众,平台自定义菜单创建代码实现—java版

    添加时间:2013-8-9 点击量:

    搞了两天的自定义菜单,终于搞定了,如今分享下心得,以便后来者少走弯路......


    好了,先看先微信官方的API



    官方写的很具体,然则我看完后很茫然,不知道你们什么感触感染。  我知道是post一个带参数的恳求给url,可是具体怎么发送呢,开端想做一个jsp页面,应用<form>来发送,可是各种原因不可,所以换种设法,于是有了java get或post接见url的设法,弄好后一运行,会提示“javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: basic constraints check failed: pathLenConstraint violated - this cert must be the last cert in the certification path”这种错误,查询是的题目,在网上百般折腾,后来高人一句话提示我了(你的url不是公网,办事接入成功了,可以你的开辟景象不克不及),我是在本身电脑上新建的,没有安排到收集上,你给发post恳求了,可是接入不到你的本机上,所以会呈现那个错误了。


    所以有了下面的结论:把本身新建的安排到收集上,就是你收集的应用上,才干实现这一功能。不懂的者,参考下我以前的文章“哄骗微信大众,平台实现主动答复消息——java版”。


    进入正题(我以百度云开辟者中间为例):


    将本身在百度云开辟者中间中安排的应用中的index.jsp批改如下:




     1 <%@page import=java.io.%>
    
    2 <%@page import=java.net. %>
    3 <%@page import=org.json. %>
    4 <%@ page language=java contentType=text/html; charset=utf-8 pageEncoding=utf-8%>
    5
    6 <%
    7 final String appId = ;
    8 final String appSecret = ; //本身的APPIP 和APPSECRET
    9
    10 %>
    11 <%
    12 class TestGetPost{
    13
    14 public String getAccess_token(){ // 获得ACCESS_TOKEN
    15
    16 String url = https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=+ appId + &secret= +appSecret;
    17
    18 String accessToken = null;
    19 try {
    20 URL urlGet = new URL(url);
    21 HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
    22
    23 http.setRequestMethod(GET); //必须是get体式格式恳求
    24 http.setRequestProperty(Content-Type,application/x-www-form-urlencoded);
    25 http.setDoOutput(true);
    26 http.setDoInput(true);
    27 System.setProperty(sun.net.client.defaultConnectTimeout, 30000);//连接超时30秒
    28 System.setProperty(sun.net.client.defaultReadTimeout, 30000); //读取超时30秒
    29
    30 http.connect();
    31
    32 InputStream is =http.getInputStream();
    33 int size =is.available();
    34 byte[] jsonBytes =new byte[size];
    35 is.read(jsonBytes);
    36 String message=new String(jsonBytes,UTF-8);
    37
    38 JSONObject demoJson = new JSONObject(message);
    39 accessToken = demoJson.getString(access_token);
    40
    41 System.out.println(message);
    42 } catch (Exception e) {
    43 e.printStackTrace();
    44 }
    45 return accessToken;
    46 }
    47 public int createMenu() throws IOException {
    48 String user_define_menu = {\button\:[{\type\:\click\,\name\:\项目经管\,\key\:\20_PROMANAGE\},{\type\:\click\,\name\:\机构运作\,\key\:\30_ORGANIZATION\},{\name\:\日常工作\,\sub_button\:[{\type\:\click\,\name\:\待办工单\,\key\:\01_WAITING\},{\type\:\click\,\name\:\已办工单\,\key\:\02_FINISH\},{\type\:\click\,\name\:\我的工单\,\key\:\03_MYJOB\},{\type\:\click\,\name\:\通知布告消息箱\,\key\:\04_MESSAGEBOX\},{\type\:\click\,\name\:\签到\,\key\:\05_SIGN\}]}]};
    49 //此处改为本身想要的布局体,调换即可
    50 String access_token= getAccess_token();
    51
    52 String action = https://api.weixin.qq.com/cgi-bin/menu/create?access_token=+access_token;
    53 try {
    54 URL url = new URL(action);
    55 HttpURLConnection http = (HttpURLConnection) url.openConnection();
    56
    57 http.setRequestMethod(POST);
    58 http.setRequestProperty(Content-Type,application/x-www-form-urlencoded);
    59 http.setDoOutput(true);
    60 http.setDoInput(true);
    61 System.setProperty(sun.net.client.defaultConnectTimeout, 30000);//连接超时30秒
    62 System.setProperty(sun.net.client.defaultReadTimeout, 30000); //读取超时30秒
    63
    64 http.connect();
    65 OutputStream os= http.getOutputStream();
    66 os.write(user_define_menu.getBytes(UTF-8));//传入参数
    67 os.flush();
    68 os.close();
    69
    70 InputStream is =http.getInputStream();
    71 int size =is.available();
    72 byte[] jsonBytes =new byte[size];
    73 is.read(jsonBytes);
    74 String message=new String(jsonBytes,UTF-8);
    75 System.out.println(message);
    76 } catch (MalformedURLException e) {
    77 e.printStackTrace();
    78 } catch (IOException e) {
    79 e.printStackTrace();
    80 }
    81 return 0;
    82 }
    83 }%>
    84 <%
    85 TestGetPost tgp = new TestGetPost();
    86
    87 tgp.createMenu();
    88 %>


    index.jsp

    安排好后,直接在浏览器地址栏中输入本身百度云开辟者中间下改应用的当前域名即可,然后存眷微信大众,账号看结果(已存眷的,作废存眷并从头存眷,即可看到结果)。


    记得将应用中的xml文件里的


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>


    创建后结果为:


     


    小提示:


    1、自定义菜单的查看:直接在浏览器地址栏中输入


    https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN  (换成本身的access_token,access_token在一段时候里是有效的,所以获得后,在粘贴到此是没有题目的)

    2、自定义菜单的删除:


    https://api.weixin.qq.com/cgi-bin/menu/?access_token=ACCESS_TOKEN (删除与查看同理)
    无论对感情还是对生活,“只要甜不要苦”都是任性而孩子气的,因为我们也不完美,我们也会伤害人。正因为我们都不完美,也因为生活从不是事事如意,所以对这些“瑕疵”的收纳才让我们对生活、对他人的爱变得日益真实而具体。—— 汪冰《世界再亏欠你,也要敢于拥抱幸福》
    分享到: