java生成微信小程序二维码,前台扫描识别
微信小程序官方接口参考地址: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生成微信小程序二维码,前台扫描识别相关推荐
- Java生成微信小程序二维码
Java生成微信小程序二维码 import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.Byt ...
- Java生成微信小程序二维码,5种实现方式,一个比一个简单
文章目录 前言 先看官网 一.JDK自带的URLConnection方式 二.Apache的HttpClient方式 三.okhttp3方式 四.Unirest方式 五.RestTemplate方式 ...
- 【java】Java生成微信小程序二维码
文章目录 前言 应用场景 微信小程序官网 1.RestTemplate方式 核心代码 getAccessToken 2. Unirest方式 Maven依赖 核心代码 3. okhttp3方式 Mav ...
- Java生成微信小程序二维码、上传至阿里云OSS
依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifac ...
- java生成微信小程序二维码(自定义带参)
准备工作: 1:获取微信小程序apiKey 2:获取微信小程序密钥 3:获取微信小程序页面链接 pom依赖: <dependency><groupId>com.alibaba& ...
- java获取微信小程序二维码
java获取微信小程序二维码 近期正好遇到了,随手记录下 首先获取微信小程序二维码需要小程序的appid 以及secret 然后根据appid和secret去获取小程序的token 即 access_ ...
- java获取微信小程序二维码图片并保存到本地
java获取微信小程序二维码保存到本地并返回图片,下次如果检查到本地有图片,那么就返回本地的图片,不再发起请求,否则重新发起请求并保存到本地,直接看代码吧. 获取access_token的方法可以参考 ...
- 生成微信小程序二维码(携带参数跳转指定页面)
需求:生成微信小程序二维码并携带参数,扫码跳转指定页面 获取WxMaService对象 WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl ...
- java创建微信小程序二维码
创建微信小程序二维码有两个接口需要 一个是获取tocken的接口 一个是生成二维码的接口 获取tocken接口 //**********填写你的小程序appid 和 secret public sta ...
- c# 生成微信小程序二维码
二维码生成 CreateWxCode("id=117", "pages/bookcheck/bookchecktime/bookchecktime", &quo ...
最新文章
- CreateJs入门必知必会
- mysql自带的监控报告_MYSQL监控-自带工具Query Profiler的使用
- [转]]将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
- mysql 存储过程 无限分类,查看新闻/公告--[转帖]mysql存储过程实现的无限级分类,前序遍历树...
- 简介Linux磁盘管理与文件系统
- Win7系统还原声音图标的方法
- Qt文档阅读笔记-官方Form Extractor Example实例解析
- web前端基础知识-(六)jQuery-补
- python自动化办公教程-python办公自动化:Excel操作入门
- 计算Pearson 相关系数的三种方式
- java多线程编程(一基础概念)
- 3D帧间匹配-----剔除动态障碍物
- Virtual-Taobao: Virtualizing Real-World Online Retail Environment for Reinforcement Learning
- K210入门,用wifi通讯
- Xcode免证书导出ipa文件
- Spring MVC原理解析
- 多人在线编辑文档 开发_太方便了,支持多人同时编辑,电脑和手机端实时同步保存...
- Linux 各种压缩、解压命令
- 和ts一般怎么玩_攻略|梦幻西游手游:金币小号怎么玩?高手一般都这么弄
- Python 画图之小黄人~