赞
踩
上周做了java生成二维码功能之后,这周又有新的需求出现了,可谓是唯一不变的就是变化。
这周的需求是通过java接口返回小程序码,然后提供给微信扫描跳转到小程序并显示指定的数据。
这里需要用到小程序的相关apiwxacode.getUnlimited | 微信开放文档
话不多说直接上代码
controller代码
- package com.wx.controller;
-
- import cn.hutool.core.io.IoUtil;
- import cn.hutool.http.HttpUtil;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import com.wx.common.utils.HttpUtils;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
-
- import javax.servlet.http.HttpServletResponse;
- import java.io.InputStream;
- import java.io.PrintWriter;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.HashMap;
-
- /**
- * //TODO 添加类/接口功能描述
- *
- * @author 刘朋
- * <br/>date 2022-06-21
- */
-
- @Slf4j
- @RestController
- @RequestMapping("/applet")
- @Api(tags = "小程序")
- public class AppletController {
-
- @ApiOperation(value = "test")
- @PostMapping("/test")
- public void importData(HttpServletResponse response) throws Exception {
- response.setContentType("image/gif");
- response.setHeader("Pragma", "No-cache");
- response.setHeader("Cache-Control", "no-cache");
- response.setDateHeader("Expires", 0);
-
- String accessToken = getAccessToken();
-
- //文档地址 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0
-
- String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
-
- // 发送请求参数
- JSONObject paramJson = new JSONObject();
- paramJson.set("page", "pages/index/index");
- paramJson.set("check_path", false);
- paramJson.set("width", 280);
- //这里传输的数据不能中文,要改掉!!!
- paramJson.set("scene", "传输的数据");
- //设置小程序码版本
- //paramJson.set("env_version","release"); 默认正式
- paramJson.set("env_version","trial"); //体验版
- // paramJson.set("env_version","develop"); //开发版
-
- InputStream inputStream = HttpUtils.postInputStream(url, paramJson);
- //将流写出到response
- IoUtil.copy(inputStream, response.getOutputStream());
-
- }
-
-
- public String getAccessToken(){
- String appid="填自己的appid";
- String secret="填自己的密钥";
- String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
- String result = HttpUtil.get(url);
- JSONObject jsonObject = JSONUtil.parseObj(result);
- return jsonObject.get("access_token").toString();
- }
- }
工具类代码
- package com.wx.common.utils;
-
- import cn.hutool.core.io.IoUtil;
- import cn.hutool.json.JSONObject;
-
- import java.io.InputStream;
- import java.io.PrintWriter;
- import java.net.HttpURLConnection;
- import java.net.URL;
-
- /**
- * http工具类
- *
- * @author 刘朋
- * <br/>date 2022-06-21
- */
- public class HttpUtils {
-
- public static InputStream postInputStream(String urlStr , JSONObject paramJson ) throws Exception {
- //获取小程序码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
- URL url = new URL(urlStr);
-
- HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
- httpURLConnection.setRequestMethod("POST");// 提交模式
- // 发送POST请求必须设置如下两行
- httpURLConnection.setDoOutput(true);
- httpURLConnection.setDoInput(true);
- // 获取URLConnection对象对应的输出流
- PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
-
- printWriter.write(paramJson.toString());
- // flush输出流的缓冲
- printWriter.flush();
- String contentType = httpURLConnection.getContentType();
- if (contentType.contains("json")) {
- IoUtil.copy(httpURLConnection.getInputStream(), System.out);
- throw new IllegalArgumentException("调用微信小程序生成接口出错");
- } else {
- //开始获取数据
- return httpURLConnection.getInputStream();
- }
-
- }
- }
小程序获取传参的代码
- onLoad(query) {
- if (wx.getUserProfile) {
- this.setData({
- canIUseGetUserProfile: true
- })
- }
- // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
- const scene = decodeURIComponent(query.scene)
- console.log("scene2=="+scene);
-
- this.setData({ msg: scene })
- }
实现效果
扫描微信二维码之后能够在小程序端获取到“传输的数据”
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。