当前位置:   article > 正文

java生成小程序二维码_java生成微信小程序二维码

java生成微信小程序二维码

上周做了java生成二维码功能之后,这周又有新的需求出现了,可谓是唯一不变的就是变化。

这周的需求是通过java接口返回小程序码,然后提供给微信扫描跳转到小程序并显示指定的数据。

这里需要用到小程序的相关apiwxacode.getUnlimited | 微信开放文档

话不多说直接上代码

controller代码

  1. package com.wx.controller;
  2. import cn.hutool.core.io.IoUtil;
  3. import cn.hutool.http.HttpUtil;
  4. import cn.hutool.json.JSONObject;
  5. import cn.hutool.json.JSONUtil;
  6. import com.wx.common.utils.HttpUtils;
  7. import io.swagger.annotations.Api;
  8. import io.swagger.annotations.ApiOperation;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.web.bind.annotation.PostMapping;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestParam;
  13. import org.springframework.web.bind.annotation.RestController;
  14. import org.springframework.web.multipart.MultipartFile;
  15. import javax.servlet.http.HttpServletResponse;
  16. import java.io.InputStream;
  17. import java.io.PrintWriter;
  18. import java.net.HttpURLConnection;
  19. import java.net.URL;
  20. import java.util.HashMap;
  21. /**
  22. * //TODO 添加类/接口功能描述
  23. *
  24. * @author 刘朋
  25. * <br/>date 2022-06-21
  26. */
  27. @Slf4j
  28. @RestController
  29. @RequestMapping("/applet")
  30. @Api(tags = "小程序")
  31. public class AppletController {
  32. @ApiOperation(value = "test")
  33. @PostMapping("/test")
  34. public void importData(HttpServletResponse response) throws Exception {
  35. response.setContentType("image/gif");
  36. response.setHeader("Pragma", "No-cache");
  37. response.setHeader("Cache-Control", "no-cache");
  38. response.setDateHeader("Expires", 0);
  39. String accessToken = getAccessToken();
  40. //文档地址 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
  41. String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken;
  42. // 发送请求参数
  43. JSONObject paramJson = new JSONObject();
  44. paramJson.set("page", "pages/index/index");
  45. paramJson.set("check_path", false);
  46. paramJson.set("width", 280);
  47. //这里传输的数据不能中文,要改掉!!!
  48. paramJson.set("scene", "传输的数据");
  49. //设置小程序码版本
  50. //paramJson.set("env_version","release"); 默认正式
  51. paramJson.set("env_version","trial"); //体验版
  52. // paramJson.set("env_version","develop"); //开发版
  53. InputStream inputStream = HttpUtils.postInputStream(url, paramJson);
  54. //将流写出到response
  55. IoUtil.copy(inputStream, response.getOutputStream());
  56. }
  57. public String getAccessToken(){
  58. String appid="填自己的appid";
  59. String secret="填自己的密钥";
  60. String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
  61. String result = HttpUtil.get(url);
  62. JSONObject jsonObject = JSONUtil.parseObj(result);
  63. return jsonObject.get("access_token").toString();
  64. }
  65. }

工具类代码

  1. package com.wx.common.utils;
  2. import cn.hutool.core.io.IoUtil;
  3. import cn.hutool.json.JSONObject;
  4. import java.io.InputStream;
  5. import java.io.PrintWriter;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. /**
  9. * http工具类
  10. *
  11. * @author 刘朋
  12. * <br/>date 2022-06-21
  13. */
  14. public class HttpUtils {
  15. public static InputStream postInputStream(String urlStr , JSONObject paramJson ) throws Exception {
  16. //获取小程序码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
  17. URL url = new URL(urlStr);
  18. HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
  19. httpURLConnection.setRequestMethod("POST");// 提交模式
  20. // 发送POST请求必须设置如下两行
  21. httpURLConnection.setDoOutput(true);
  22. httpURLConnection.setDoInput(true);
  23. // 获取URLConnection对象对应的输出流
  24. PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
  25. printWriter.write(paramJson.toString());
  26. // flush输出流的缓冲
  27. printWriter.flush();
  28. String contentType = httpURLConnection.getContentType();
  29. if (contentType.contains("json")) {
  30. IoUtil.copy(httpURLConnection.getInputStream(), System.out);
  31. throw new IllegalArgumentException("调用微信小程序生成接口出错");
  32. } else {
  33. //开始获取数据
  34. return httpURLConnection.getInputStream();
  35. }
  36. }
  37. }

小程序获取传参的代码

  1. onLoad(query) {
  2. if (wx.getUserProfile) {
  3. this.setData({
  4. canIUseGetUserProfile: true
  5. })
  6. }
  7. // scene 需要使用 decodeURIComponent 才能获取到生成二维码时传入的 scene
  8. const scene = decodeURIComponent(query.scene)
  9. console.log("scene2=="+scene);
  10. this.setData({ msg: scene })
  11. }

实现效果

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/467326
推荐阅读
相关标签
  

闽ICP备14008679号