通过SpringBoot生成微信小程序二维码,跳转指定页面

2023-10-27

以下通过两种方法实现生成微信小程序二维码保存

 通过华为存储obs服务

通过(IO流:字符流的使用、读取字符流、字符流写入)

微信小程序获取二维码参数

onLoad: function (options) {
	console.log(options);
   //方式二 微信官方提供了这个这个扫码是使用微信那边普通网址链接
	if (options.mid) { 
		//  解析二维码中地址中的参数   mid为二维码中地址带的参数名 如login/login?mid=xxx
        console.log(decodeURIComponent(options.mid));
	}
   //接受到参数 方式二
    //不解析也可以获取到二维码参数
	console.log(options.mid);
}

源码

@PostMapping("save")
    public AjaxJson save(WechatCode wechatCode, Model model) throws Exception {
     
//通过该链接请求携带自己的APPID +SECRET 获取access_token
 HttpResponse response = HttpRequest.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WechatUtil.APPID + "&secret=" + WechatUtil.SECRET + "").execute();
        JSONObject tokenJson = JSON.parseObject(response.body());
        if (!tokenJson.containsKey("access_token")) {
            return AjaxJson.error("access_token为空");
        }
//得到的accessToken 
        String accessToken = tokenJson.get("access_token").toString();
        String urls = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" + accessToken;
        Map<String, Object> param = new HashMap<>();
        //mid:页面携带的参数mid=" + 生成的参数
        param.put("path", "pages/login/login?mid=" + wechatCode.getM().getId());
        param.put("width", 430);
        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);
        try {
            URL url = new URL(urls);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("POST");// 提交模式
            httpURLConnection.setConnectTimeout(10000);//连接超时 单位毫秒
            httpURLConnection.setReadTimeout(10000);//读取超时 单位毫秒
            // 发送POST请求必须设置如下两行
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
            printWriter.write(JSON.toJSONString(param));
            // flush输出流的缓冲
            printWriter.flush();
            
             //HuaweiObsUtil使用华为存储bos(自行封装)
            String name = System.currentTimeMillis() + ".png";
            InputStream inputStream=httpURLConnection.getInputStream();
            String path=HuaweiObsUtil.upload(inputStream, name);
            log.info("存储服务器返回的路径:{},",path)

         //不使用云存储通过字符流写入到磁盘

            /*
* 
* BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
            OutputStream os = new FileOutputStream(new File("二维码生成地址"));
            int len;
            //设置缓冲写入
            byte[] arr = new byte[2048];
            while ((len = bis.read(arr)) != -1) {
                os.write(arr, 0, len);
                os.flush();
            }
            os.close();
* */


          
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxJson.error("操作异常"+e);
        }

   return AjaxJson.success("保存成功");
    }

华为云OBS对象存储工具类


import com.obs.services.ObsClient;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
 * 华为云OBS对象存储工具类
 */
public class HuaweiObsUtil {
/* 初始化OBS客户端所需的参数 */

    //获取服务终端节点
    private static final String Endpoint = "";
   //域名的一个访问
    private static final String URL = "";  
    //创建桶的名称
    private static final String bucketName = ""; 
    //Obs的访问秘钥【ak,sk】
    private static final String AK = ""; 
    private static final String SK = ""; 

