微信拉取用户列表,分批推送消息

package com.bj58.ecat.emc.commutils;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.apache.commons.lang3.StringUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.esotericsoftware.minlog.Log;

/**
 *
 * @ClassName: TestWeixinGroupSend
 * @Description: 微信分批推送
 * @author 58
 * @date 2015-12-9
 *
 */
public class TestWeixinGroupSend {

    private static int id = 0;

    /**
     * 读取微信 Token的url
     */
    private final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";

    /**
     * 识别公众号 身份的appid,与 secret 一起作为用户身份标识
     */
    private final String APPID="xxxxxx";

    /**
     *  识别公众号 身份的secret,与appid一起作为用户身份标识
     */
    private final String SECRET="xxxxxxxx";

    Logger logger = LoggerFactory.getLogger(this.getClass());

    public static void main(String[] args) {

        String t = new TestWeixinGroupSend().getAccess_token();
        System.out.println(t);
    }

    /**
      * 获取指定的 Token
      * @Title: getAccess_token
      * @Description: TODO(获取指定的 Token)
      * @param @return    参数
      * @return String    返回类型
      * @throws
     */
    public String getAccess_token(){

        String access_token=null;
        StringBuffer action =new StringBuffer();

        //构造读取Token的url
        action.append(GET_TOKEN_URL)
              .append("&appid=")
              .append(APPID)
              .append("&secret=")
              .append(SECRET);

        Log.info(this.getClass() + " get Token Url  " + action.toString());

        URL url;
        try {
            url = new URL(action.toString());

            HttpURLConnection http = (HttpURLConnection) url.openConnection();
            http.setRequestMethod("GET");
            http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");    

            http.setDoInput(true);
            InputStream is =http.getInputStream();
            int size =is.available();
            byte[] buf=new byte[size];
            is.read(buf);
            String resp =new String(buf,"UTF-8");
            JSONObject jsonObject =JSONObject.fromObject(resp);
            Object object =jsonObject.get("access_token");
            if(object !=null){
                  access_token =String.valueOf(object);
            }
             return access_token;
        } catch (MalformedURLException e) {
            e.printStackTrace();
             return access_token;
        } catch (IOException e) {
            e.printStackTrace();
             return access_token;
        }

    } 

    /**
     *  获取 关注者列表
     * @Title: getOpenids
     * @Description: TODO(获取 关注者列表)
     * @param @return    参数
     * @return JSONArray    返回类型
     * @throws
     */
    public  JSONArray  getOpenids(String next_openid){

        JSONArray array =null;

        String urlstr ="https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID";
        urlstr =urlstr.replace("ACCESS_TOKEN", getAccess_token());

        /*
         * next_openid 上一次拉取列表的最后一个用户的OPENID,同时会作为下一次拉取的起始地址。
         */
        if(StringUtils.isBlank(next_openid)){
             urlstr =urlstr.replace("NEXT_OPENID", "");
        } else {
            urlstr =urlstr.replace("NEXT_OPENID",next_openid);
        }

        URL url;
        try {
            url = new URL(urlstr);
            HttpURLConnection http = (HttpURLConnection) url.openConnection();
            http.setRequestMethod("GET");
            http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            http.setDoInput(true);
            InputStream is =http.getInputStream();
            int size =is.available();
            byte[] buf=new byte[size];
            is.read(buf);
            String resp =new String(buf,"UTF-8");
            JSONObject jsonObject =JSONObject.fromObject(resp);
            array =jsonObject.getJSONObject("data").getJSONArray("openid");
            return array;
        } catch (MalformedURLException e) {
            e.printStackTrace();
             return array;
        } catch (IOException e) {
            e.printStackTrace();
             return array;
        }
    }

