目录
调用方式
主要的请求参数
工具类
二维码转图片
获取accessToken
HTTPS 调用:
请求参数
代码
实现类
调用方式
POST https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN
主要的请求参数
属性 |
类型 |
必填 |
说明 |
access_token |
string |
是 |
接口调用凭证 |
scene |
string |
是 |
最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~ |
page |
string |
否 |
默认是主页,例如 pages/index/index,根路径前不要填加 /,不能携带参数 |
env_version |
string |
否 |
要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。 |
is_hyaline |
bool |
否 |
默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序 |
工具类
二维码转图片
import java.io.*;
public class WxaQrCodeUtil {
/**
* 二维码保存到本地
* @param bytes
* @param path 保存到本地的路径
*/
public static void saveQrCodeToLocal(byte[] bytes, String path) {
try {
InputStream inputStream = new ByteArrayInputStream(bytes);
//文件夹不存在则自动创建
File tempFile = new File(path);
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdirs();
}
FileOutputStream out = new FileOutputStream(path);
byte[] buffer = new byte[8192];
int bytesRead = 0;
while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.flush();
inputStream.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
获取accessToken
HTTPS 调用:
GET https://api.weixin.qq.com/cgi-bin/token
请求参数
属性 |
类型 |
必填 |
说明 |
grant_type |
string |
是 |
填写 client_credential |
appid |
string |
是 |
小程序唯一凭证,可在「微信公众平台 - 设置 - 开发设置」页中获得。 |
secret |
string |
是 |
小程序唯一凭证密钥,即 AppSecret,获取方式同 appid |
代码
private static final Map<String, Object> objects = new HashMap<>();
public JSONObject getToken(){
JSONObject accessTokenRes = new JSONObject();
String accessToken = null;
try {
String token_url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", APPID, SECRET);
HttpResponse execute = HttpRequest.get(token_url).execute();
String responseBody = execute.body();
if (responseBody == null) {
logger.info(messageUtil.getMessage("msg.get.token.fail"));
return null;
}
JSONObject token = JSON.parseObject(responseBody);
accessToken = token.getString("access_token");
if (StringUtils.isEmpty(accessToken)) {
logger.info(messageUtil.getMessage("msg.get.token.fail"));
return null;
}
accessTokenRes.put("access_token",accessToken);
accessTokenRes.put("date_time",new Date().getTime());
} catch (Exception e) {
logger.error(messageUtil.getMessage("msg.get.token.fail"));
logger.error(e.getMessage());
}
return accessTokenRes;
}
access_token 的有效期目前为 2 个小时,需定时刷新。文章来源:https://www.toymoban.com/news/detail-761822.html
实现类
@ApiOperation(value = "生成二维码", httpMethod = "GET")
@RequestMapping(value = "/api/qrcode", method = RequestMethod.GET)
@Transactional
public WxaQrCodeUrlResponse getQrCode(HttpServletRequest request) throws Exception {
WxaQrCodeUrlResponse res = new WxaQrCodeUrlResponse();
Date now = new Date();
// 获取accessToken
String accessToken = null;
if(null != objects.get("date_time")){
accessToken = String.valueOf(objects.get("access_token"));
}
Long date = 0L;
if(null != objects.get("date_time")) {
date = Long.valueOf(String.valueOf(objects.get("date_time")));
}
if(null == accessToken || now.getTime()-date >= 2*60*60*1000){
JSONObject accessTokenRes = getToken();
objects.put("access_token",accessTokenRes.get("access_token"));
objects.put("date_time",now.getTime());
accessToken = String.valueOf(objects.get("access_token"));
}
if (StringUtils.isEmpty(accessToken)) {
res.setMessage("获取token失败");
res.setCode(Constants.SC_MSG);
return res;
}
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
// 请求参数
Map<String,Object> body = new HashMap<>();
body.put("scene", "自定义参数");
body.put("env_version", "release");
// 默认是false,是否需要透明底色,为 true 时,生成透明底色的小程序
body.put("is_hyaline", false);
byte[] bytes = HttpClientUtils.getWechatQrcodeByHttpClient(url, body);
String fileName = "wxqrcode.png";
String path = "文件夹路径" + File.separator + fileName;
WxaCodeUtil.saveQrCodeToLocal(bytes, path);
// TODO 图片处理,返回图片
// 删除本地文件
new File(path).delete();
res.setCode(Constants.SC_OK);
return res;
}
实际遇到的问题:采用透明底色生成的二维码,在微信中按压图片,不能识别小程序文章来源地址https://www.toymoban.com/news/detail-761822.html
到了这里,关于【Java】微信小程序二维码(后台,附获取accessToken)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!