企业微信号发消息给指定成员

标题

@TO企业微信号发消息给指定成员C

获取access_token以及发消息给指定成员

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token,access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

我的思路是通过txt文件保存access_token

  1、创建 access_token.text文件 
  2、读取get_time 
  3、读取txt判断时间是否超过2个小时 
  4、超过则重写access_token.text文件 

获取或重写txt文件中的access_token的工具类

public class AccessTokenUtil {

//文件地址
//按自己的路径来
private static final String filePath = System.getProperty("user.dir") + "/src/cn/scada/doc/access_token.txt";`//上次获取token的时间

public static Date getTime(String str) {
    String get_time = str.substring(str.indexOf("=") + 1, str.length());
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
        date = format.parse(get_time);
    } catch (Exception c) {
        System.out.println("获取时间出错了");
    }
    return date;
}

/*
 * 读取txt文件
 */
public static String readText() {
    //文件内容变量
    String sTimg = "";//获取时间
    String str = ""; //获取token值
    try {
        String encoding = "UTF-8";
        File file = new File(filePath);
        //考虑到编码格式
        InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
        BufferedReader bufferedReader = new BufferedReader(read);
        //读取的内容
        String lineTxt = null;
        while ((lineTxt = bufferedReader.readLine()) != null) {
            sTimg = bufferedReader.readLine();
            str = lineTxt;
        }

        //上次获取token的时间
        Date getTime = getTime(sTimg);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        long m = new Date().getTime() - getTime.getTime();
        //比较当前系统时间,如果超过7200秒就替换txt文本内容
        if (m / 1000 > 7200) {
            System.out.println("超时替换txt文件");
            str = rebuildText();
        }
        read.close();
    } catch (Exception e) {
        System.out.println("读取文件内容出错");
        e.printStackTrace();
    }
    System.out.println("没有超时");
    return str;
}

//重新生成文本内容
public static String rebuildText() {
    try {
        //获取新票据
        String getToken = SendMsg.getSendMsgToken();
        //清空txt原有内容
        File file = new File(filePath);
        FileWriter fw = new FileWriter(file);
        fw.write("");

        //获取系统时间并转换为字符串
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date now_time = new Date();
        String now_str = format.format(now_time);
        //内容更新
        StringBuffer strNew = new StringBuffer();
        strNew.append("access_token=" + getToken + "\n");
        strNew.append("get_time=" + now_str);
        //重新写入文件
        fw.write(strNew.toString());
        fw.close();
        return getToken;//返回重新生成的token
    } catch (Exception e) {
        System.out.println("获取票据异常");
        ;
    }
    //返回重新生成的token
    return null;

}

获取和发送微信消息的工具类

package cn.scada.utils.weixin;

import net.sf.json.JSONObject;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.security.NoSuchAlgorithmException;

public class SendMsg {
    /*获取token*/
    public static String getSendMsgToken()  {
        String requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=自己的企业id" +
                "自己的Secret密钥" +
                "";//与AgenId(若有)对应使用

        String requestMethod = "GET";
        String outputStr = null;
        StringBuffer buffer = null;

        //创建SSLContext
        SSLContext sslContext = null;
        try {
            sslContext = SSLContext.getInstance("SSL");
            TrustManager[] tm = {new MyX509TrustManager()};
            //初始化
            sslContext.init(null, tm, new java.security.SecureRandom());

            //获取SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();
            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod(requestMethod);
            //设置当前实例使用的SSLSoctetFactory
            conn.setSSLSocketFactory(ssf);
            conn.connect();
            //往服务器端写内容
            if (null != outputStr) {
                OutputStream os = conn.getOutputStream();
                os.write(outputStr.getBytes("utf-8"));
                os.close();
            }
            //读取服务器端返回的内容
            InputStream is = conn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is, "utf-8");
            BufferedReader br = new BufferedReader(isr);
            buffer = new StringBuffer();
            String line = null;
            while ((line = br.readLine()) != null) {
                buffer.append(line);
            }
            JSONObject jsonObject = JSONObject.fromObject(buffer.toString());
            String accesstoken = jsonObject.getString("access_token");
            System.out.println("获取到的Token---------"+accesstoken);
            return accesstoken;

        } catch (Exception e) {
            e.printStackTrace();
        }
       return null;
    }


    //发送信息
    public static String SendMsgtoBody(JSONObject outputStr) throws Exception {
        String requestUrl="https://qyapi.weixin.qq.com/cgi-bin/message/send";
        String requestMethod = "POST";
        StringBuffer buffer = null;

        //创建SSLContext
        SSLContext sslContext = SSLContext.getInstance("SSL");
        TrustManager[] tm = {new MyX509TrustManager()};
        //初始化
        sslContext.init(null, tm, new java.security.SecureRandom());

        //获取SSLSocketFactory对象
        SSLSocketFactory ssf = sslContext.getSocketFactory();
        //获取txt文件里的有效token
        String token=AccessTokenUtil.readText();
        URL url = new URL(requestUrl + "?" +token);
        HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod(requestMethod);
        //设置当前实例使用的SSLSoctetFactory
        conn.setSSLSocketFactory(ssf);
        conn.connect();
        //往服务器端写内容
        if (null != outputStr) {
            OutputStream os = conn.getOutputStream();
            os.write(outputStr.toString().getBytes("utf-8"));
            os.close();
        }
        //读取服务器端返回的内容
        InputStream is = conn.getInputStream();
        InputStreamReader isr = new InputStreamReader(is, "utf-8");
        BufferedReader br = new BufferedReader(isr);
        buffer = new StringBuffer();
        String line = null;
        while ((line = br.readLine()) != null) {
            buffer.append(line);
        }
        JSONObject json1 = JSONObject.fromObject(buffer.toString());
        System.out.println(json1);
        String msg = json1 .getString("errmsg");
        return msg ;

    }

}

然后实现这个

import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class MyX509TrustManager implements X509TrustManager {
    // 检查客户端证书
    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 检查服务器端证书
    public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
    }

    // 返回受信任的X509证书数组
    public X509Certificate[] getAcceptedIssuers() {
        return null;
    }


}

最后测试

public class TestRun {
    public static void main(String[] args) throws Exception {
        JSONObject insertdata = new JSONObject();
        JSONObject content = new JSONObject();
        content.put("content", "测试22");
        insertdata.put("touser", 人员id);//这里是接收信息的人员id(多个人用 | 隔开)
        insertdata.put("msgtype", "text");
        insertdata.put("agentid", AgentId);//此处一定要与上面的自建应用AgentId对应
        insertdata.put("text", content);
        insertdata.put("safe", 0);//0为不保密
        System.out.println(insertdata);

        SendMsg.SendMsgtoBody(insertdata);
        //sendWechat("测试2","bailiu");

    }

到这里就完全ok了

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好! 要验证输入的企业微信是否存在,可以使用企业微信的API来实现。 下面是一个示例程序: ```python import requests def check_enterprise_wechat_exists(username): """检查企业微信是否存在 Args: username: 企业微信 Returns: bool: 如果企业微信存在,返回True;否则返回False """ access_token = "YOUR_ACCESS_TOKEN" # 这里需要填写你的企业微信的access_token api_url = "https://qyapi.weixin.qq.com/cgi-bin/user/get" params = { "access_token": access_token, "userid": username } response = requests.get(api_url, params=params) if response.status_code == 200: data = response.json() if "errcode" in data and data["errcode"] == 0: return True else: return False else: return False username = input("请输入企业微信:") if check_enterprise_wechat_exists(username): print("企业微信存在") else: print("企业微信不存在") ``` 需要注意的是,上述程序中的`access_token`需要你自己去申请,具体方法可以参考企业微信的API文档。 ### 回答2: 要编写一个Python程序来验证输入的企业微信是否存在于企业微信中,可以使用企业微信的API来实现。 首先,需要导入requests库来送HTTP请求,并导入json来处理返回的JSON数据。 接下来,需要获取企业微信的访问令牌(access_token),该令牌用于调用企业微信的API。可以使用企业微信提供的获取访问令牌的API,根据企业微信的配置参数生成相应的请求URL。 接着,需要送GET请求至生成的URL,并获取返回的JSON数据。可以使用requests库提供的get方法来送请求,并使用json()方法将返回的内容转化为JSON格式。 然后,可以通过返回的JSON数据,判断是否包含输入的企业微信。只需要遍历返回的JSON数据中的所有企业微信,与输入的企业微信进行比对即可。 最后,根据比对的结果,返回验证的结果。 以下是一个示例程序: ```python import requests import json def check_wechat_exists(wechat_id): # 获取访问令牌 access_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=YOUR_CORPID&corpsecret=YOUR_CORPSECRET' response = requests.get(access_token_url) access_token = response.json().get('access_token') # 验证企业微信是否存在 check_user_url = f'https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={wechat_id}' response = requests.get(check_user_url) user_info = response.json() if user_info.get('errcode') == 0: return f'企业微信 {wechat_id} 存在于企业微信中' else: return f'企业微信 {wechat_id} 不存在于企业微信中' # 输入要验证的企业微信 wechat_id = input("请输入要验证的企业微信: ") # 调用验证函数 result = check_wechat_exists(wechat_id) print(result) ``` 以上程序中的YOUR_CORPID和YOUR_CORPSECRET需替换为你的企业微信的相应配置参数。另外,还要注意输入的企业微信需要符合企业微信的规范。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值