java生成小程序二维码

上周做了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 刘朋
 * 
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 刘朋
 * 
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 })
  }

实现效果

扫描微信二维码之后能够在小程序端获取到“传输的数据”

你可能感兴趣的:(小程序,Java,小程序)