java生成小程序二维码

news/2024/7/20 3:00:02 标签: 小程序

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

实现效果

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


http://www.niftyadmin.cn/n/860466.html

相关文章

nginx实现https

今天记录一下使用nginx&#xff0c;来实现https的代理&#xff0c;这里需要两个文件&#xff08;证书和密钥&#xff09;&#xff0c;我这里的证书和密钥是业务部门给过来的&#xff0c;所以直接拿过来用了&#xff0c;把证书放到conf文件夹下文件名对应上就可以了。 server {…

git添加.gitignore文件忽略提交

文件名为.gitignore放到项目目录下 文件内容 .idea .gradle *.iml *.class *.log /target/ */target/ */log/ /.metadata/如果想要忽略某个文件可以直接右键选择忽略

mybatis查询子表

今天来记录一下 mybatis自动查询子表数据 查询结果类如下&#xff1a; public class SoundPageVO {private String indexId;private String providerId;private String providerName;private Integer soundType;private List<SoundInfoVO> soundInfoVOList;} 方法一&a…

使用DockerCompose部署Mysql数据库

今天来记录一下使用DockerCompose部署Mysql数据库。 在使用DockerCompose部署之前&#xff0c;首先需要DockerCompose环境安装好&#xff0c;如果没有环境的话&#xff0c;可以参考博主之前的博客&#xff1a;DockerCompose部署项目示例_月月._.的博客-CSDN博客 1.首先需要创…

使用DockerCompose部署Redis单机版

今天来记录一下 使用DockerCompose部署Redis单机版服务的过程。 最简单版redis 新建路径并创建DockerCompose文件 mkdir /home/redis cd /home/redis touch docker-compose.yml vim docker-compose.yml DockerCompose文件的内容如下&#xff1a; services:redisServer1:imag…

使用DockerCompose部署Redis集群版

我们已经记录了使用DockerCompose部署redis单机版的过程&#xff0c;很简单大家可以前往看一下 使用DockerCompose部署Redis单机版_月月._.的博客-CSDN博客 下面我们来记录一下使用DockerCompose部署redis集群版的过程 创建DockerCompose文件 cd /home/redis touch docker-c…

使用DockerCompose部署Redis高可用哨兵版——整合SpringBoot

今天来记录一下使用DockerCompose来部署Redis高可用哨兵版&#xff0c;并整合springBoot代码实现。 前面两篇博客&#xff08;redis单机版和redis集群版&#xff09;的实操还是挺顺利的 &#xff0c;到这里了出现了一些状况&#xff0c;解决这些问题花费了一些功夫 &#xff0c…

使用DockerCompose部署Java服务

今天来记录一下使用功能DockerCompose来进行部署java服务&#xff0c;直接上配置。 version: "3.0" services:robotServer:image: java:8container_name: robot_servervolumes:- /home/ubuntu2004/robot:/home- /home/ubuntu2004/robot/log:/logenvironment:spring.…