Browse Source

微信公众号创建菜单

chenyongxing 8 years ago
parent
commit
d810aeb977

+ 8 - 16
svr/svr-base/src/main/java/com/yihu/jw/wx/controller/WxMenuController.java

@ -141,27 +141,19 @@ public class WxMenuController extends EnvelopRestController {
    @ApiOperation(value = "创建微信公众号菜单", notes = "创建微信公众号菜单")
    @RequestMapping(value = "/menu/create" ,method = RequestMethod.GET)
    @ResponseBody
    public String createWechatMenu(
    public Envelop createWechatMenu(
            @ApiParam(name = "wechatCode", value = "", defaultValue = "")
            @RequestParam(value = "wechatCode", required = true)String wechatCode){
        try{
            String params ="";
            wxMenuService.createWechatMenu(wechatCode);
            //String url = " https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + getAccessToken();
            //
            //// 请求微信接口创建菜单
            //String jsonStr = HttpUtil.sendPost(url, params);
            //JSONObject result = new JSONObject(jsonStr);
            //if(result != null && result.get("errcode").toString().equals("0") && result.getString("errmsg").equals("ok")){
            //    return write(200,"创建成功!","data",jsonStr);
            //}else{
            //    return write(-1,"创建失败!","data",jsonStr);
            //}
            return null;
            JSONObject result = wxMenuService.createWechatMenu(wechatCode);
            if(result != null && result.get("errcode").toString().equals("0") && result.getString("errmsg").equals("ok")){
                return Envelop.getSuccess("创建成功",result );
            }else{
                return Envelop.getSuccess("创建失败",result );
            }
        }catch (Exception e){
            //return error(-1,"创建失败");
            return null;
            return Envelop.getSuccess("创建成功",e );
        }
    }

+ 3 - 0
svr/svr-base/src/main/java/com/yihu/jw/wx/dao/WxMenuDao.java

@ -17,4 +17,7 @@ public interface WxMenuDao  extends PagingAndSortingRepository<WxMenu, Long>, Jp
    @Query("from WxMenu m where m.wechatCode =?1 and m.status = 1 order  by m.supMenucode ,m.sort")
    List<WxMenu> findByWechatCode(String wechatCode);
    @Query("from WxMenu m where m.wechatCode = ?1 and  m.supMenucode= ?2 and m.status =1 order by m.sort")
    List<WxMenu> findChildMenus(String wechatCode, String sup_menucode);
}

+ 64 - 31
svr/svr-base/src/main/java/com/yihu/jw/wx/service/WxMenuService.java

@ -4,8 +4,11 @@ import com.yihu.jw.mysql.query.BaseJpaService;
import com.yihu.jw.restmodel.common.CommonContants;
import com.yihu.jw.restmodel.exception.ApiException;
import com.yihu.jw.restmodel.wx.WxContants;
import com.yihu.jw.util.HttpUtil;
import com.yihu.jw.wx.dao.WxMenuDao;
import com.yihu.jw.wx.model.WxAccessToken;
import com.yihu.jw.wx.model.WxMenu;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@ -23,6 +26,9 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
    @Autowired
    private WxMenuDao wxMenuDao;
    @Autowired
    private WxAccessTokenService wxAccessTokenService;
    public WxMenu createWxMenu(WxMenu wxMenu) {
        if (StringUtils.isEmpty(wxMenu.getWechatCode())) {
            throw new ApiException(WxContants.WxMenu.message_fail_wechatCode_is_null, CommonContants.common_error_params_code);
@ -65,56 +71,83 @@ public class WxMenuService extends BaseJpaService<WxMenu, WxMenuDao> {
        return wxMenuDao.findByWechatCode(wechatCode);
    }
    public void createWechatMenu(String wechatCode) {
    public JSONObject createWechatMenu(String wechatCode) {
        //首先根据wechatCode获取菜单,然后封装成json字符串
        List<WxMenu> menus = wxMenuDao.findByWechatCode(wechatCode);
        getMenuToString(menus,wechatCode);
        String menuJsonString = getMenuToString(menus, wechatCode);
        WxAccessToken wxAccessTokenByCode = wxAccessTokenService.getWxAccessTokenByCode(wechatCode);
        String token = wxAccessTokenByCode.getAccessToken();
        // 请求微信接口创建菜单
        String url = " https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" + token;
        String jsonStr = HttpUtil.sendPost(url, menuJsonString);
        JSONObject result = new JSONObject(jsonStr);
        return result;
    }
    public String getMenuToString(List<WxMenu> menus,String wechatCode){
        String menuJsonStr = "";
        List<WxMenu> parentMenus = new ArrayList<WxMenu>();//存储父菜单
        List<WxMenu> childMenus = new ArrayList<WxMenu>();//存储二级菜单/子菜单
        if(menus!=null){
            menuJsonStr = "{\"button\":[{\"";
            menuJsonStr = "{\"button\":[{";
            for(WxMenu wxMenu:menus){
                if(StringUtils.isEmpty(wxMenu.getSupMenucode())){//说明是父菜单
                    parentMenus.add(wxMenu);
                }else{
                    childMenus.add(wxMenu);
                }
            }
        }
        int j = 0;
        for(WxMenu menu:parentMenus){//遍历父菜单
            menuJsonStr += "name\":\""+ menu.getName()+"\"";
            if(!StringUtils.isEmpty(menu.getType())){
                menuJsonStr += ",\"type\":\"" + menu.getType()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getKey())){
                menuJsonStr += ",\"key\":\"" + menu.getKey()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getType())){
                menuJsonStr += ",\"type\":\"" + menu.getType()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getUrl())){
                menuJsonStr += ",\"url\":\"" + menu.getUrl()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getMediaId())){
                menuJsonStr += ",\"media_id\":\"" + menu.getMediaId()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getAppid())){
                menuJsonStr += ",\"appid\":\"" + menu.getAppid()+"\"";
            }
            if(!StringUtils.isEmpty(menu.getPagepath())){
                menuJsonStr += ",\"pagepath\":\"" + menu.getPagepath()+"\"";
            if(j==0){
                j++;
            }else{
                menuJsonStr += ",{";
            }
            menuJsonStr = getString(menuJsonStr, menu);
            //查找是否有子菜单
            List<WxMenu> childMenus = findChildMenus(wechatCode, menu.getCode());
            if(childMenus!=null){
                int i =0;
                menuJsonStr += ",\"sub_button\":[{";
                for(WxMenu childMenu:childMenus){
                    if(i==0){
                        i++;
                    }else{
                        menuJsonStr += ",{";
                    }
                    menuJsonStr = getString(menuJsonStr, childMenu);
                    menuJsonStr += "}";
                }
                menuJsonStr += "]}}";
            }
        }
        menuJsonStr += "}";
        return menuJsonStr;
    }
    private String getString(String menuJsonStr, WxMenu menu) {
        menuJsonStr += "\"name\":\""+ menu.getName()+"\"";
        if(!StringUtils.isEmpty(menu.getType())){
            menuJsonStr += ",\"type\":\"" + menu.getType()+"\"";
        }
        if(!StringUtils.isEmpty(menu.getKey())){
            menuJsonStr += ",\"key\":\"" + menu.getKey()+"\"";
        }
        return null;
        if(!StringUtils.isEmpty(menu.getUrl())){
            menuJsonStr += ",\"url\":\"" + menu.getUrl()+"\"";
        }
        if(!StringUtils.isEmpty(menu.getMediaId())){
            menuJsonStr += ",\"media_id\":\"" + menu.getMediaId()+"\"";
        }
        if(!StringUtils.isEmpty(menu.getAppid())){
            menuJsonStr += ",\"appid\":\"" + menu.getAppid()+"\"";
        }
        if(!StringUtils.isEmpty(menu.getPagepath())){
            menuJsonStr += ",\"pagepath\":\"" + menu.getPagepath()+"\"";
        }
        return menuJsonStr;
    }
    //public List<WxMenu> findChildMenus(String )
    public List<WxMenu> findChildMenus(String wechatCode,String sup_menucode ){
        return wxMenuDao.findChildMenus(wechatCode,sup_menucode);
    }
}