软件编程
位置:首页>> 软件编程>> java编程>> SpringBoot小程序推送信息的项目实践

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

作者:李日兴lrx  发布时间:2021-12-07 04:23:34 

标签:SpringBoot,小程序,推送信息

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

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

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

appid

 AppSecret

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

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小程序推送信息的项目实践

来源:https://blog.csdn.net/LRXmrlirixing/article/details/124196961

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com