-
Java生成微信小程序二维码
import com.alibaba.fastjson.JSONObject;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
public class WxQrCode {
private static final String GETWXACODEUNLIMIT_URL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s";// 生成小程序码地址
private static final String URL_GET_TOKEN = "https://api.weixin.qq.com/cgi-bin/token";//获取access_token地址
private static final String APP_ID = "";// 小程序appid
private static final String APP_SECRET = ""; // 小程序秘钥
public static final String PATH_HOME = "";
private static final String BASE_PREFIX = "data:image/png;base64,"; // base64图片固定前缀
/**
* 获取微信Access_Token
* @param appid
* @param secret
* @return
*/
public static String getWeixinAccessToken(String appid, String secret){
String url = URL_GET_TOKEN;
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("grant_type", "client_credential");
paramMap.put("appid", appid);
paramMap.put("secret", secret);
String content = HttpClientUtils.executeHttpGet(url, paramMap);
Map map = (Map) JsonMapper.fromJsonString(content, HashMap.class);
return (String)map.get("access_token");
}
/**
* 生成小程序码返回base64字符串
* @param sceneStr 要携带的参数
* @param accessToken 上面方法得到的token
* @param page 要跳转的小程序页面(必须是已发布的)
* @return
*/
public static String getminiqrQr(String sceneStr, String accessToken,String page) {
HttpURLConnection httpURLConnection = null;
try {
URL url = new URL(String.format(GETWXACODEUNLIMIT_URL,accessToken));
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.put("scene", sceneStr);
paramJson.put("page", page);
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
//开始获取数据
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
try (InputStream is = httpURLConnection.getInputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();){
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
return BASE_PREFIX+Base64.getEncoder().encodeToString(baos.toByteArray());
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (httpURLConnection != null){
httpURLConnection.disconnect();
}
}
return null;
}
/**
* 模拟调用
* @param args
*/
public static void main(String[] args) {
String accessToken = getWeixinAccessToken(APP_ID,APP_SECRET);
String qrBase64 = getminiqrQr("1024",accessToken,PATH_HOME);
System.out.println(qrBase64);
}
写在后面:
1.以上代码中HttpClientUtils用你自己项目中的请求工具类就好,无特殊要求;
2.以上生成代码均模拟正常情况下请求,未对一些异常进行处理,该部分自行处理;
3.正常业务中不会每次都调用微信接口获取accessToken,一般是会放进缓存,定时更新,具体根据各自业务进行修改。
__EOF__
本文作者:异客 本文链接:https://www.cnblogs.com/li-chuan/p/14137497.html
最新更新
求1000阶乘的结果末尾有多少个0
详解MyBatis延迟加载是如何实现的
IDEA 控制台中文乱码4种解决方案
SpringBoot中版本兼容性处理的实现示例
Spring的IOC解决程序耦合的实现
详解Spring多数据源如何切换
Java报错:UnsupportedOperationException in Col
使用Spring Batch实现批处理任务的详细教程
java中怎么将多个音频文件拼接合成一个
SpringBoot整合ES多个精确值查询 terms功能实
数据库审计与智能监控:从日志分析到异
SQL Server 中的数据类型隐式转换问题
SQL Server中T-SQL 数据类型转换详解
sqlserver 数据类型转换小实验
SQL Server数据类型转换方法
SQL Server 2017无法连接到服务器的问题解决
SQLServer地址搜索性能优化
Sql Server查询性能优化之不可小觑的书签查
SQL Server数据库的高性能优化经验总结
SQL SERVER性能优化综述(很好的总结,不要错
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比