Groovy实现微信公众号消息推动

Groovy实现微信公众号的消息推送,推送给用户

请求方法:

 /**
     * POST form请求
     * @param params body参数
     */
    static RestResponse post(url, params) {
        def rest = new RestBuilder(), rsp, convertParams = new LinkedMultiValueMap();
        try {
            params?.each { key, value ->
                convertParams.add(key, value as String)
            }
            rsp = rest.post(url) {
                contentType('application/x-www-form-urlencoded')
                body(convertParams)
            }
        } catch (e) {
            e.printStackTrace()
        }
        return (RestResponse) rsp
    }


工具类


class WechatUtils {


    static def APPID = "";
    static def APPSECRET = "";
    static def token = [:];

    static {
        println("初始化token_初始化AppId_初始化AppSecret"+new Date())
        APPID = SystemConfigRead.weixinAppId();
        APPSECRET = SystemConfigRead.weixinSecretId();
        token.put("createTokenDate", 0);//7200000
        token.put("token", getWechatToken())
    }

    /**
     *
     * @param touser 接收者openid  不为空
     * @param templateId 模板ID  不为空
     * @param url 模板跳转链接 不需设置为null
     * @param miniprogram 跳小程序所需数据,不需跳小程序参数设置为null
     * "miniprogram":{"appid":"xiaochengxuappid12345","pagepath":"index?foo=bar"},
     * @param data 模板数据  不为空
     * data 数据格式: def  data =[name:[value:'你的内容'],remark:[value: '你的内容']];
     * @return 是否发送成功
     */
    static boolean sendingMessagesToUserByOpenId(touser, templateId, url, miniprogram, data) {

        if (touser != null && templateId != null && data != null) {
            def messagesMap = ['touser': touser, 'template_id': templateId, 'data': data];
                if(url != null){
                    messagesMap.put('url',url);
                }else if(miniprogram != null){
                    messagesMap.put('miniprogram', miniprogram);
                }
            def URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getWechatToken();
            def result = RestBuilderUtils.postJSON(URL, messagesMap).json.getAt("errcode");

            if (result == 0) {
                return true;
            }
        }
        return false;

    }

    /**
     * 获取系统中当前token
     * @return
     */
    static String getWechatToken() {
        def createTokenDate = token.get("createTokenDate");
        def newDate = System.currentTimeMillis();
        if (newDate > createTokenDate) {
            token.put("createTokenDate", newDate + 7000000);//7200000
            token.put("token", getNewWechatToken());
        }
        return token.get("token");
    }

    /**
     * 从服务器获取新的token 不更新原token
     * @return
     */
    static String getNewWechatToken() {
        def token = RestBuilderUtils.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APPID + "&secret=" + APPSECRET).json.getAt("access_token");
        if (token == null) {
            println("获取Token失败")
        }
        return token;
    }
}



阅读更多
文章标签: Groovy Grails
个人分类: Groovy Grails
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