java生成微信小程序二维码,前台扫描识别

article/2025/9/20 5:16:55

 微信小程序官方接口参考地址:wxacode.getUnlimited | 微信开放文档

 1.OkHttpUtils 

package com.battle.platform.utils;import okhttp3.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.Map;@Component
public class OkHttpUtils {private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");private static final MediaType XML = MediaType.parse("application/xml; charset=utf-8");@Autowiredprivate OkHttpClient okHttpClient;/*** get 请求* @param url       请求url地址* @return string* */public String doGet(String url) {return doGet(url, null, null);}/*** get 请求* @param url       请求url地址* @param params    请求参数 map* @return string* */public String doGet(String url, Map<String, String> params) {return doGet(url, params, null);}/*** get 请求* @param url       请求url地址* @param headers   请求头字段 {k1, v1 k2, v2, ...}* @return string* */public String doGet(String url, String[] headers) {return doGet(url, null, headers);}/*** get 请求* @param url       请求url地址* @param params    请求参数 map* @param headers   请求头字段 {k1, v1 k2, v2, ...}* @return string* */public String doGet(String url, Map<String, String> params, String[] headers) {StringBuilder sb = new StringBuilder(url);if (params != null && params.keySet().size() > 0) {boolean firstFlag = true;for (String key : params.keySet()) {if (firstFlag) {sb.append("?").append(key).append("=").append(params.get(key));firstFlag = false;} else {sb.append("&").append(key).append("=").append(params.get(key));}}}Request.Builder builder = new Request.Builder();if (headers != null && headers.length > 0) {if (headers.length % 2 == 0) {for (int i = 0; i < headers.length; i = i + 2) {builder.addHeader(headers[i], headers[i + 1]);}} else {
//                log.warn("headers's length[{}] is error.", headers.length);}}Request request = builder.url(sb.toString()).build();
//        log.info("do get request and url[{}]", sb.toString());return execute(request);}/*** post 请求* @param url       请求url地址* @param params    请求参数 map* @return string*/public String doPost(String url, Map<String, String> params) {FormBody.Builder builder = new FormBody.Builder();if (params != null && params.keySet().size() > 0) {for (String key : params.keySet()) {builder.add(key, params.get(key));}}Request request = new Request.Builder().url(url).post(builder.build()).build();
//        log.info("do post request and url[{}]", joinUrl(url));return execute(request);}/*** post 请求, 请求数据为 json 的字符串* @param url       请求url地址* @param json      请求数据, json 字符串* @return string*/public String doPostJson(String url, String json) {
//        log.info("do post request and url[{}]", joinUrl(url));return exectePost(url, json, JSON);}/*** post 请求, 请求数据为 xml 的字符串* @param url       请求url地址* @param xml       请求数据, xml 字符串* @return string*/public String doPostXml(String url, String xml) {
//        log.info("do post request and url[{}]", joinUrl(url));return exectePost(url, xml, XML);}private String exectePost(String url, String data, MediaType contentType) {RequestBody requestBody = RequestBody.create(contentType, data);Request request = new Request.Builder().url(url).post(requestBody).build();return execute(request);}private String execute(Request request) {Response response = null;try {response = okHttpClient.newCall(request).execute();if (response.isSuccessful()) {String responseBodyStr = response.body().string();System.out.println(responseBodyStr);return responseBodyStr;}} catch (Exception e) {
//            log.error(ExceptionUtils.getStackTrace(e));} finally {if (response != null) {response.close();}}return "";}/*** post 请求, 请求数据为 json 的字符串* @param url       请求url地址* @param json      请求数据, json 字符串* @return string*/public Response doPostJsonGetWxMiniAppQrCode(String url, String json) {RequestBody requestBody = RequestBody.create(JSON, json);Request request = new Request.Builder().url(url).post(requestBody).build();Response response = null;try {response = okHttpClient.newCall(request).execute();if (response.isSuccessful()) {return response;}} catch (Exception e) {
//            log.error(ExceptionUtils.getStackTrace(e));} finally {if (response != null) {response.close();}}return null;}
}