    //File 
    public static String upload(File file, String filename) {
        // 创建ObsClient实例
        ObsClient obsClient = new ObsClient(AK, SK, Endpoint);

        // localfile为待上传的本地文件路径,需要指定到具体的文件名
        obsClient.putObject(bucketName, filename, file);
        try {
            obsClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return URL + filename;
    }
    //InputStream 
    public static String upload(InputStream fis, String filename) {
        // 创建ObsClient实例
        ObsClient obsClient = new ObsClient(AK, SK, Endpoint);

        // 待上传的本地文件路径,需要指定到具体的文件名
        obsClient.putObject(bucketName, filename, fis);
        try {
            obsClient.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return URL + filename;
    }
<dependency>
	<groupId>com.huaweicloud</groupId>
	<artifactId>esdk-obs-java</artifactId>
	<version>3.20.6.1</version>
</dependency>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过SpringBoot生成微信小程序二维码,跳转指定页面 的相关文章

随机推荐

  • moduleName is declared but its value is never read.ts(6133)报错解析

    问题重现 当使用ts语法导入第三方库时 比如koa模块 这时会发现出现这个错误 这个错误因为没有默认导出 问题原因 一般我们使用ts导入其他模块时都会有一个声明文件 不明白可以看我另外一篇 博客 我们进入声明文件中可以发现模块是通过expo
  • 使用Easyexcel对Excel进行读写操作

    1 概述 EasyExcel是一个基于Java的简单 省内存的读写Excel的开源项目 在尽可能节约内存的情况下支持读写百M的Excel github地址 GitHub alibaba easyexcel 快速 简洁 解决大文件内存溢出的j
  • ES6模块

    项目目录 node modules package json server js public index html index js math js babelrc dist 搭建验证环境 npm init y npm install s
  • 小程序中使用for循环,并动态添加class

    前言 小程序中使用for循环 并动态添加class 实现效果 实现代码 index wxml中
  • 考研高数数二 一元函数积分学内容框架

    完整的思维导图链接 https zhimap com m NojzfjkC
  • 第46讲 Android Camera2 API AWB自动白平衡

    本讲是Android Camera专题系列的第46讲 我们介绍Android Camera2 API专题的AWB自动白平衡 包括如下内容 为什么要做白平衡 什么是自动白平衡 Android Camera颜色处理流程 AWB模式 AWB Lo
  • Java运算符优先级顺序

    Java运算符优先级顺序 图集说明 1 算数运算符 补充两个 单目运算符 正号 10 10 单目运算符 负号 n 10 n 10 1 除法规则 若两个操作数都是整型 结果也是整型 除数不能为0 若两个操作数有一个是浮点型 结果是浮点型 Sy
  • python爬虫十三:详细了解scrapy

    1 Scrapy log信息的认知 2019 01 19 09 50 48 scrapy utils log INFO Scrapy 1 5 1 started bot tencent 2019 01 19 09 50 48 scrapy
  • Matlab安装 MinGW-w64 编译器的方法

    最近用Matlab实现机器学习算法 学习到支持向量机时 提示需要运行lib svm包需要安装 MinGW w64 C 编译器 在这里把步骤列一下 1 下载MinGW w64 C 编译器 点击下载 安装时注意选择32位还是64位的 1 安装时
  • Windows混音器API使用

    1 首先用mixerGetNumDevs 函数获取系统中的混音器设备的数量 一般 机器上都至少有一个混音器设备 声卡 如果机器上没有连接其它的音频设备 那么也就只有声卡这一个混音器设备 我的机器上接有一个名为USB EMP Audio De
  • go-redis 框架基本使用

    文章目录 redis使用场景 下载框架和连接redis 1 安装go redis 2 连接redis 字符串操作 有序集合操作 流水线 事务 1 普通事务 2 Watch redis使用场景 缓存系统 减轻主数据库 MySQL 的压力 计数
  • 自适应控制设计(二)

    自适应控制设计 二 自适应控制基本思想 一文主要介绍了自适应控制设计的基本思路 但是针对控制率的设计没有具体说明 这里针对反馈控制率的设计步骤进行具体介绍 控制器设计基本思想 对于任何一个动态系统 我们都可以根据Lyapunov稳定性设计其
  • C++MFC编程之按钮控件Button、Radio Button和Check Box

    钮控件包括命令按钮 Button 单选按钮 Radio Button 和复选框 Check Box 等 命令按钮就是我们前面多次提到的狭义的按钮控件 用来响应用户的鼠标单击操作 进行相应的处理 它可以显示文本也可以嵌入位图 单选按钮使用时
  • 解决el-select下拉框多选在赋完值之后,不能对tag和已选中的值取消掉

    这种是原先的写法
  • 如何在Linux环境创建GRE Tunnel

    Question I want to connect to remote networks by using a GRE tunnel How can I create a GRE tunnel between two end points
  • ini配置文件读写操作入门

    ini配置文件读写操作入门 ini文件 Initialization file 这种类型的文件中通常存放的是一个程序的初始化信息 ini文件由若干个节 Section 组成 每个Section由若干键 Key 组成 每个Key可以赋相应的值
  • 大点云的可以用opencv和pcl结合粗配准

    比如 可以把点云转换为 tif 通过一部分截取8位图像 进行sift 将得到的内点序号序列 转换为三维坐标序列 然后将三维坐标转换为点云sift cloud1和sift cloud2 这时候 由于是一一对应的 即在pcl中 query in
  • 目标跟踪综述 (持续更新)

    这几天对目标跟踪挺感兴趣的 但是在CSDN和知乎上面找的相关介绍资料都看的一知半解 所以自己找了一篇 2022 04 26 发表的综述文章作下笔记学习下 目录 一 基于相关滤波的目标跟踪算法 1 相关滤波视频目标跟踪算法的框架 2 相关滤波
  • c#特性(Attribute)与反射(Reflection)学习

    概念 特性 Attribute 用于在运行时传递程序中各种元素 比如类 方法 结构 枚举 组件等 的行为信息的声明性标签 放置在他所修饰的元素前面用 包裹 用于添加元数据 如编译器指令和注释 描述 方法 类等其他信息 可以使用预定义的特性或
  • 通过SpringBoot生成微信小程序二维码,跳转指定页面

    以下通过两种方法实现生成微信小程序二维码保存 通过华为存储obs服务 通过 IO流 字符流的使用 读取字符流 字符流写入 微信小程序获取二维码参数 onLoad function options console log options 方式