JSON

微信公众帐号开发教程介绍(3)

字号+ 作者:H5之家 来源:H5之家 2015-10-21 09:48 我要评论( )

首先是调用获取凭证接口后,微信服务器会返回json格式的数据:{access_token:ACCESS_TOKEN,expires_in:7200},我们将其封装为一个AccessToken对象,对象有二个属性:token和expiresIn,代码如下: package org.liuf

  首先是调用获取凭证接口后,微信服务器会返回json格式的数据:{"access_token":"ACCESS_TOKEN","expires_in":7200},我们将其封装为一个AccessToken对象,对象有二个属性:token和expiresIn,代码如下:

 

package org.liufeng.weixin.pojo;  /**  * 微信通用接口凭证  *  * @author liufeng  * @date 2013-08-08  */  public class AccessToken {  // 获取到的凭证  private String token;  // 凭证有效时间,单位:秒  private int expiresIn;  public String getToken() {  return token;  }  public void setToken(String token) {  this.token = token;  }  public int getExpiresIn() {  return expiresIn;  }  public void setExpiresIn(int expiresIn) {  this.expiresIn = expiresIn;  }  }


  接下来是对菜单结构的封装。因为我们是采用面向对象的编程方式,最终提交的json格式菜单数据就应该是由对象直接转换得到,而不是在程序代码中拼一大堆json数据。菜单结构封装的依据是公众平台API文档中给出的那一段json格式的菜单结构,如下所示:

  

{   "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"   }]   }]   }


  首先是菜单项的基类,所有一级菜单、二级菜单都共有一个相同的属性,那就是name。菜单项基类的封装代码如下:

 

package org.liufeng.weixin.pojo;  /**  * 按钮的基类  *  * @author liufeng  * @date 2013-08-08  */  public class Button {  private String name;  public String getName() {  return name;  }  public void setName(String name) {  this.name = name;  }  }


  接着是子菜单项的封装。这里对子菜单是这样定义的:没有子菜单的菜单项,有可能是二级菜单项,也有可能是不含二级菜单的一级菜单。这类子菜单项一定会包含三个属性:type、name和key,封装的代码如下:

 

package org.liufeng.weixin.pojo;  /**  * 普通按钮(子按钮)  *  * @author liufeng  * @date 2013-08-08  */  public class CommonButton extends Button {  private String type;  private String key;  public String getType() {  return type;  }  public void setType(String type) {  this.type = type;  }  public String getKey() {  return key;  }  public void setKey(String key) {  this.key = key;  }  }


  再往下是父菜单项的封装。对父菜单项的定义:包含有二级菜单项的一级菜单。这类菜单项包含有二个属性:name和sub_button,而sub_button以是一个子菜单项数组。父菜单项的封装代码如下:

  

package org.liufeng.weixin.pojo;   /**   * 复杂按钮(父按钮)   *   * @author liufeng   * @date 2013-08-08   */   public class ComplexButton extends Button {   private Button[] sub_button;   public Button[] getSub_button() {   return sub_button;   }   public void setSub_button(Button[] sub_button) {   this.sub_button = sub_button;   }   }


  最后是整个菜单对象的封装,菜单对象包含多个菜单项(最多只能有3个),这些菜单项即可以是子菜单项(不含二级菜单的一级菜单),也可以是父菜单项(包含二级菜单的菜单项),如果能明白上面所讲的,再来看封装后的代码就很容易理解了:

 

package org.liufeng.weixin.pojo;  /**  * 菜单  *  * @author liufeng  * @date 2013-08-08  */  public class Menu {  private Button[] button;  public Button[] getButton() {  return button;  }  public void setButton(Button[] button) {  this.button = button;  }  }


  关于POJO类的封装就介绍完了。

  凭证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 密钥   * @return   */   public static AccessToken getAccessToken(String appid, String appsecret) {   AccessToken accessToken = null;   String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);   JSONObject jsonObject = httpRequest(requestUrl, "GET", null);   // 如果请求成功   if (null != jsonObject) {   try {   accessToken = new AccessToken();   accessToken.setToken(jsonObject.getString("access_token"));   accessToken.setExpiresIn(jsonObject.getInt("expires_in"));   } catch (JSONException e) {   accessToken = null;   // 获取token失败   log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));   }   }   return accessToken;   }


  自定义菜单的创建方法

  继续在先前通用请求方法的类WeixinUtil.java中加入以下代码,用于创建自定义菜单:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 浅谈使用PHP开发微信支付的流程

    浅谈使用PHP开发微信支付的流程

    2016-02-13 15:00

  • JSONSchema那些事儿:基本概念

    JSONSchema那些事儿:基本概念

    2016-02-05 17:02

  • 基于HTML5的微信支付开发详解

    基于HTML5的微信支付开发详解

    2015-11-17 09:18

  • asp.net微信开发(开发者接入)

    asp.net微信开发(开发者接入)

    2015-11-16 19:26

网友点评
h