Bootstrap

Java代码实现向企业微信发送消息

1.向企业微信发送消息

        让用户订阅企业微信,从而用户的微信能收到发送的消息

1.1 注册企业微信

企业微信icon-default.png?t=N7T8https://work.weixin.qq.com/wework_admin/register_wx?from=myhome

1.2 创建企业微信应用

1.3 创建Java项目(我用的jdk1.8)

1.3.1 导入依赖

<!-- 企业微信配置依赖-->
<dependency>
        <groupId>com.github.binarywang</groupId>
        <artifactId>weixin-java-cp</artifactId>
        <version>4.0.8.B</version>
</dependency>
<!-- redis依赖-->
<dependency>
        <groupId>redis.clients</groupId>
        <artifactId>jedis</artifactId>
        <version>3.6.0</version>
</dependency>
<!-- fastjson-->
<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.76</version>
</dependency>

1.3.2 创建配置类

package com.linkwx.company;

import com.alibaba.fastjson.JSON;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.WxCpService;
import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
import org.apache.commons.lang3.StringUtils;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

/**
 * 推送企业微信配置
 * */
public class WxConfig {
    private static Integer agentId=应用id;
    private static String secret="应用密钥";
    private static String corpId="企业微信id";
    // 配置企业微信服务
    public static WxCpService getWxCpService() {
        WxCpService wxCpService=new WxCpServiceImpl();
        WxCpDefaultConfigImpl config =new WxCpDefaultConfigImpl();
        config.setAgentId(agentId);
        config.setCorpSecret(secret);
        config.setCorpId(corpId);
        resetTokenAndJsApi(wxCpService,config);
        return wxCpService;
    }
// 重置token
    public static void resetTokenAndJsApi(WxCpService wxCpService,WxCpDefaultConfigImpl wxCpDefaultConfig) {
    // 配置redis
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        jedisPoolConfig.setMaxIdle(8);
        jedisPoolConfig.setMaxTotal(18);
        // redis启动后,默认启动的是6379端口,没有密码可以不要最后的参数
        Jedis jedis =new JedisPool(jedisPoolConfig,"localhost",6379,5000,"111111").getResource();

        wxCpService.setWxCpConfigStorage(wxCpDefaultConfig);
        String wxAccessToken = "wx"+agentId;
        String json=jedis.get(wxAccessToken);
        if(!StringUtils.isEmpty(json)){
            wxCpDefaultConfig = JSON.parseObject(json,WxCpDefaultConfigImpl.class);
        }
        if(wxCpDefaultConfig.isAccessTokenExpired()){
            try {
                String accessToken = null;
                accessToken =wxCpService.getAccessToken(false);
                wxCpDefaultConfig.setAccessToken(accessToken);
            }catch (WxErrorException e){
                e.printStackTrace();
            }
        }
        if(wxCpDefaultConfig.isJsapiTicketExpired()){
            String jsApi = null;
            try {
                jsApi = wxCpService.getJsapiTicket();
                wxCpDefaultConfig.setJsapiTicket(jsApi);
            } catch (WxErrorException e) {
                e.printStackTrace();
            }
        }
        jedis.set(wxAccessToken,JSON.toJSONString(wxCpDefaultConfig));
        jedis.close();
    }
}

 

1.3.3 创建发送消息的方法调用企业微信接口

package com.linkwx.company;

import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.cp.api.impl.WxCpMessageServiceImpl;
import me.chanjar.weixin.cp.bean.message.WxCpMessage;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 发送消息功能代码
 * */
public class sendMessage {
    public static void SendToWx(String user, String title, String message, String url)throws WxErrorException {
        //微信消息对象
        WxCpMessageServiceImpl wxCpMessageService = new WxCpMessageServiceImpl(WxConfig.getWxCpService());
        WxCpMessage wxCpMessage = new WxCpMessage();
        wxCpMessage.setSafe("0");
        wxCpMessage.setMsgType("textcard");

        //发送给用户:userid
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String time = format.format(new Date());
        //设置发送用户
        wxCpMessage.setToUser(user);
        //设置发送标题
        wxCpMessage.setTitle(title);
        //设置发送内容
        wxCpMessage.setDescription(message);
        //设置跳转url
        wxCpMessage.setUrl(url);
        wxCpMessage.setBtnTxt("api");
        wxCpMessageService.send(wxCpMessage);
    }

}

1.4 总结

        这个方法需要你服务器的ip是公网ip,然后需要在企业微信添加信任ip

 

;