微信公众号获取关注者列表以及消息推送

一、微信公众号获取token

/*微信提供获取access_token接口地址*/
    private static final String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";

/*第三方用户唯一凭证*/
    private static final String APPID = "wx644f********";
    /*第三方用户唯一凭证密钥,即appsecret*/
    private static final String SECRET = "342f9a33a**********";


public String getToken() {
        String tokenGetUrl = access_token_url;//微信提供获取access_token接口地址
        String appid = APPID;
        String secret = SECRET;
        JSONObject tokenJson = new JSONObject();
        if (StringUtils.isNotBlank(appid) && StringUtils.isNotBlank(secret)) {
            tokenGetUrl += "&appid=" + appid + "&secret=" + secret;
            tokenJson = new WeixinUtil().getUrlResponse(tokenGetUrl);
            try {
                return (String) tokenJson.get("access_token");
            } catch (JSONException e) {
                return null;
            }
        } else {
            return null;
        }
    }

二、获取微信公众号关注用户

官方接口文档:https://developers.weixin.qq.com/doc/offiaccount/User_Management/Getting_a_User_List.html
/*获取微信公众号关注用户接口地址*/
    private static final String get_userInfo_url = "https://api.weixin.qq.com/cgi-bin/user/get";


//传入获取的access_token获取微信关注用户列表


