微信小程序模板消息(服务通知消息)原始post工具封装(不适用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了微信小程序模板消息(服务通知消息)原始post工具封装(不适用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4237字,纯文字阅读大概需要7分钟。
内容图文
首先,这里使用的是原始的java封装post请求,不适用jar包是因为第三方的jar包坑比较多(要么是中文乱码问题----部分jar包需要改源码 要么是JSON格式数据解析错误---字符串的json格式是对的,但是底层封装发送的格式不对-我自己理解是maven上的jar包很多是国外整的,可对中文编码这块可能不怎么注重。)
这里需要对字节流和字符流的写入和写出有一定认识
第一点:基础认识
第二点:网上虽然这么说:项目之间通信一般使用PringWriter(字符流);
第三点:但唯一的缺点是不能够控制写出的编码格式(中文),所以采用BufferedWriter
接下来展示相关的代码:
1.post方法的工具类封装;param 为JSON格式的字符串:eg:
{"data":{"keyword3":{"value":"2.0片"},"keyword4":{"value":"韩大大"},"keyword1":{"value":"卡培他滨"},"keyword2":{"value":"2019-09-04 00:00:00.0"}},"emphasis_keyword":"keyword2.DATA","form_id":"e96476fe003e4c44b2e62a1fbb3ac292","template_id":"7cC2LSqbCdN13dBkVxR-9QRv-MHWEuD55zllEfI2La8","touser":"ojwg75IMUtrqkre_8Gz3XBq7xMVM"}
post方法工具类:
package com.xingshu.utils; import java.io.*; import java.net.URL; import java.net.URLConnection; /** * @author Hanguangxue XINSHU 2019.09.06 */ public class HttpClientUtil { /** * 发送post请求 json格式 * @param url 需要发送数据的链接 * @param param 请求数据的JSON格式 * @return 服务响应后返回的结果 */ public static String sendPost(String url, String param) { BufferedWriter out = null; //也可以使用PrintWriter 但是写出没有编码设置(字符流) BufferedReader in = null; //同样为设置编码,获取传回的JSON格式或是文件 String result = ""; try { URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求属性 conn.setRequestProperty("Accept", "application/json"); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept-Charset", "UTF-8"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // 获取URLConnection对象对应的输出流 out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8")); // 发送请求参数 out.write(param); // flush输出流的缓冲 out.flush(); // 定义BufferedReader输入流来读取URL的响应 in = new BufferedReader( new InputStreamReader(conn.getInputStream())); String line; while ((line = in.readLine()) != null) { result += line; } } catch (Exception e) { System.out.println("发送 POST 请求出现异常!"+e); e.printStackTrace(); } //使用finally块来关闭输出流、输入流 finally{ try{ if(out!=null){ out.close(); } if(in!=null){ in.close(); } } catch(IOException ex){ ex.printStackTrace(); } } return result; } }
2.微信小程序相关JSON格式代码的封装,我用的是模板消息的send数据格式:详情见官网 服务通知消息和模板消息都可以使用该post请求。
3.实体类封装 主要属性(get,set自己生成)
public class TemplateMssData { private String touser; private Object data; private String form_id; private String template_id; private String page; private String emphasis_keyword; }
4.请求获取 发送服务通知
public String sendTemplateMSS(String data){ System.out.println(data); final String TemplateMSSURLPre = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token="; String access_token = this.getAccessToken(); JSONObject JSDJson = JSONObject.parseObject(access_token); if(null != JSDJson) { if(JSDJson.containsKey("access_token")) { String TemplateMSSURL = TemplateMSSURLPre + JSDJson.getString("access_token"); String results = null; //results = HttpClientUtil.doPost(TemplateMSSURL,JSON.toJSONString(data)); results = HttpClientUtil.sendPost(TemplateMSSURL,data); logger.info(results); System.out.println("消息返回:"+results); return results; } } return null; }
5.获取 access_token 方法
public String getAccessToken(){ final String ACCESSTOKENURL = "https://api.weixin.qq.com/cgi-bin/token?grant_type={grant_type}&appid={appid}&secret={secret}"; String accessTokenInfo = null; Map<String, String> ParaMap = new HashMap<>(); ParaMap.put("grant_type", Constants.GRANTTYPE); ParaMap.put("appid", Constants.WECHATAPPID); ParaMap.put("secret", Constants.WECHATSECRET); ResponseEntity<String> responseEntity = restTemplate.getForEntity(ACCESSTOKENURL, String.class, ParaMap); HttpStatus st = responseEntity.getStatusCode(); if(st.is2xxSuccessful()) { accessTokenInfo = responseEntity.getBody(); }else { logger.error("Get access_token fail, HttpStatus: " + st); } return accessTokenInfo; }
6.调用:其中mssData是 TemplateMssData 对象。转换后的格式就是JSON格式的字符串;
内容总结
以上是互联网集市为您收集整理的微信小程序模板消息(服务通知消息)原始post工具封装(不适用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题全部内容,希望文章能够帮你解决微信小程序模板消息(服务通知消息)原始post工具封装(不适用jar包--坑比较多),解决47001(JSON格式)和中文乱码问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。