SpringBoot小程序推送信息的项目实践

目录
  • 1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数
  • 2.申请小程序信息,申请信息模板
  • 3.根据开发文档开发
  • 4.代码如下:
  • 5.推送结果

1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数

首先申请一个小程序,微信开放平台:小程序

2.申请小程序信息,申请信息模板

appid

AppSecret

3.根据开发文档开发

subscribeMessage.send | 微信开放文档

4.代码如下:

引入依赖

 <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
    </dependency>

先准备一个HTTP工具类Z

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
 * @author lrx
 * @description: TODO
 * @date 2021/3/9 9:50
 */
public class HttpClientUtils {
    //Http协议GET请求
    public static String httpGet(String url) throws IOException {
        //初始化HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //创建HttpGet
        HttpGet httpGet = new HttpGet(url);
        //发起请求,获取response对象
        CloseableHttpResponse response = httpClient.execute(httpGet);
        //获取请求状态码
        //response.getStatusLine().getStatusCode();
        //获取返回数据实体对象
        HttpEntity entity = response.getEntity();
        //转为字符串
        String result = EntityUtils.toString(entity, "UTF-8");
        return result;

    }

    //Http协议Post请求
    public static String httpPost(String url, String json) throws Exception {
        //初始HttpClient
        CloseableHttpClient httpClient = HttpClients.createDefault();
        //创建Post对象
        HttpPost httpPost = new HttpPost(url);
        //设置Content-Type
       /* httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");*/
        StringEntity se = new StringEntity(json,"UTF-8");
        se.setContentType("application/x-www-form-urlencoded");
        httpPost.setEntity(se);
        //发起请求,获取response对象
        CloseableHttpResponse response = httpClient.execute(httpPost);
        //获取请求码
        //response.getStatusLine().getStatusCode();
        //获取返回数据实体对象
        HttpEntity entity = response.getEntity();
        //转为字符串
        String result = EntityUtils.toString(entity, "UTF-8");
        return result;
    }

    //Https协议Get请求
    public static String httpsGet(String url) throws Exception {
        CloseableHttpClient hp = createSSLClientDefault();
        HttpGet hg = new HttpGet(url);
        CloseableHttpResponse response = hp.execute(hg);
        HttpEntity entity = response.getEntity();
        String content = EntityUtils.toString(entity, "UTF-8");
        hp.close();
        return content;
    }

    //Https协议Post请求
    public static String httpsPost(String url, String json) throws Exception {
        CloseableHttpClient hp = createSSLClientDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Content-Type", "application/json");
        httpPost.setEntity(new StringEntity(json));
        CloseableHttpResponse response = hp.execute(httpPost);
        HttpEntity entity = response.getEntity();
        String content = EntityUtils.toString(entity, "UTF-8");
        hp.close();
        return content;
    }

    public static CloseableHttpClient createSSLClientDefault() throws Exception {
        //如果下面的方法证书还是不过,报错的话试试下面第二种
        /* SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy(){
        //信任所有
        public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        return true;
        }
        }).build();
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
        return HttpClients.custom().setSSLSocketFactory(sslsf).build();*/

        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(),
                NoopHostnameVerifier.INSTANCE);
        return HttpClients.custom().setSSLSocketFactory(sslsf).build();
    }
}

测试代码

import com.alibaba.fastjson.JSONObject;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author lrx
 * @description: TODO  小程序推送
 * @date 2022/4/11 13:32
 */
