微信小程序官方接口参考地址: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 );}

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

  1. Java生成微信小程序二维码

    Java生成微信小程序二维码 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Byt ...

  2. Java生成微信小程序二维码,5种实现方式,一个比一个简单

    文章目录 前言 先看官网 一.JDK自带的URLConnection方式 二.Apache的HttpClient方式 三.okhttp3方式 四.Unirest方式 五.RestTemplate方式 ...

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

    文章目录 前言 应用场景 微信小程序官网 1.RestTemplate方式 核心代码 getAccessToken 2. Unirest方式 Maven依赖 核心代码 3. okhttp3方式 Mav ...

  4. Java生成微信小程序二维码、上传至阿里云OSS

    依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifac ...

  5. java生成微信小程序二维码(自定义带参)

    准备工作: 1:获取微信小程序apiKey 2:获取微信小程序密钥 3:获取微信小程序页面链接 pom依赖: <dependency><groupId>com.alibaba& ...

  6. java获取微信小程序二维码

    java获取微信小程序二维码 近期正好遇到了,随手记录下 首先获取微信小程序二维码需要小程序的appid 以及secret 然后根据appid和secret去获取小程序的token 即 access_ ...

  7. java获取微信小程序二维码图片并保存到本地

    java获取微信小程序二维码保存到本地并返回图片,下次如果检查到本地有图片,那么就返回本地的图片,不再发起请求,否则重新发起请求并保存到本地,直接看代码吧. 获取access_token的方法可以参考 ...

  8. 生成微信小程序二维码(携带参数跳转指定页面)

    需求:生成微信小程序二维码并携带参数,扫码跳转指定页面 获取WxMaService对象 WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl ...

  9. java创建微信小程序二维码

    创建微信小程序二维码有两个接口需要 一个是获取tocken的接口 一个是生成二维码的接口 获取tocken接口 //**********填写你的小程序appid 和 secret public sta ...

  10. c# 生成微信小程序二维码

    二维码生成 CreateWxCode("id=117", "pages/bookcheck/bookchecktime/bookchecktime", &quo ...

最新文章

  1. CreateJs入门必知必会
  2. mysql自带的监控报告_MYSQL监控-自带工具Query Profiler的使用
  3. [转]]将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
  4. mysql 存储过程 无限分类,查看新闻/公告--[转帖]mysql存储过程实现的无限级分类,前序遍历树...
  5. 简介Linux磁盘管理与文件系统
  6. Win7系统还原声音图标的方法
  7. Qt文档阅读笔记-官方Form Extractor Example实例解析
  8. web前端基础知识-(六)jQuery-补
  9. python自动化办公教程-python办公自动化:Excel操作入门
  10. 计算Pearson 相关系数的三种方式
  11. java多线程编程(一基础概念)
  12. 3D帧间匹配-----剔除动态障碍物
  13. Virtual-Taobao: Virtualizing Real-World Online Retail Environment for Reinforcement Learning
  14. K210入门,用wifi通讯
  15. Xcode免证书导出ipa文件
  16. Spring MVC原理解析
  17. 多人在线编辑文档 开发_太方便了,支持多人同时编辑,电脑和手机端实时同步保存...
  18. Linux 各种压缩、解压命令
  19. 和ts一般怎么玩_攻略|梦幻西游手游:金币小号怎么玩?高手一般都这么弄
  20. Python 画图之小黄人~

热门文章

  1. 多格式无水印录屏软件
  2. SQL日期函数获取系统当前时间
  3. html读写txt文件,JS读写文本文件示例代码
  4. 【智能优化算法-蝙蝠算法】基于混合粒子群和蝙蝠算法求解单目标优化问题附matlab代码
  5. 基于Elman神经网络的数据回归预测
  6. 2.ansible中常用模块
  7. coreldraw快速撤回_CorelDRAW快捷键:常用快捷键(1)
  8. mcuisp下载程序
  9. 犀牛插件-插件开发-rhino-插件开发形式
  10. java:ToStringBuilder.reflectionToString重写toString