2. controller--Java代码

    @ApiOperation(value = "获取微信小程序邀请二维码图片base64", notes = "获取微信小程序邀请二维码图片base64", httpMethod = "GET")@GetMapping(path = "getWxMinappQrBase64")public PlatformResponse<String> getUnlimited() {Map<String, String> paramsAccessToken = new HashMap<>();paramsAccessToken.put("appid", "ddddddddddddd");paramsAccessToken.put("secret", "aaaaaaaaaaaaa");paramsAccessToken.put("grant_type", "client_credential");String responseAccessToken = null;Map<String, String> resultMapAccessToken = new HashMap<>();try {responseAccessToken = okHttpUtils.doGet("https://api.weixin.qq.com/cgi-bin/token", paramsAccessToken);resultMapAccessToken = (Map<String, String>) JsonUtils.decodeObject(responseAccessToken, Map.class);log.info(String.format("=========================小程序全局唯一后台接口调用凭据access_token===================================="));if (resultMapAccessToken == null || resultMapAccessToken.size() <= 0) {log.info(String.format("=========================第一次失败,重新获取access_token===================================="));//如果失败,则再次获取responseAccessToken = okHttpUtils.doGet("https://api.weixin.qq.com/cgi-bin/token", paramsAccessToken);resultMapAccessToken = (Map<String, String>) JsonUtils.decodeObject(responseAccessToken, Map.class);if (resultMapAccessToken == null || resultMapAccessToken.size() <= 0) {log.info(String.format("=========================第二次失败,重新获取access_token===================================="));responseAccessToken = okHttpUtils.doGet("https://api.weixin.qq.com/cgi-bin/token", paramsAccessToken);resultMapAccessToken = (Map<String, String>) JsonUtils.decodeObject(responseAccessToken, Map.class);if (resultMapAccessToken == null || resultMapAccessToken.size() <= 0) {log.info(String.format("=========================第三次失败,抛出异常access_token===================================="));return PlatformResponse.error(APIResponseStatus.U8993, APIResponseStatus.U8993.message());}}}} catch (Exception e) {log.info("============================================抓到了微信抛出的异常,捕获后重新调用接口获取============================================");responseAccessToken = okHttpUtils.doGet("https://api.weixin.qq.com/cgi-bin/token", paramsAccessToken);resultMapAccessToken = (Map<String, String>) JsonUtils.decodeObject(responseAccessToken, Map.class);if (resultMapAccessToken == null || resultMapAccessToken.size() <= 0) {log.info(String.format("=========================第三次失败,抛出异常===================================="));return PlatformResponse.error(APIResponseStatus.U8993, APIResponseStatus.U8993.message());}}if (resultMapAccessToken.containsKey("access_token")) {String accessToken = resultMapAccessToken.get("access_token");//获取当前登录用户邀请码String userId = UserUtils.getCurrentUserId();User user = userService.getUserById(userId);//scene:自定义特殊入参--入参值格式为【变量=value】String scene = "inviteCode=" + user.getInviteCode();//page: 扫描二维码后,跳转至某个页面String page = "pages/LiveRoom/LiveRoom/LiveRoom";//参考小程序开发文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html//POST 参数需要转成 JSON 字符串,不支持 form 表单提交。//接口只能生成已发布的小程序的二维码//调用分钟频率受限(5000次/分钟),如需大量小程序码,建议预生成String urlStr = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;//使用restTemplate发送post请求RestTemplate restTemplate = new RestTemplate();JSONObject json = new JSONObject();json.put("page", page);json.put("scene", scene);byte[] resultBytes = null;try {resultBytes = restTemplate.postForObject(urlStr, json, byte[].class);log.info(String.format("=========================获取二维码===================================="));if (resultBytes == null || resultBytes.length == 0) {log.info(String.format("=========================第一次失败,重新获取二维码===================================="));//如果失败,则再次获取resultBytes = restTemplate.postForObject(urlStr, json, byte[].class);if (resultBytes == null || resultBytes.length == 0) {log.info(String.format("=========================第二次失败,重新获取二维码===================================="));resultBytes = restTemplate.postForObject(urlStr, json, byte[].class);if (resultBytes == null || resultBytes.length == 0) {log.info(String.format("=========================第三次失败,抛出异常二维码===================================="));return PlatformResponse.error(APIResponseStatus.U8994, APIResponseStatus.U8994.message());}}}} catch (Exception e) {log.info("============================================抓到了微信抛出的异常,捕获后重新调用接口获取============================================");resultBytes = restTemplate.postForObject(urlStr, json, byte[].class);if (resultBytes == null || resultBytes.length == 0) {log.info(String.format("=========================第三次失败,抛出异常===================================="));return PlatformResponse.error(APIResponseStatus.U8994, APIResponseStatus.U8994.message());}}if (resultBytes != null && resultBytes.length > 0) {String resultImg = "data:image/png;base64," + Base64.getEncoder().encodeToString(resultBytes);return PlatformResponse.ok().resultData(resultImg);}}return PlatformResponse.error(APIResponseStatus.U8994, APIResponseStatus.U8994.message());}
 

3.前端微信小程序代码--解析微信扫码小程序二维码--解析入参:

if (options.scene) { //通过邀请进来的let scene = decodeURIComponent(options.scene);console.log(scene );let inviteCode = scene.slice(-4);console.log(inviteCode );}


http://chatgpt.dhexx.cn/article/BwLBGYtf.shtml

相关文章

微信小程序生成二维码

二维码又称二维条码&#xff0c;常见的二维码为QR Code&#xff0c;QR全称Quick Response&#xff08;Quick Response&#xff0c;反映出这种二维码具有“超高速识读”的特点。“Quick Response Code”也就是“快速响应码”&#xff09;&#xff0c;是一个近几年来移动设备上超…

【java】Java生成微信小程序二维码

文章目录 前言应用场景微信小程序官网 1.RestTemplate方式核心代码getAccessToken 2. Unirest方式Maven依赖核心代码 3. okhttp3方式Maven依赖核心代码 4. Apache的HttpClient方式Maven依赖核心代码 5. JDK自带的URLConnection方式核心代码 其它细节构建参数mapbyte[]数组 前言…

如何生成背景透明的微信小程序二维码

如何生成背景透明的微信小程序二维码 透明背景参数 透明背景参数 is_hyaline 是否需要透明底色&#xff0c; is_hyaline 为true时&#xff0c;生成透明底色的小程序码 public function getQRCodeB($scene,$page,$widthnull,$auto_colornull, $line_colornull){$url ApiUrl…

java创建微信小程序二维码

创建微信小程序二维码有两个接口需要 一个是获取tocken的接口 一个是生成二维码的接口 获取tocken接口 //**********填写你的小程序appid 和 secret public static String getAccessToken() throws IOException {//获取tokcen接口String url "https://api.weixin.qq.com…

带参数的微信小程序二维码生成

使用场景&#xff1a;扫描生成的小程序码&#xff0c;打开小程序并调整到指定页面并携带参数&#xff0c;比如购买商品详情页面。 使用方法&#xff1a;通过调用微信小程序二维码接口生成。 接口文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/api/qrcod…

springboot实现微信小程序二维码生成

一、微信小程序创建 先要去微信公众平台注册一个小程序,每个小程序都有相应的AppID(小程序ID)和AppSecret(小程序密钥),它们是获取ACCESS_TOKEN所需要的。微信公众平台地址: https://mp.weixin.qq.com/ 注册添加小程序后会取得AppID(小程序ID)和AppSecret(小程序密钥): 二…

微信小程序二维码生成工具,后端二维码生成工具类。

微信小程序开发二维码生成工具类 前言业务背景设计思路具体实现接下来我们进行工具的改造 前言 或许这是你搜寻的第n篇文章来解决你项目中的问题&#xff0c;虽然我不能去替你完全适配你的业务需求&#xff0c;但是我可以给你一个解决问题的思路&#xff01;或许 这是你第一次…

生成普通的微信小程序二维码

1.登录微信小程序后台传送门 开发管理->开发设置->扫普通链接二维码打开小程序 在这里开通此功能,然后按微信定义的规则配置具体的地址,等正式上线的时候再发布该规则 2.然后按照配置的二维码规则(上图第三项)去直接生成普通的二维码(可自行携带参数),然后微信扫一扫就…

JAVA微信小程序二维码生成,Base64格式输出。

调用接口必要条件&#xff0c;微信公众号的APPID&#xff0c;APPSECRET 微信公众平台小程序二维码文档 // 先获取AccessToken,不然无法请求调取小程序二维码/*** 获取微信小程序接口access_token凭证*/ public Map<String,String> getAccessToken() {String url "h…

微信小程序二维码生成器

微信小程序二维码生成器 项目介绍 项目是一个简单实用的二维码生成器。可以输入相关的网址&#xff0c;生成二维码图片&#xff0c;可保存分享。 项目展示 项目代码 index.wxml <!--pages/main/index.wxml--> <view class"container-box"><view …

微信小程序二维码生成

首先需要引入二维码生成工具weapp-qrcode.js或者直接安装npm install weapp-qrcode --save import QRCode from ../../utils/weapp-qrcode.js 页面使用cavas <canvas style"width:160rpx;height:160rpx" canvas-id"myQrcode"></canvas> 生…

微信小程序任意指定页面生成二维码

在日常微信小程序运营中&#xff0c;文章&#xff0c;和朋友圈海报内总会用到微信小程序特定页面二维码 第一步&#xff1a;登录微信公众平台https://mp.weixin.qq.com/ 第二步&#xff1a;点击右上角工具-》生成小程序码 第三步&#xff1a;将鼠标放置“获取更多页面路径”&a…

微信小程序实现输入内容生成二维码(canvas)

1.封装好的QRcode的js文件 !function() {function r(r, o) {var f;r > o && (f r, r o, o f), f o, f * o, f o, f >> 1, p[f r] 1;}function o(o, f) {var e;for (F[o l * f] 1, e -2; e < 2; e) F[o e l * (f - 2)] 1, F[o - 2 l * (f e…

二、业务数据采集平台

第1章 电商业务简介 1.1 电商业务流程 电商的业务流程可以以一个普通用户的浏览足迹为例进行说明&#xff0c;用户点开电商首页开始浏览&#xff0c;可能会通过分类查询也可能通过全文搜索寻找自己中意的商品&#xff0c;这些商品无疑都是存储在后台的管理系统中的。 当用户寻找…

从0到1搭建大数据平台之数据采集系统

关于从0到1搭建大数据平台&#xff0c;之前的一篇博文《如何从0到1搭建大数据平台》已经给大家介绍过了&#xff0c;接下来我们会分步讲解搭建大数据平台的具体注意事项。 一、“大”数据 海量的数据 当你需要搭建大数据平台的时候一定是传统的关系型数据库无法满足业务的存储计…

大数据之数据采集

本篇主要介绍目前网站数据采集的主流方式&#xff0c;之后篇章会介绍客户端数据采集目前主流的实现方式。 目前有很多数据采集云平台&#xff0c;如Google anylytics&#xff0c;百度统计&#xff0c;腾讯统计等等&#xff0c;还有一些平台也非常不错&#xff1a; 一.友盟&…

3. 业务数据采集平台概述

3. 业务数据采集平台概述 电商业务简介电商业务流程电商常识SKU和SPU平台属性和销售属性 电商业务数据电商系统表结构活动信息表&#xff08;activity_info&#xff09;活动规则表&#xff08;activity_rule&#xff09;活动商品关联表&#xff08;activity_sku&#xff09;平台…

测量数据采集分析平台

青创智通科技测量数据采集分析平台&#xff0c;改变传统纸张方式&#xff0c;快速实现生产质量管理的数字化、智能化、平台化。 产品优势&#xff1a; 1、检测智联与精益生产&#xff1a;实现产品制造过程各部位的尺寸测量、测量信息采集、实时传输及数据分析。 2、与各种智…

数据运营平台-数据采集

目录 行为数据采集 业务数据采集与转换 第三方系统API对接 用户数据关联 人工数据采集 数据输出 行为数据采集 1.埋点采集 ①跨平台打通 确定性方法识别 利用用户帐号体系中&#xff0c;可以是系统生成的 UserID&#xff0c;可以是手机号&#xff0c;也可以是邮箱&am…

大数据采集概述

文章目录 大数据采集概述1.互联网大数据与采集1.1互联网大数据来源1.社交媒体2.社交网络3.百科知识库4.新闻网站5.评论信息6.位置型信息 1.2 互联网大数据的特征1.大数据类型和语义更加丰富2.数据的规范化程度弱3.数据的流动性更大4.数据的开放性更好5.数据的来源更加丰富6.互联…