微信公众平台开发之Java实现群发消息

首先贴上官方文档:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432
私以为这份文档写的还是很不错的,在开发的时候没有给我造成多大的困扰,比微信支付的文档好的不要太多。当然也可能是因为我调用的功能太少,没有碰上坑。
接下来进入正题。


这里会分步介绍代码所实现的功能,在文章最后会附上完整的类以及用到的其他类。

1. 获取AccessToken

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

HttpConnection conn = new HttpConnection();
            StringBuilder sb = new StringBuilder("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential");
            sb.append("&appid="+PropertiesUtil.getInstance().getPropMap().get("wx.AppKey"));
            sb.append("&secret="+PropertiesUtil.getInstance().getPropMap().get("wx.AppSecret"));
            String result = conn.get(sb.toString());
            System.out.println(result);
            JSONObject obj = new JSONObject(result);
            String accessToken = obj.getString("access_token");
            Instance.ACCESS_TOKEN = accessToken;
            System.out.println(accessToken);

这里用到了HttpConnection类和PropertiesUtil,在文章最后会贴出该类的完整代码

2. 群发消息

String resp = "";//响应
            String reqUrl = "https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token="+Instance.ACCESS_TOKEN;
            try {
                // 构造httprequest设置
                HttpClient client = new HttpClient();
                PostMethod request = new PostMethod(reqUrl);
                // 添加request headers
                request.addRequestHeader("Content-type", "application/json");
                request.addRequestHeader("Accept", "application/json");

                Map<String, Object> param = new HashMap<String, Object>();
                param.put("touser", openId);
                param.put("msgtype", "text");
                Map<String, Object> content =  new HashMap<String, Object>();
                content.put("content", text);
                param.put("text",content);

                String json = new Gson().toJson(param);
                request.setRequestEntity(new ByteArrayRequestEntity(json.getBytes("UTF-8")));  

                client.executeMethod(request);  
                resp = request.getResponseBodyAsString();  
                System.out.println(resp);
            } catch (Exception e) {
                System.out.println("发送POST请求出现异常!" + e);
                e.printStackTrace();
            } 

该方法参数中的openId为用户在微信的唯一标识,text为需要发送的消息内容。
需要注意的两点,
1.群发接口的openId数组必须包含2个及以上,如果只传一个openid会发送失败,这是我所不能理解的。
2.如果返回code为48003,这个返回码在官方文档中没有说明,出现的原因可能是你的微信公众号没有开通群发功能,需要登录微信公众号,在首页点击“新建群发”按钮,同意之后就可以了。


最后贴上完整的代码,记得把package替换掉:

package com.diecolor.wxpay;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.ByteArrayRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.json.JSONObject;

import com.diecolor.util.HttpConnection;
import com.diecolor.util.PropertiesUtil;
import com.google.gson.Gson;

public class MessageUtil {
   

    /**
     * 内部类
     * 实例化当前对象
     *
     */
    private static class Instance{
   
        private static final MessageUtil mu = new MessageUtil();
        private static String ACCESS_TOKEN = 
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值