精华内容
下载资源
问答
  • 微信公众号、小程序项目开发模板源码(https://blog.csdn.net/rongbo91/article/details/112506514) 微信公众号/小程序开发项目源码(支持多公众号) 微信应用开发一步到位,结合测试公众号完成开发Demo演示,项目源码...
  • 主要为大家详细介绍了微信公众号开发之回复图文消息java代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 简单的微信后台管理页面,打包后可直接使用html。包含菜单、用户、素材、模板消息等管理。 测试运行: npm install npm run serve 打包html: npm run build
  • 以订单推送为例,主要为大家详细介绍了java实现微信公众号发送模版消息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Amango 芒果微信公众号管理框架是基于 Onethink 开源框架进行的二次开发,它继承Onethink的基本CMS管理理念,丰富了对微信公众号管理的更好得支持。 因此,它既可以兼容Onethink的插件也支持微信插件。本系统专注于...
  • 微信公众号为服务号且开通微信认证(其他类型账号不能发送) 申请备案个线上域名 公众号设置->功能设置,配置网页授权域名 进入基础设置,开通开发者密码(AppSecret),并保存起来 ip白名单设置你的服务器...

    配置阶段

    1. 微信公众号为服务号且开通微信认证(其他类型账号不能发送)

    2. 申请备案个线上域名

    3. 公众号设置->功能设置,配置网页授权域名
      在这里插入图片描述
      在这里插入图片描述

    4. 进入基础设置,开通开发者密码(AppSecret),并保存起来

    5. ip白名单设置你的服务器ip(用于获取access_token)在这里插入图片描述

    6. 开通模板消息
      在这里插入图片描述

    7. 选择模板
      在这里插入图片描述

    开发阶段

    获取用户openid 官网文档

    1. 拼接用户授权url,用户同意授权,并根据redirect_uri回调获取code

      接口地址:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE#wechat_redirect
      
      请求方式: get
      
      appid:公众号appid基础设置里有(必填)
      
      redirect_uri:重定向地址,用于接收code(必填)
      
      response_type:返回类型,请填写code(必填)
      
      scope:应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),
      	snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 
      	即使在未关注的情况下,只要用户授权,也能获取其信息 )(必填)
      	
      wechat_redirect:无论直接打开还是做页面302重定向时候,必须带此参数(必填)
      
      完成参数填写后直接扔进你的自定义菜单栏里,点击跳转url
      
      如果用户同意授权,页面将跳转至 redirect_uri/?code=CODE&state=STATE
    2. 通过code获取特殊的网页授权access_token,refresh_token,openid

      接口地址:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
      
      请求方式: get
      
      appid:公众号appid基础设置里有(必填)
      
      secret:公众号secret基础配置里生成(必填)
      
      code:第一步获取的code(必填)
      
      grant_type:填写为authorization_code(必填)
      
      正确返回的结果:
      
      { "access_token":"ACCESS_TOKEN",
      
      "expires_in":7200,
      
      "refresh_token":"REFRESH_TOKEN",
      
      "openid":"OPENID",
      
      "scope":"SCOPE" }
      

    发送模板消息

    1. 获取access_token

      接口地址:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=appid&secret=secret
      
      请求方式: get
      
      appid:公众号appid(必填)
      
      secret:开发者密码(AppSecret)(必填)
      
      grant_type:获取access_token填写client_credential(必填)
      
    2. 按模板消息详情,拼接模板消息数据
      在这里插入图片描述

      $data = [
          "touser"=>$openid, //对方的openid,前一步获取
          "template_id"=>"v2kBJOHxxxxxxx", //模板id
          // "miniprogram"=>[
          //     "appid"=>"xxx", //跳转小程序appid
          //     "pagepath"=>"pages/index/index"//跳转小程序页面
          // ],
          "data"=>[
              "first"=>[
                  "value"=> "通知头",
                  "color"=> '#173177'
              ],
              "keyword1"=>[
                  "value"=> '微信名称',
                  "color"=> '#173177'
              ],
              "keyword2"=>[
                  "value"=> date('Y-m-d H:i:s'),
                  "color"=> '#173177'
              ],
              "remark"=>[
                  "value"=> "如有疑问,请联系当地网点",
                  "color"=> '#173177'
              ],
          ]
      ];
      
    3. 发送模板消息

      接口地址:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=access_token; 
      
      请求方式: post
      
      appid:公众号appid(必填)
      
      secret:开发者密码(AppSecret)(必填)
      
      access_token:前面第一步获取的access_token,此时再次请求access_token,与获取openid的接口不同!!!
      
      传输前面按模板消息详情,拼接的模板消息data数据
      
      
    4. 关注公众号后,即可实时接受发送的消息
      在这里插入图片描述

    注:

    发送模板消息时获取的access_token具有2小时的时效可丢进缓存中,不必每次发送都获取,每天只有两千次,模板消息发送次数为10万次,当然根据你公众号的关注人数来确定,人数超过10万肯定具有更高的次数

    如果您觉得本篇对你有帮助,可以点关注,给个赞,支持一下,过程有遇到什么问题也欢迎评论私信,进行交流

    展开全文
  • 做这个功能前,如果是小白请先看微信公众号开发文档, https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html 这里我们只需要发送模板信息所以只需要看一个接口就...

    做这个功能前,如果是小白请先看微信公众号开发文档,
    https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html
    这里我们只需要发送模板信息所以只需要看一个接口就可以了
    在这里插入图片描述
    接口很明显,只需要一个access_token,然后就传参数就可以,access_token这个是需要调用接口去获取的,不知道的可以去看官方文档,这里就不解释了
    这个接口的参数,关键点就是要发送给谁,发送什么信息(模板id),模板需要的数据
    在这里插入图片描述
    好吧,能看懂这写的基本代码是可以一下子就写出来的,看下代码吧

       /**
         * 发送模板信息:
         * @param map
         * @return
         */
        @Override
        public void wxMessageTemplate(List<Map<String,Object>> map) {
            String accessToken = getAccessToken(); //获取接口凭证:
    //        String accessToken  = "33_3obOUpMywEAHZZVyIksPbZNQ3LCAMWdjn1vqucwV4RUnBgruH84-CL2kfBheqa4KXb2CzXKPLsxkc4hZeKxV1gw2ERVkKK3QyoIT-Yi4b8htv_PUuhXL1AFdE80bGG63RusJJldizcznx2N3TNGeAJAICV";
            List<Map<String, Object>> arrayList = new ArrayList<>();
            if(StringUtils.isNotEmpty(accessToken)){
                String templateFile = getTemplate.replace("ACCESS_TOKEN", accessToken);
                for(Map temolaMap : map){
                    Map<String,Object> map1 = new HashMap<>();
                    map1.put("value","尊敬的"+temolaMap.get("realname").toString()+"先生/女士,您好!"+temolaMap.get("repay_date").toString()+"是您的扣款日,请确保您的还款银行卡内余额充足。");
                    map1.put("color","#173177");
                    Map<String,Object> remark = new HashMap<>();
                    remark.put("value","如余额不足导致扣款失败将产生相应的扣失费和罚息,如有疑问请拨打全国热线13002005316");
                    remark.put("color","#173177");
                    JSONObject jsonObject = templateRun(map1,remark,temolaMap, templateFile,"",propertiesUtil.getString("wx.template"));
                }
            }
        }
    
        public JSONObject templateRun(  Map<String,Object> map1, Map<String,Object> remark,Map<String,Object> maps,String  templateFile,String stageNum,String template){
            Map<String,Object> map2 = new HashMap<>();
            map2.put("value",maps.get("contract_no").toString());
            map2.put("color","#173177");
            Map<String,Object> map3 = new HashMap<>();
            map3.put("value",maps.get("bank_name").toString());
            map3.put("color","#173177");
            Map<String,Object> map4 = new HashMap<>();
            map4.put("value",maps.get("card_no").toString());
            map4.put("color","#173177");
            Map<String,Object> map5 = new HashMap<>();
            map5.put("value","¥"+maps.get("repay_amout").toString());
            map5.put("color","#173177");
            Map<String,Object> map6 = new HashMap<>();
            map6.put("value",maps.get("repay_date").toString());
            map6.put("color","#173177");
            if(StringUtils.isNotEmpty(stageNum)){
                map6.put("value",stageNum);
                map6.put("color","#173177");
            }
    
            Map<String,Map<String,Object>> map = new HashMap<>();
            map.put("first",map1);
            map.put("keyword1",map2);
            map.put("keyword2",map3);
            map.put("keyword3",map4);
            map.put("keyword4",map5);
            map.put("keyword5",map6);
            map.put("remark",remark);
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("touser",maps.get("openid").toString());
            jsonObject.put("url",url);
            jsonObject.put("template_id",template);
            jsonObject.put("data",map);
            JSONObject jsonObject1 = HttpRequestUtils.httpPost(templateFile, jsonObject);
            System.out.printf(jsonObject1.toString());
            return  jsonObject1;
        }
     /**
         * 发送还款失败的模板
         * @param map
         * @return
         */
        @Override
        public void wxMessageFailTemplate(Map<String, Object> maps) {
            String accessToken = getAccessToken(); //获取接口凭证:
    //
    //        String accessToken  = "33_3obOUpMywEAHZZVyIksPbZNQ3LCAMWdjn1vqucwV4RUnBgruH84-CL2kfBheqa4KXb2CzXKPLsxkc4hZeKxV1gw2ERVkKK3QyoIT-Yi4b8htv_PUuhXL1AFdE80bGG63RusJJldizcznx2N3TNGeAJAICV";
    
            if(StringUtils.isNotEmpty(accessToken)) {
                String templateFile = getTemplate.replace("ACCESS_TOKEN", accessToken);
                Map<String, Object> map1 = new HashMap<>();
                map1.put("value", "尊敬的" + maps.get("realname").toString() + "先生/女士: 很抱歉您本次在信保保理的还款失败!");
                map1.put("color", "#173177");
                Map<String,Object> map2 = new HashMap<>();
                map2.put("value",maps.get("repay_amout").toString()+"元");
                map2.put("color","#173177");
                Map<String,Object> map3 = new HashMap<>();
                map3.put("value",maps.get("reason").toString());
                map3.put("color","#173177");
                Map<String, Object> remark = new HashMap<>();
                remark.put("value", "请确保还款账户资金充足或检查账户状态,以便系统扣款成功。关注保保乐公众号,借还款更便捷!如有任何疑问,请联系在线客服。");
                remark.put("color", "#173177");
                Map<String, Map<String, Object>> map = new HashMap<>();
                map.put("first", map1);
                map.put("keyword1",map2);
                map.put("keyword2",map3);
                map.put("remark", remark);
                JSONObject jsonObject = new JSONObject();
                jsonObject.put("touser", maps.get("openid").toString());
                jsonObject.put("template_id", propertiesUtil.getString("wx.templatefail"));
                jsonObject.put("data", map);
                JSONObject jsonObject1 = HttpRequestUtils.httpPost(templateFile, jsonObject);
            }
        }
    
        /**
         * 发送成功 模板信息:
         * @param map
         */
        @Override
        public void wxMessageSucceedTemplate(List<Map<String, Object>> map) {
            String accessToken = getAccessToken(); //获取接口凭证:
    //        String accessToken  = "33_3obOUpMywEAHZZVyIksPbZNQ3LCAMWdjn1vqucwV4RUnBgruH84-CL2kfBheqa4KXb2CzXKPLsxkc4hZeKxV1gw2ERVkKK3QyoIT-Yi4b8htv_PUuhXL1AFdE80bGG63RusJJldizcznx2N3TNGeAJAICV";
    //
            List<Map<String, Object>> arrayList = new ArrayList<>();
            if(StringUtils.isNotEmpty(accessToken)){
                String templateFile = getTemplate.replace("ACCESS_TOKEN", accessToken);
                for(Map temolaMap : map){
                    Map<String,Object> map1 = new HashMap<>();
                    map1.put("value","尊敬的"+temolaMap.get("realname").toString()+"先生/女士,您好! 本月还款已成功,还款信息如下:");
                    map1.put("color","#173177");
                    Map<String,Object> remark = new HashMap<>();
                    remark.put("value","具体还款明细请点击登录信保保理系统查询 如有疑问请拨打全国热线13002005316");
                    remark.put("color","#173177");
                    JSONObject jsonObject = templateRun(map1,remark,temolaMap, templateFile,temolaMap.get("stageNum").toString(), propertiesUtil.getString("wx.templateSesson"));
                }
            }
        }
    
    

    基本就这样了,然后就是用http 工具类发送post请求就可以了,其实我们还可以用wxJAVA这个开源的,这样会更方便,可以的话大家可以去看看,我这里有些地方是封装过的,可能大家看不到 一些变量的配置,所以大家要仔细看看,不明白。的地方评论吧,

    展开全文
  • java spring boot框架下的微信公众号开发,供参考。包含基础接入,机器人回复文字或图文消息,欢迎消息,设置自定义菜单,推送模板消息,换取网页授权access_token(snsapi_base方式)
  • 微信公众号二次开发项目源码

    千次下载 热门讨论 2016-01-18 17:29:13
    微信公众号二次开发项目源码 微信开发 公众号开发 OAuth2.0 微信二次开发 微信 java 代码,保护微信OAuth2.0授权 微信自定义菜单 微信回复图文消息 微信动态回复内容 微信开发即微信公众平台开发,将企业信息、服务...
  • java二次开发接微信公众号接口,实现根据用户授权,获取用户code,再获取openid,然后向其推送模版消息
  • C#开发微信公众号实现消息自动回复

    热门讨论 2015-09-24 23:08:33
    作为计算机学院的学生的学生,时刻在打计算机学院官网的主意,前段时间我的一个好基友在我面前炫耀他的能够查课表的公众号(服务模拟登录返回数据),把我眼红得,所以我暗自下决心,自己一定要弄个微信公众号来玩...
  • 模板ID:531 模板主题:搞怪愚人节 模板亮点:这套模板采用深蓝色为主体色,并且模板中添加了大量和愚人节相关的元素,就连配图也是一些和愚人节搞怪小丑相关的配图,让文章的氛围更加浓烈。小编最喜欢的就是这套...

    还记得在学校读书的时候没到愚人节这一天,我们都会想出各种各样的整蛊办法,比如说在教师的门上放一桶水,当然进来的时候就会自然而然落到他的头上,又或者把夹心饼干里面的奶油换成牙膏等等,整整一天都充满欢声笑语。那是我们永远都回不去的时光。

    愚人节是一个备受中国人喜欢的洋节。愚人节意味着一个人可以玩弄各种小把戏而不必承担后果。你只要说一声是愚人节的玩笑,你的恶作剧就可以被原谅。愚人节就快要来了,相信各位小便也开始摩拳擦掌,准备愚人节相关的推文了吧,今天小编就给大家提供几套愚人节的全文模板,我们来看看。

    一、模板精选

    1.模板ID:531

    模板主题:搞怪愚人节

    模板亮点:这套模板采用深蓝色为主体色,并且模板中添加了大量和愚人节相关的元素,就连配图也是一些和愚人节搞怪小丑相关的配图,让文章的氛围更加浓烈。小编最喜欢的就是这套模板中的配图都是非常的精致,而且很符合节日的主题,建议大家可以收藏使用。

    并且整套模板中添加了很多卡通的元素,所以一些学校幼儿园之类的教育机构用来做愚人节的推文是个非常不错的选择。

    在这里插入图片描述

    2.模板ID:207

    模板主题:搞怪愚人节

    模板亮点:

    相比上一套的深色系,这一套模板整体采用的是浅色系,背景也是完全的纯白色。但是模板中愚人节的氛围丝毫没有被减弱。

    模板内容主要介绍了愚人节的来历节日起源以及节日的一些相关活动等等。标题样式是这个模板中的一大特色,它的每一个标题都是独一无二的。愚人节的元素渗透在模板的每一个细节中。

    在这里插入图片描述

    二、制作方法

    以上就是今天给大家推荐的关于愚人节的全文模板了,这两套模板的主题都是以该怪为主,但是每个模板的侧重点又各不相同。接下来给大家说一下怎样制作。

    最简单的方法就是大家在进入首页以后,点击页面左侧的全文模板按钮,然后在搜索框中输入模板的ID,找到模板以后,将鼠标放到模板上,点击写入按钮,就可以将模板内的所有内容添加到编辑区内进行编辑了,我们可以自由替换模板内的文字和图片。

    如果有的小伙伴只想要单独使用模板中的部分内容的话也是可以的,我们将鼠标放到模板上以后,点击拆分按钮,就可以将模板中的部分内容添加到编辑区内使用了哦~

    展开全文
  • java向微信公众号---发送模板图文消息

    千次阅读 热门讨论 2021-01-05 14:04:00
    微信公众号对接开发项目搭建mavenapplication.ymlyml参数配置微信客户端配置搭建完成 实现业务模板消息推送准备工作模板消息填写要求图文消息填写要求推送模板消息推送模板消息结果——效果推送图文消息问题和结果...

    其他操作

    书接上文:微信测试号申请步骤和调试.
    书接下文:后台获取授权用户的openId.

    项目搭建

    maven

    <dependencies>
            <dependency>
                <groupId>commons-codec</groupId>
                <artifactId>commons-codec</artifactId>
                <version>1.13</version>
            </dependency>
            <dependency>
                <groupId>org.jolokia</groupId>
                <artifactId>jolokia-core</artifactId>
                <version>1.6.0</version>
            </dependency>
    
            <dependency>
                <groupId>net.coobird</groupId>
                <artifactId>thumbnailator</artifactId>
                <version>0.4.8</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.binarywang</groupId>
                <artifactId>weixin-java-mp</artifactId>
                <version>3.6.0</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.16</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.61</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-lang3</artifactId>
                <version>3.8.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-autoconfigure</artifactId>
                <version>1.3.2</version>
            </dependency>
            <dependency>
                <groupId>com.squareup.okhttp3</groupId>
                <artifactId>okhttp</artifactId>
            </dependency>
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus</artifactId>
                <version>3.1.2</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.7.0</version>
            </dependency>
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.7.0</version>
            </dependency>
    
            <dependency>
                <groupId>javax.persistence</groupId>
                <artifactId>persistence-api</artifactId>
                <version>1.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>1.2.9</version>
            </dependency>
    
        </dependencies>
    

    application.yml

    ###################  项目启动端口  ###################
    server:
      port: 80
    
    # 微信公众号配置
    wx:
      #微信公众号APPID
      appid: 123
      #微信公众号SECRET
      secret: 123
      #微信公众号模板ID
      templateId: 123
    

    yml参数配置

    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * 微信参数
     **/
    @Data
    @Component
    @ConfigurationProperties(prefix = "wx")
    public class WxMpProperties {
    
        /**
         * 公众号appId
         */
        private String appId;
    
        /**
         * 公众号appSecret
         */
        private String secret;
    
        /**
         * 公众号模板ID
         */
        private String templateId;
    }
    

    微信客户端配置

    
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
    import me.chanjar.weixin.mp.config.WxMpConfigStorage;
    import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * 微信配置
     **/
    @Configuration
    public class WxConfig {
    
        @Autowired
        WxMpProperties wxMpProperties;
    
        /**
         * 构造注入
         *
         * @param wxMpProperties
         */
        WxConfig(WxMpProperties wxMpProperties) {
            this.wxMpProperties = wxMpProperties;
        }
    
        /**
         * 微信客户端配置存储
         *
         * @return
         */
        @Bean
        public WxMpConfigStorage wxMpConfigStorage() {
            WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
            // 公众号appId
            configStorage.setAppId(wxMpProperties.getAppId());
            // 公众号appSecret
            configStorage.setSecret(wxMpProperties.getSecret());
            // 公众号Token
            configStorage.setToken(wxMpProperties.getToken());
            // 公众号EncodingAESKey
            configStorage.setAesKey(wxMpProperties.getAesKey());
            return configStorage;
        }
    
        /**
         * 声明实例
         *
         * @return
         */
        @Bean
        public WxMpService wxMpService() {
            WxMpService wxMpService = new WxMpServiceImpl();
            wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
            return wxMpService;
        }
    }
    

    搭建完成 实现业务

    模板消息推送

    准备工作

    在这里插入图片描述
    链接: 申请测试模板.

    模板消息填写要求

    first.DATA 跟上.DATA说明是数据

    人员:{{first.DATA}} 
    地址:{{keyword1.DATA}} 
    区域:{{keyword2.DATA}} 
    告警类型:{{remark1.DATA}} 
    时间:{{remark2.DATA}}
    

    图文消息填写要求

    <xml> 
    <Articles> 
    	<item> 
    		<Title><![CDATA[title1]]></Title> 
    		<Description><![CDATA[description1]]></Description> 
    		<PicUrl><![CDATA[picurl]]></PicUrl> 
    		<Url><![CDATA[url]]></Url>
    	</item>
    	<item>
    		<Title><![CDATA[title]]></Title>
    		<Description><![CDATA[description]]></Description>
    		<PicUrl><![CDATA[picurl]]></PicUrl> 
    		<Url><![CDATA[url]]></Url> 
    	</item>
    </Articles> 
    </xml>
    

    推送模板消息

    这里使用微信提供的serviceApi
    链接: WxMpService.

    
    import com.shangqu.datapush.buildsite.model.emnus.AlarmType;
    import com.shangqu.datapush.buildsite.model.mysqlData.AlarmInfo;
    import io.swagger.annotations.ApiImplicitParam;
    import io.swagger.annotations.ApiImplicitParams;
    import io.swagger.annotations.ApiOperation;
    import lombok.extern.slf4j.Slf4j;
    import me.chanjar.weixin.common.error.WxErrorException;
    import me.chanjar.weixin.mp.api.WxMpAiOpenService;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.api.WxMpUserService;
    import me.chanjar.weixin.mp.bean.result.WxMpUserList;
    import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
    import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
    import org.springframework.stereotype.Component;
    import org.springframework.web.bind.annotation.CrossOrigin;
    import org.springframework.web.bind.annotation.PostMapping;
    
    /**
     * 微信消息推送
     *
     **/
    @Slf4j
    @Component
    @CrossOrigin
    public class WxMsgPush {
    
        /**
         * 微信公众号API的Service
         */
        private final WxMpService wxMpService;
    
        /**
         * 构造注入
         */
        WxMsgPush(WxMpService wxMpService) {
            this.wxMpService = wxMpService;
        }
    
    
        /**
         * 发送微信模板信息
         *
         * @param openId 接受者openId
         * @return 是否推送成功
         */
        public Boolean SendWxMsg(String openId,String templateId) {
    
            // 发送模板消息接口
            WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                    // 接收者openid
                    .toUser(openId)
                    // 模板id
                    .templateId(templateId)
                    // 模板跳转链接
                    .url("www.baidu.com")
                    .build();
            // 添加模板数据
            templateMessage.addData(new WxMpTemplateData("first", "null告警""#000000"))
                    .addData(new WxMpTemplateData("keyword1", "","#000000"))
                    .addData(new WxMpTemplateData("keyword2","", "#000000"))
                    .addData(new WxMpTemplateData("keyword3", "", "#000000"))
                    .addData(new WxMpTemplateData("keyword4", "", "#000000"));
            String msgId = null;
            try {
                // 发送模板消息
                msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
    
            } catch (WxErrorException e) {
                e.printStackTrace();
            }
            log.warn("·==++--·推送微信模板信息:{}·--++==·", msgId != null ? "成功" : "失败");
            return msgId != null;
        }
    
    }
    

    推送模板消息结果——效果

    在这里插入图片描述
    点击详情会进入百度

    推送图文消息

        /**
         * 获取token
         * @return
         */
        public String getAccessToken() throws WxErrorException {
            String accessToken = wxMpService.getAccessToken();
            return accessToken;
        }
    
    
    	@ApiOperation(value = "", notes = "")
        @ResponseBody
        @RequestMapping(value = "/findwx", method = RequestMethod.POST)
        public void SendQYMessageimg(@RequestParam("id") String id) throws WxErrorException {
            String Url = "http://www.baidu.com";
            String mp = getAccessToken();
            String strurl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + mp;
    
            try {
    
    			//图片地址
                String PicUrl = "https://img-blog.csdn.net/20160907155302548";
    
                String responeJsonStr = "{";
                //用户openId
                responeJsonStr += "\"touser\": \"" + "用户openId" + "\",";
                responeJsonStr += "\"msgtype\": \"news\",";
                responeJsonStr += "\"agentid\": \"wxd4aff8****\",";
                responeJsonStr += "\"news\": {";
                responeJsonStr += "\"articles\": [{";
                responeJsonStr += "  \"title\": \"" + "震惊外国一小伙竟然做出... ..." + "\",";
                responeJsonStr += "  \"description\": \" " + "今日一美国男子在家中,竟然做出... ..." + "\",";
                responeJsonStr += "  \"url\": \"" + Url + "\",";
                responeJsonStr += "  \"picurl\": \"" + PicUrl + "\"";
                responeJsonStr += "}]";
                responeJsonStr += "},";
                responeJsonStr += "\"safe\":\"0\"";
                responeJsonStr += "}";
                xstream.connectWeiXinInterface(strurl, responeJsonStr);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    

    推送图文消息工具类

    
    import java.io.InputStream;
    import java.io.OutputStream;
     
    import java.net.HttpURLConnection;
    import java.net.URL;
     
    public class xstream {
     
        public static void connectWeiXinInterface(String action,String json){
     
            URL url;
     
            try {
     
                url = new URL(action);
     
                HttpURLConnection http = (HttpURLConnection) url.openConnection();
     
                http.setRequestMethod("POST");
     
                http.setRequestProperty("Content-Type",
     
                        "application/x-www-form-urlencoded");
     
                http.setDoOutput(true);
     
                http.setDoInput(true);
     
                System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
     
                System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
     
                http.connect();
     
                OutputStream os = http.getOutputStream();
     
                os.write(json.getBytes("UTF-8"));// 传入参数
     
                InputStream is = http.getInputStream();
     
                int size = is.available();
     
                byte[] jsonBytes = new byte[size];
     
                is.read(jsonBytes);
     
                String result = new String(jsonBytes, "UTF-8");
     
                System.out.println("请求返回结果:"+result);
     
                os.flush();
     
                os.close();
     
            } catch (Exception e) {
     
                e.printStackTrace();
     
            }
     
        }
     
     
     
    }
    

    问题和结果

    要用户先发送一条消息给公众号,你才能发送成功
    在这里插入图片描述
    点击消息会进入百度

    获取关注的用户openId

        /**
         * 获得关注公众号所有openid
         * @return
         * @throws WxErrorException
         */
        @Override
        public List<String> getUserList() throws WxErrorException {
            WxMpUserList wxMpUserList = wxMpService.getUserService().userList(null);
            List<String> openids = wxMpUserList.getOpenids();
            return openids;
        }
    

    既然有了openId集合和要发送的消息怎么群发

    微信并没有提供群发接口–就在自己代码中迭代openId集合去循环发送

    展开全文
  • 6、模板发送消息 7、参数二维码生成 8、扫描参数二维码接收参数和用户openid PS:代码仅供参考,需要在服务号上配置和获取 token,AppID,AppSecret,access_token以及设置网页OAuth2.0鉴权的网页地址。 全程几乎无...
  • java版微信公众号开发之自定义菜单的创建
  • 在公众平台实现发送模板消息功能,只能通过公众平台的接口开发实现,或者通过第三方平台微号帮功能模板消息群发实现,均能为微信公众号发送模板消息功能,模板消息发送不占用公众号每月的群发次数,模板消息仅用于...
  • (Java)微信公众号发送模板消息

    千次阅读 2019-07-18 16:14:14
    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。 1、模板消息调用时主要...
  • 身为一名新媒体小编,几乎每天都在与公众号图文的排版较劲儿,长时期的运营工作会积攒出一些自己的经验,接下来就分享给你们!希望可以对你们产生帮助哦~~ 一、文章为什么需要排版? 小编觉得文章排版就像女生化妆...
  • 一、打通微信小程序和微信公众号 1、利用不同平台下,相同的unionid来判断是发送到那个用户 2、获取微信小程序openid和unionid >>官方文档 3、获取微信公众号openid和unionid (触发条件是,用户的关注公众号...
  • 如果排版的素材选用的太过多样,就会概括文章主要内容的风头,反而会让读者主次不分,但是如果排版太过简便,又难以凸显公众号图文排版的优势,这样的情况就会让我们很头疼。 今天小编给大家介绍的这一片呢,就是一...
  • 在上一期的文章中,小编给大家分别介绍了一下在微信公众平台制作页面模板和在第三方平台制作页面模板的区别,有好多小伙伴在后台留言说现在确实非常需要这种页面模板,但是自己制作起来又比较困难,虽然网上有很多...
  • 三、排版心得 与宠物萌宠相关的公众号文章排版的时候,在样式选取方面肯定离不开和宠物相关的元素。一般都会选择添加一些卡通的宠物形象,以及宠物用品等等和宠物相关的元素都是可以的。 在文章的内容方面,小编...
  • SmartWx是一个微信公众号的web管理工具,本项目采用springmvc+layui实现。 本项目是一个完整的微信公众号web操作版,直接编译即可运行。让用户不再用关心微信的底层接口,直接使用页面进行操作,简单方便。 包括...
  • 图文结合: 素材ID:30409 关键词:行业、安保消防、消防员、抢险、救灾、gif、消防车 二、整体效果 上面的这些素材就是模板中的部分素材。整体配色选用的是红色,风格偏向于简约风。样式也都属于经典样式,既可以...
  • 今年的正式开工,比往年来得更晚一些。...线上线下的招聘方式五花八门,在众多的招聘渠道中,我们新媒体小编也发挥着不可忽视的作用,今天给大家提供一个关于招聘的全文模板,希望可以帮到大家。...
  • 分割线、结尾: 素材ID:24952 关键词:结尾、结束、end、小图、花朵、清新、春天 二、整体效果 以上就是模板中的部分素材,模板整体以草绿色为主要配色,模板中也添加了一些花朵相关的元素,更符合四月处于春天的...
  • 3.图文结合: 素材ID:36490 关键词:线框、跑步、锻炼、健康、体育、竞技 4.小图、配图、分割、结束: 素材ID:36391 关键词:体育、竞技、分割线、结束、举重、END 二、效果预览 模板的整体风格...
  • 今天小编就给大家介绍一下怎样快速完成消防相关的公众号图文排版。 一、素材节选 1.导语、引导: 素材ID:37904 关键词:红色背景、纯色内容、长方形、四边形、嵌套 2.标题、图片标题: 素材ID:37905 关键词:火警...
  • 今天小编就给大家说一下宠物领养相关的公众号图文应该怎样排版。 一、素材精 选 1.顶部关注: 素材ID:40137 关键词:萌宠、宠物、铲屎官汪星人、卡通、可爱、小动物、领养 2.图片边框、配图: 素材ID:40138 关键词...
  • 很多人都在找公众号模板,但是一般运营公众号有一段时间的朋友都知道,公众号模板一般都是在线图文编辑工具来实现的,微信公众号后台是没有这个功能的,那今天以135编辑器为例,介绍一下公众号模板,以及公众号模板...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,107
精华内容 842
关键字:

微信公众号图文模板