public Set<String> getUsers(String access_token) {
        String usersGetUrl = get_userInfo_url;
        usersGetUrl += "?access_token=" + access_token;
        org.json.JSONObject data = new WeixinUtil().getUrlResponse(usersGetUrl);
        System.out.println("~~~~~用户信息:" + data.toString());
        Set<String> openIds = new HashSet<String>();
        Integer total = 0, count = 0;
        try {
            total = (Integer) data.get("total");
            count = (Integer) data.get("count");
            //总关注用户数超过默认一万
            if (count < total) {
                openIds.addAll(getUsers(openIds, usersGetUrl, access_token, (String) data.get("next_openid")));
            } else {
                //有关注者 json才有data参数
                if (count > 0) {
                    org.json.JSONObject openIdData = (org.json.JSONObject) data.get("data");
                    JSONArray openIdArray = (JSONArray) openIdData.get("openid");
                    for (int i = 0; i < openIdArray.length(); i++) {
                        openIds.add((String) openIdArray.get(i));
                    }
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return openIds;
    }

获取微信关注用户具体信息包括openid和unionid

 /**
     * 获取用户信息
     * @param access_token  微信公众号token
     * @param useropenid 用户openid
     * @return
     */
public Record finduserInfo(String access_token, String useropenid) {
        String usersfindUrl = find_userInfo_url;
        usersfindUrl += "?access_token=" + access_token + "&openid=" + useropenid;
        JSONObject data = new WeixinUtil().getUrlResponse(usersfindUrl);
        System.out.println("用户信息====" + data);
        return data;
        }

 

WeixinUtil()类
package com.ddm.system.qywx;
import io.swagger.annotations.Api;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import org.json.JSONObject;

import org.springframework.context.annotation.Scope;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.URI;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;


@RestController
@RequestMapping(value = "/WeixinUtil")
@Api(value = "WeixinUtil.*")
@Scope("prototype")//多例模式
public class WeixinUtil {



    public JSONObject getUrlResponse(String url) {
        CharsetHandler handler = new CharsetHandler("UTF-8");
        try {
            HttpGet httpget = new HttpGet(new URI(url));
            HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
            //HttpClient
            CloseableHttpClient client = httpClientBuilder.build();
            client = (CloseableHttpClient) wrapClient(client);
            return new JSONObject(client.execute(httpget, handler));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public static HttpClient wrapClient(HttpClient base) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLSv1");
            X509TrustManager tm = new X509TrustManager() {
                public void checkClientTrusted(X509Certificate[] xcs,
                                               String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs,
                                               String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(ctx, new String[]{"TLSv1"}, null,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
            return httpclient;

        } catch (Exception ex) {
            return null;
        }
    }


    public class CharsetHandler implements ResponseHandler<String> {
        private String charset;

        public CharsetHandler(String charset) {
            this.charset = charset;
        }

        public String handleResponse(HttpResponse response)
                throws ClientProtocolException, IOException {
            StatusLine statusLine = response.getStatusLine();
            if (statusLine.getStatusCode() >= 300) {
                throw new HttpResponseException(statusLine.getStatusCode(),
                        statusLine.getReasonPhrase());
            }
            HttpEntity entity = response.getEntity();
            if (entity != null) {
                if (!StringUtils.isBlank(charset)) {
                    return EntityUtils.toString(entity, charset);
                } else {
                    return EntityUtils.toString(entity);
                }
            } else {
                return null;
            }
        }

    }
}


三、消息推送

 /**
     * 客户订单信息推送给用户
     * @param unionid 用户unionid
     * @return
     */
    @PostMapping("/OrderTempMsg")
    public boolean OrderTempMsg(Object unionid) {
            String openId = "o1NS86Qshm94aftSCew******"; //用户openid
            String templateId = "WCOPQyRW_9QolNU********";//消息模板id
            Record json = new Record();
            json.set("first", new Record().set("value","您已成功下达订单,商家将在5分钟内受理订单"));
            json.set("keyword1", new Record().set("value","20160822161230")); //订单编号
            json.set("keyword2", new Record().set("value","2023/04/04 15:30:25")); //下单时间
            json.set("remark", new Record().set("value","如有疑问,请联系点送客服 5008654228......"));
            return sendTempMsg(openId, templateId, json);
    }


//针对用户openid发送消息推送
public boolean sendTempMsg(String openId, String template_id, Record data) {
        Record json = new Record();
        Record json1 = new Record();
        json1.set("appid","123******");
        json1.set("pagepath","pages/login/login");//消息模板跳转微信小程序(需要小程序与公众号进行关联)
        json.set("touser", openId);
        json.set("template_id", template_id);
        json.set("url", "http://weixin.qq.com/download");
        json.set("miniprogram", json1);
        json.set("data", data);
        String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getAccessToken();
        String jsonStr = HtmlTools.postJSON(url, json.toJson());
        JSONObject jsonObject = JsonTools.strToJson(jsonStr);
        if (jsonObject.get("errcode") != null && jsonObject.getInteger("errcode") == 0) {
            return true;
        } else {
            logger.info("weixin sendTempMsg 错误:" + jsonObject);
            return false;
        }
    }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
公众号源码_一物一码吸粉红包V3.2.2全开源 1.你可以把这些批量生成的O2O二维码红包保存起来,然后让平面设计师制作海报放在X展台或者做微信红包墙,然后用纸或者其他东西把二维码盖住。获胜者可以随意打开一个二维码,扫描二维码就可以收到红包,类似于扔金蛋的形式。 2.你可以把这些批量生成的O2O二维码红包打印出来,然后用剪刀或刀片分开,然后去超市买一些红包,每个红包里放一个二维码,然后当场发放红包,提示大家打开红包,扫描二维码就可以收到微信填现金的红包,类似于打开红包的形式,只是把现金变成二维码。 3.如果你的实体店需要推送传单,传统的做法是让人们在交通拥挤的街道上分发传单,然后很多人看都不看就丢了,无法跟踪查看传单的顾客。你可以把这些O2O二维码红包贴在当地政府推的传单上,每张传单都能收到红包。这种宣传更有吸引力,每个看传单的人都成了你实体店的粉丝,可以跟踪客户,通过微信官方账号向客户推送信息。 4.在搞活动或者开心活动的时候,有发红包的传统,把实体的填现金红包变成O2O二维码红包,钱也给了对方,但是每个收到你红包的人都成了你的粉丝。 5.如果你是传统企业的运营人员,可以生成一些永久的二维码粘贴到你的产品上。比如你是做饮料生意的,可以贴个红包二维码,顾客买了饮料就可以收到红包,成为你的粉丝。这样的营销产品也更有噱头,更有创意。 6.在从事直播活动时,给观众一个二维码红包,所有观众都会关注你的微信官方账号,成为你的精准粉丝。
食品企业 微信公众号运营与推广方案 调研报告 xxxxxxx食品有限公司 xx年xx月xx日 微信营销定位 随着手机的普及,移动互联网的使用人群逐渐多过了互联网用户,与电脑不同的是, 手机上网具有移动化、碎片化、个性化的特点,只要有空,用户随时都可以拿出手机上 网浏览信息。面对庞大的用户群体,微信公众平台给企业用户带来了一条新的商业营销 途径。 在微信公众平台上,企业要做的是主动分享相关内容,寻找那些对内容或活动有兴趣 的用户,让他们成为企业的粉丝。该方式是利用互联网的延伸与放大,使企业推送的内 容或活动得到扩散,提升企业和品牌的影响力。 XXXX旨在销售绿色、健康、安全的产品,微信公众平台无疑就是为消费者提供了最佳 桥梁。XXXX的微信营销公众号定位于安全食品专家,并提供企业实时新闻、绿色食品安 全知识、健康美食介绍、果蔬美容养颜知识、健康养生等与产品相关的服务内容,来吸 引粉丝持续关注。建立微信商城,可在推送的内容中添加产品销售链接进行销售,例如 在介绍豆制品的文章中添加上微店的销售链接,引导粉丝进入微店下订单购买产品。 公众号采用自媒体与电商相结合的运营模式。在传播品牌的同时建立消费者圈子,提 高消费者对XXXX食品的认可度,以口碑带动微信电商新渠道的拓展,从而达到既卖得出 产品,客户关系又较为稳固的效果。 微信公众平台与消费者之间的沟通将更加便捷,不存在任何障碍,对于客户关系维护 和及时获知客户反馈信息的作用不言而喻,能够让企业与消费者之间建立信任基础,促 发重复性消费和对品牌的高度忠诚。 微信推送软文内容策划 我们可以根据产品分类将推送给消费者的信息划分为实时新闻、安全食品、健康美食 、果蔬养身等几个部分。每条图文内容均包括封面图片、自定义标题、文章插图、购买 链接。 其中单条图文信息由产品介绍、营养功效、烹饪小贴士等几块构成,文内插入产品实 物图、烹饪效果图、生产基地介绍图等。每周可选插推一条产地文化的信息,节假日插 推销售较火商品(如豆制品、咸鸭蛋等)、园区礼盒产品的信息及优惠活动的信息等。 根据内容的不同,以后微信内容的形式会更多样化,不但有文字、图片,还可插入语 音、歌曲、视频等形式,让公众号内容更丰富一些。 其实,公众号软文内容的推送有很多类型,同时可以根据我们企业要求,产品特性和 所要表达的内容,以及目标群体等,来确定推送软文的类型,例如下面几种类型,我们 可以参考运用: 广告宣传性软文 这类的内容目的是宣传推广其中含有品牌、产品或服务信息,让粉丝能够轻易的接受 ,而不感觉厌烦,这就得准确定位,保证广告作用,便于宣传。这类软文有较强的宣传 性,对企业品牌、企业形象的树立,产品和服务销量的扩大,消费者购买欲望的诱导有 很大的促进作用。 新闻转述性软文 这类软文乍一看像是新闻,或将新闻作为写作背景或主题,大大提高文章的时效性、 权威性,从而吸引关心时政的读者关注或阅读,这类软文是要抓好重点,做好过度,注 意及时性,超过期限就没有价值了。 观点表达性软文 这种软文的特点就是观点提出要合理,直接、明确,一般开头就提出,基本的方式就 是开门见山,然后阐明观点,只需要将观点表达清楚,明确提出,进一步阐释,并让读 者看了有所收获,才能使读者再次分享做到二次转发。 4、经验分享性软文 这种软文也是非常常见的一种,就是写作者站在权威专家或者普通读者的角度,想读 者之所想,做读者之所需,有时需要以读者的口吻来撰写。 5、故事讲述性软文 讲故事是当今微信营销领域较火的一种形式,通过传播一个有始有终、有情感、有事 实的故事,拉近与读者之间的心理距离,在此基础上再来推广品牌或产品就会变得更有 人情味。能给用户一个良好的印象,增加产品吸引力。 情感诱导性软文 这种软文向读者展示的不仅是一条信息、一个观点或一则故事,而是在向读者传达一 种能够触动他们心灵的情感。产品营销推广时,讲究以人为本,攻心至上,在某种程度 上突出了广告中的情感因素,以情感人、以情动人,可以俘获部分读者的心。 活动参与性软文 微信公众号非常难的是调动粉丝的参与感与活跃度,通过举办一些粉丝愿意参与的活 动,如赠送、折扣、抽奖、讲座、等,宣传我们的产品和服务,提升我们的知名度和美 誉度,同时也能极大的调动粉丝参与的积极性和主动性,增强对企业的忠诚度。 话题讨论性软文 这类论文就是让粉丝进来评论与互动,不认可的有自己不认可的观点表达,也是重在 调动粉丝参与的积极性,使粉丝之间引发讨论,从而扩大软文的影响力。 微信营销具体实施方法 1、消息管理。这是微信公众平台使用最多的工具,也是营销最重要的一部分。当粉 丝有话要说时,就会将消息发送到这个菜单里,该菜单直接反映了微信公众平台的活跃 度。运营者在电脑旁时可以及时回复粉丝信息,没在电脑旁时也可以设置被添加自动回 复、消息自动

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Da白兔萘糖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值