public class TestXCXMain {
    public static void main(String[] args) throws Exception {
        String appid = "";  //appid
        String secret = "";  //secret
        //登录链接获取token
        String loginUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
        Map<String, Object> payloadMap = JSONObject.parseObject(HttpClientUtils.httpGet(loginUrl));
        String token = null;
        if (payloadMap.containsKey("access_token")) {
            token = payloadMap.get("access_token").toString();
        }
        System.out.println("获取token" + token);
        Map<String, Object> qqMap = new HashMap<String, Object>();
        qqMap.put("touser", "openid");  //要推送的openid
        qqMap.put("template_id", "");   //信息模板id
        qqMap.put("page", "index");
        qqMap.put("miniprogram_state", "developer");
        qqMap.put("lang", "zh_CN");
        //封装信息
        Map<String, Object> dataMap = new HashMap<String, Object>();
        Map<String, String> valueMap1 = new HashMap<String, String>();
        valueMap1.put("value", "成功");
        Map<String, String> valueMap2 = new HashMap<String, String>();
        valueMap2.put("value", "成功");
        dataMap.put("thing3", valueMap1);
        dataMap.put("thing1", valueMap2);
        qqMap.put("data", dataMap);
        //发送
        Map<String, Object> payloadMapData = JSONObject.parseObject(HttpClientUtils.httpPost("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+token,JSONObject.toJSONString(qqMap)));
        if (payloadMapData.containsKey("errCode")) {
            System.out.println("返回code码:"+payloadMapData.get("errCode").toString());
        }
    }
}

5.推送结果

到此这篇关于SpringBoot小程序推送信息的项目实践的文章就介绍到这了,更多相关SpringBoot小程序推送信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 微信小程序 springboot后台如何获取用户的openid

    openid可以标识一个用户,session_key会变,所以来获取一下openid. openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序. 发布的小程序需要https的域名,而测试的时候可以使用http. 小程序在app.js中,修改login()中的内容: // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, session

  • springboot+jwt+微信小程序授权登录获取token的方法实例

    目录 前言 配置 XcxAuthenticationProvider XcxAuthenticationToken 小程序授权登录 前言 我们有时候在开发中,遇到这样的问题,就是我们需要小程序授权登录我们自己的后台,通过小程序的信息换取我们自己后台的token,实现账号密码.小程序授权登录的多种登录方式. 配置 在 SecurityConfig文件中配置 XcxAuthenticationProvider public class XcxAuthenticationProvider implem

  • Spring Boot实现微信小程序登录

    使用Spring Boot完成微信小程序登录 由于微信最近的版本更新,wx.getUserInfo()的这个接口即将失效,将用wx.getUserProfile()替换,所以近期我也对自己的登录进行更新,并且为了巩固学习到的知识,我自己做了一个小demo,在此分享给大家,希望能对大家有所帮助.废话不多说,直接上代码. 前端 .wxml <button class="r" bindtap="bindGetUserInfo">同意</button>

  • SpringBoot+微信小程序实现文件上传与下载功能详解

    目录 1.文件上传 1.1 后端部分 1.2 小程序前端部分 1.3 实现效果 2.文件下载 2.1 后端部分 2.2 小程序前端部分 2.3 实现效果 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 <!--文件上传与下载相关的依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fil

  • SpringBoot小程序推送信息的项目实践

    目录 1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数 2.申请小程序信息,申请信息模板 3.根据开发文档开发 4.代码如下: 5.推送结果 1.小程序推送信息列如我们去餐厅等位有预约提醒,剩余桌数 首先申请一个小程序,微信开放平台:小程序 2.申请小程序信息,申请信息模板 appid AppSecret 3.根据开发文档开发 subscribeMessage.send | 微信开放文档 4.代码如下: 引入依赖 <dependency> <groupId>org.apac

  • python实现小程序推送页面收录脚本

    小程序搜索推送接口: developers.weixin.qq.com/miniprogram- 小程序获取assess_token:developers.weixin.qq.com/miniprogram- 当时看到小程序页面收录的时候也是很恍然,一直都没有怎么注意到这个东西,直到加了微信小程序社区的官方群才看到有人提及这个东西,索性点进去看了一下,发现收录页面达到了17万,应该不算太多,属于爬虫自然收录. 也有过人问过我怎么做收录的,真的,就是自然收录,无非是详情页比较重要而已,因为参数的不

  • SpringBoot集成WebSocket实现后台向前端推送信息的示例

    前言 在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下. 一.什么是websocket? WebSocket协议是基于TCP的一种新的网络协议.它实现了客户端与服务器全双工通信,学过计算机网络都知道,既然是全双工,就说明了服务器可以主动发送信息给客户端.这与我们的推送技术或者是多人在线聊天的功能不谋而合. 为什么不使用HTTP 协议呢?这是因为HTTP是单工通信,通信只能由客户端发

  • SpringBoot2.0集成WebSocket实现后台向前端推送信息

    什么是WebSocket? WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. 为什么需要 WebSocket? 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起,HTTP 协议做不到服务器主动向客户端推送信息. 举例来说,我们想要查询当前的排队情况,只能是

  • python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用requests.get()获取的内容是不含推送消息的,这里使用selenium+PhantomJS处理 代码 #! /usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ

  • 在小程序中推送模板消息的实现方法

    前段时间剁手了 PS4,在浏览商店时,发现官方商店真的不好用,主要是网络原因,次要是页面设计.所以就想自己做一个游戏查询的小程序,可以关注某个游戏,然后在这个游戏打折的时候发送通知给用户.最后发现有个很大的问题是:小程序没法直接给用户推送消息(当时还不知道模板消息),服务号才能.然后就用邮箱实现了通知功能,但是邮箱的局限实在是太大了(各大免费邮箱每天的发件数都很小,自己搭建的邮件服务器虽然没有发件限制,但是大概率会被放到垃圾箱). 然后某天在微信小程序的管理后台发现了模板消息这个东西,查了会资料

  • 微信小程序清空输入框信息与实现屏幕往上滚动的示例代码

    微信小程序,是属于小程序的一种,英文名为Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打开应用.微信小程序也是基于H5,JS的开发. 一. 清空输入框信息(重置输入框信息恢复默认值) 这是我在微信小程序实训开发的过程中出现的问题,多次思考后终于解决了输入框内已发送的消息无法被清空这个问题.从另一个角度说可以把清空输入框信息理解为重置输入框信息恢复初始默认值.以下是我的解决方案,希望对你们有所帮助. 首先

  • SpringBoot 实现微信推送模板的示例代码

    导读 由于最近手头上需要做个Message Gateway,涉及到:邮件(点我直达).短信.公众号等推送功能,网上学习下,整理下来以备以后使用. 添加依赖 在SpringBoot项目中添加依赖 <!--微信模版消息推送三方sdk--> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <ver

  • SpringBoot集成极光推送完整实现代码

    目录 1.pom.xml 2.application.yml 3.MyJPushClient 4.test 工作中经常会遇到服务器向App推送消息的需求,一般企业中选择用极光推送的比较多,在集成极光时发现极光的文档并不完整,网上的文章也很多不能直接使用,这里列出我在工作中集成极光的全部代码,只需要按照如下代码保证一次性实现. 1.pom.xml <!-- 极光推送 begin --> <dependency> <groupId>cn.jpush.api</grou

  • C#推送信息到APNs的方法

    本文实例讲述了C#推送信息到APNs的方法.分享给大家供大家参考.具体实现方法如下: class Program { public static DateTime? Expiration { get; set; } public static readonly DateTime DoNotStore = DateTime.MinValue; private static readonly DateTime UNIX_EPOCH = new DateTime(1970, 1, 1, 0, 0, 0

随机推荐