微信小程序之生成二维码

首先先扯一些题外话,本人是java行业的小白,因为是改行做的java,之前的工作就不提了。

之前写过几篇随便,刚看了下,觉得比较low,就都删了,所以也算是进入java行业的第一篇随笔,如果有表述上或者技术上说的不到位的地方,请大佬们多多包涵,先谢过。

讲一下小程序的二维码的原因,是因为这个业务确实困扰了我好几天,还有小程序最近还是蛮火的,后期等支付功能做完了,会把支付功能也简单的捋一下。

我们公司的业务都是前后端分离的,我负责的是后端java,所以主要还是针对java部分讲一下。

回归正题,描述一下业务,利用小程序前端传参给后端,后端生成二维码,保存到本地,前端调用本地二维码图片,显示,用户可以扫描二维码获取相应界面。后端获取二维码的流程:向服务器发送url+appid和secret以获取token,再向服务器发送token和scene参数获取二维码参数,参数保存为图片格式。贴上主要代码:

//controller中处理主要业务

public R createRoomCode(int roomId) throws IOException {
//获取token_access
String params=grant_type_code+"&appid="+app_id+"&secret="+secret;
String sr = HttpRequest.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type", params);
JSONObject json=JSONObject.fromObject(sr);
String token_access=sr.substring(sr.indexOf(":")+2,sr.indexOf(",")-1);
String sceneStr=""+roomId;
HttpUtil.getminiqrQr(sceneStr,token_access);
return R.ok("succ");
}
//getminiqrQr类处理返回的二维码参数保存图片
public class HttpUtil {

public static Map getminiqrQr(String sceneStr, String accessToken) {
RestTemplate rest = new RestTemplate();
InputStream inputStream = null;
OutputStream outputStream = null;
try {
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken;
Map<String,Object> param = new HashMap<>();
param.put("scene", sceneStr);
param.put("path", "pages/bookinglist/bookinglist");
param.put("width", 300);
param.put("auto_color", false);
Map<String,Object> line_color = new HashMap<>();
line_color.put("r", 0);
line_color.put("g", 0);
line_color.put("b", 0);
param.put("line_color", line_color);
System.out.println("调用生成微信URL接口传参:" + param);
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
HttpEntity requestEntity = new HttpEntity(param, headers);
ResponseEntity<byte[]> entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);
System.out.println("调用小程序生成微信永久小程序码URL接口返回结果:" + entity.getBody());
byte[] result = entity.getBody();
inputStream = new ByteArrayInputStream(result);

File file = new File("D:/workSpace/wechat2.0/03-Source/java2.0/room/pic/1.png");
if (!file.exists()){
file.createNewFile();
}
outputStream = new FileOutputStream(file);
int len = 0;
byte[] buf = new byte[1024];
while ((len = inputStream.read(buf, 0, 1024)) != -1) {
outputStream.write(buf, 0, len);
}
outputStream.flush();
} catch (Exception e) {
System.out.println("调用小程序生成微信永久小程序码URL接口异常");
} finally {
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(outputStream != null){
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
}

下面的坑就是经验不足了,我启动后端服务器后,前端无法访问我上面指定图片保存的路径,后来问了大佬,在ieda项目resources文件夹下新建一个static文件夹,将图片放入其中,然后就可以在网页上请求路径格式如https://域名:端口号/项目名称/图片名称.png就可以访问了

前端直接访问这个路径就可以预览二维码。

参考网页找不到了,不过谢谢网上的大佬和公司的大佬。

猜你喜欢

转载自www.cnblogs.com/jpc123/p/8945606.html