java微信公众号URL访问时替换关键字所使用的通用方法

这个工具类是为了方便近期快速开发微信公众号而写的,可能URL及关键字量大的话要拆成多个类来存放了。不过量少的话可以用这个方法:

public class WxCommonInfo {
    /** put() remove() synchronized (this)*/
    public static volatile Map<String,Object> noticerUserNameHashMap = new ConcurrentHashMap<String,Object>();

    public final static String APPID = "APPID";
    public final static String APPSECRET = "APPSECRET";
    public final static String ACCESS_TOKEN = "ACCESS_TOKEN";
    public final static String REDIRECT_URI = "REDIRECT_URI";
    public final static String SCOPE = "SCOPE";
    public final static String STATE = "STATE";
    public final static String CODE = "CODE";
    public final static String OPENID = "OPENID";
    public final static String NEXT_OPENID = "NEXT_OPENID";
    /**刷新access_token*/
    public static String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
    /**获取access_token的第二个地址(不确定)*/
    private static String ACCESS_TOKEN_URL_2 = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code";
    /**得到ticket*/
    public static String TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
    /**得到code*/
    public static String CODE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";
    /**获取生成用户关注二维码所需二维码ticket*/
    private static String LS_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=ACCESS_TOKEN";
    /**得到openid*/
    public static String OPEN_ID_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code";
    /**获取用户信息*/
    public static String USER_INFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
    /**判断用户是否关注公众号*/
    public static String USER_FOCUS_URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
    /**菜单创建(POST) 限100(次/天)*/
    public static String MENU_CREATE_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
    /**客服接口地址*/
    public static String SEND_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
    /**批量获取用户基本信息,最多支持一次拉取100条。(POST)*/
    public static String USER_INFO_LIST_URL = "https://api.weixin.qq.com/cgi-bin/user/info/batchget?access_token=ACCESS_TOKEN";
    /**
     * 获取帐号的关注者列表,next_openid:第一个拉取的OPENID,不填默认从头开始拉取
     * 一次拉取调用最多拉取10000个关注者的OpenID
     * 返回数据里:next_openid:拉取列表的最后一个用户的OPENID
     */
    public static String USER_INFO_NEXT_URL = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
    /**微信公众号主动发送的url*/
    public static String CUSTOM_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN";
    /**模板消息: 设置所属行业 POST (有参数)*/
    public static String SET_INDUSTRY_URL = "https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=ACCESS_TOKEN";
    /**获取设置的行业信息 GET*/
    public static String GET_INDUSTRY_URL = "https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=ACCESS_TOKEN";
    /**获得模板ID POST (有参数)*/
    public static String ADD_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN";
    /**获取模板列表 GET*/
    public static String GET_ALL_PRIVATE_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=ACCESS_TOKEN";
    /**删除模板 POST*/
    public static String DEL_PRIVATE_TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=ACCESS_TOKEN";
    /**发送模板消息 POST (有参数 json样式)*/
    public static String TEMPLATE_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
    /**根据OpenID列表群发 POST(有参数,json样式)*/
    public static String MASS_SEND_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN";



    public static String transformURL(String targetUrl,Map<String,String> maps) throws IllegalAccessException {
        System.out.println("开始转换URL里面的变量");
        Class<?> clz = WxCommonInfo.class;
        Field[] fields = clz.getDeclaredFields();
        if(maps != null && maps.size() > 0){
            for (Map.Entry<String, String> entry : maps.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                for (int i = 0; i < fields.length; i++) {
                    //判断是不是final类型
                    if (Modifier.isFinal(fields[i].getModifiers())) {
//                        fields[i].setAccessible(true);//如果成员变量是private的,则需要设置accessible为true
                        //获取变量的值
                        Object object = fields[i].get(clz);
                        //判断map里面的值是否有与final值相匹配的
                        if(key.equals(object.toString())){
                            if(targetUrl.contains(object.toString())){
                                targetUrl = targetUrl.replace(object.toString(),value);
                            }else {
                                return null;
                            }
                        }
                    }
                }
            }
            return targetUrl;
        }else {
            if(targetUrl != null){
                return targetUrl;
            }else {
                return null;
            }
        }
    }
}

然后使用方式:

 String ticketUrl = WxCommonInfo.TICKET_URL;
 Map<String,String> maps = new HashMap<String, String> ();
 maps.put(WxCommonInfo.ACCESS_TOKEN,token);
 try {
     ticketUrl = WxCommonInfo.transformURL(ticketUrl,maps);
 } catch (IllegalAccessException e) {
     ticketUrl = null;
     logger.error(e.getMessage());
     e.printStackTrace();
 }

用这个方法就不用再单独一个个的进行URL替换了,都走这一个方法就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值