    @Test
    public void testsendTextByOpenids(){
        String urlstr ="https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=";
        String reqjson =createGroupText(getOpenids(""));

        try {

            urlstr = urlstr + getAccess_token();

            System.out.println(" urlstr ====>>>>> "+urlstr);

            URL httpclient =new URL(urlstr);
            HttpURLConnection conn =(HttpURLConnection) httpclient.openConnection();
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(2000);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.connect();
            OutputStream os= conn.getOutputStream();
            System.out.println("req:"+reqjson);
            os.write(reqjson.getBytes("UTF-8"));//传入参数
            os.flush();
            os.close();

            InputStream is =conn.getInputStream();
            int size =is.available();
            byte[] jsonBytes =new byte[size];
            is.read(jsonBytes);
            String message=new String(jsonBytes,"UTF-8");
            System.out.println("resp:"+message);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private String createGroupText(JSONArray array){
         JSONObject gjson =new JSONObject();
         gjson.put("touser", array);
         gjson.put("msgtype", "text");
         JSONObject text =new JSONObject();
         text.put("content", "hello from boxer.");
         gjson.put("text", text);
        return gjson.toString();
    }
}
时间: 2024-10-07 17:00:51

微信拉取用户列表,分批推送消息的相关文章

微信公众平台向特定用户推送消息

最近研究微信公众平台,这里整理了一下向特定用户推送消息的思路 一.首先需要将微信的openid与系统用户绑定. 在用户关注公众平台的时候,回复一个链接,要求用户绑定,可以设计如下消息进行回复,(openid最好进行加密处理,后者还需要用这个字段绑定fakeid). 欢迎关注有问必答平台,<a href='http://myweixin123.duapp.com/[email protected]'>点击此处进行用户绑定</a>! 在bind.html页面将openid与系统的use

微信批量关注公众号,推送消息软件介绍

主要功能:批量导入采集好的公众号ID,批量自动关注,关注之后自动推送设置好的消息,可实现多次循环推消息,无需人工看守,手机自动操作.有问题联系扣402090644

Android 高仿微信实时聊天 基于百度云推送

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38799363 ,本文出自:[张鸿洋的博客] 一直在仿微信界面,今天终于有幸利用百度云推送仿一仿微信聊天了~~~ 首先特别感谢:weidi1989分享的Android之基于百度云推送IM ,大家可以直接下载:省了很多事哈,本例中也使用了weidi的部分代码,凡是@author way的就是weidi1989的代码~~ 1.效果图 核心功能也就上面的两张图了~~~我拿着手机和模拟器

java-给微信推送消息 利用企业微信

目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:CORPID 企业号唯一标志符号. 位置:点击首页企业名称,企业资料中有key:CorpID 2:CORPSECRET: 需要创建单独等应用.具体步骤,按照提示一步一步来即可.需关注2个参数 Secret 和 AgentId(用于区分给哪个应用推送消息) 3:发送消息准备工作: 关注自己的企业号.(需要先

微信推送消息实战

# 沙箱环境登录地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login # 微信网页授权地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 第一步:获取认证信息.测试模板.等 第二步:后端代码: 1.获取二维码网址: def bind_qcode(request): """ 生成二维码 :param requ

如何在微信服务号每天推送消息?

公众号粉丝48小时内不断推送信息,如何设置,我看别人一天给我发了十几次信息 #微号帮平台48小时信息推送,实现微信服务号每天推送消息 原文地址:https://blog.51cto.com/14397880/2418160

微星极光公众号激活宝——微信公众号48小时内无限制定时推送消息

前言 凡是运营过公众号的人都知道,微信公众号分为订阅号和服务号,订阅号一天群发一次,服务号一月才四次,对于许多运营的公众号来说这次数远远不够用,最近发现微星极光推出了一个新功能:公众号激活宝,通过微信内部接口实现48小时内无限制向用户推送消息的功能 Q1:48小时信息推送可以实现无限制向用户推送消息吗? 答:可以,但是只能对48小时内与公众号互动的粉丝群发信息,这里的互动是指对话,扫码,关注,点菜单,只要满足其中一个动作均算作互动. Q2:48小时信息推送的内容有哪些? 答:没有数量限制地推送文

免注册公众号的三种微信推送消息服务的C#代码实现

有时候我们需要监控一些网络上的变化,但是每次去刷新网页却又很麻烦,而且大部分刷新的时候网页并没有更新.那么有没有一个工具,可以监控网页变化,并将变化的结果推送到手机微信上呢? 这里有很多应用场景,比如前一段时间很火的工具来监控JD.TB等口罩是否有货的状态.还有就是刷票.抢课.监听网页便也变化.爬虫等等. 我们可以在后台写一个监控程序,一旦口罩有货了,就立马推送消息到微信上. 有人会说这样的方式,微信公众号可以实现啊,那么为什么要你介绍? 不不不,注册微信公众号后,还要阅读官方的各种文档,反复调

点击推送消息跳转处理(iOS)

当用户点击收到的推送消息时候,我希望打开APP,并且跳转到对应的界面,这就需要在AppDelegate里面对代理方法进行处理. 当用户点击推送消息打开APP的时候会调用 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions launchOptions中会有推送消息的userInfo信息,此时我们可以通过 NSDictionary* rem