当前位置:   article > 正文

外部扫码跳转到微信小程序_外部跳转微信小程序 链接

外部跳转微信小程序 链接

在公司业务中,需要外部扫码后邀请好友进行注册,而正常生成的二维码无法实现(毕竟用的是微信的小程序),所以需要调用微信小程序的接口.

1.申请跳转链接

小程序管理 -> 开发设置 -> 扫普通链接二维码打开小程序

点击添加.

具体开发看微信手册

另外要说一点就是他的验证文件需要放在公网服务器上,否则微信接口访问不到则不能保存!

我是放在云服务器的nginx中,同时在html文件夹下创建一个文件夹保存,同时在nginx.conf中写入访问资源路径

  1. location /jckd {
  2. alias /usr/local/nginx/html/jckd/;
  3. }

该路径是我的解析文件保存的路径.

同时还有一个就是需要一个测试的访问链接,用于我们开发时测试使用,如果需要带参数跳转需要写明get带参跳转的参数示例

127.0.0.1/jckd/test?id=1

127.0.0.1/jckd/test/id/1

 保存后这个链接就是我们跳转到微信小程序的链接

然后可以自己现生成一个二维码测试一下二维码生成网站

当没有问题后,Java代码进行业务写入

生成二维码使用到了Google的依赖,同时还有生成二维码使用到的工具类

  1. <!--工具类-->
  2. <dependency>
  3. <groupId>cn.hutool</groupId>
  4. <artifactId>hutool-all</artifactId>
  5. <version>5.3.2</version>
  6. </dependency>
  7. <!-- 谷歌二维码生成工具 -->
  8. <dependency>
  9. <groupId>com.google.zxing</groupId>
  10. <artifactId>core</artifactId>
  11. <version>3.5.1</version>
  12. </dependency>
  13. <dependency>
  14. <groupId>com.google.zxing</groupId>
  15. <artifactId>javase</artifactId>
  16. <version>3.5.1</version>
  17. </dependency>

下面是微信扫码和其他外部网站扫码跳转实现代码:

  1. /**
  2. * 用户邀请码生成
  3. *
  4. * @param userId 邀请用户id
  5. * @param qrType 二维码类型(微信/H5)
  6. * @return Base64图片流
  7. * @throws AdminServiceException
  8. */
  9. @Override
  10. public String getInvUserQR(Integer userId, Integer qrType) throws Exception {
  11. //二维码配置类
  12. QrConfig qrConfig = new QrConfig(400, 400);
  13. qrConfig.setMargin(3);
  14. //二维码颜色
  15. qrConfig.setForeColor(Color.CYAN);
  16. //背景颜色
  17. qrConfig.setBackColor(Color.GRAY);
  18. qrConfig.setCharset(Charset.defaultCharset());
  19. //生成中间log(没有图片暂时不搞)
  20. //QrConfig.create().setImg("");
  21. String url = "";
  22. if (qrType == 1) url = "https://127.0.0.1/jckd/test?id=" + userId;
  23. //小程序未上线,无法获取跳转链接
  24. if (qrType == 2) {
  25. Map<String, Object> appletUrl = getAppletUrl(userId);
  26. url = appletUrl.get("url").toString();
  27. }
  28. if (StringUtils.isEmpty(url)) throw new AdminServiceException(ExceptionDefinition.QRCODE_URL_ERROR);
  29. //生成二维码
  30. BufferedImage qrCode = QrCodeUtil.generate(url, qrConfig);
  31. //转换流信息写出
  32. FastByteArrayOutputStream os = new FastByteArrayOutputStream();
  33. try {
  34. ImageIO.write(qrCode, "jpg", os);
  35. } catch (IOException e) {
  36. throw new AdminServiceException(ExceptionDefinition.QRCODE_CONVERSION_ERROR);
  37. }
  38. //解码抬头
  39. String base64 = "data:image/png;base64,";
  40. String encode = Base64.getEncoder().encodeToString(os.toByteArray());
  41. return base64 + encode;
  42. }
  43. //凭证调用
  44. public static String getAccessToken() throws IOException {
  45. //小程序APPID
  46. String appid = "APPID";
  47. //小程序secret
  48. String secret = "secret";
  49. String httpUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
  50. httpUrl = httpUrl + "&appid=" + appid + "&secret=" + secret;
  51. OkHttpClient okHttpClient = new OkHttpClient();
  52. String accessToken = okHttpClient.newCall(new Request.Builder().url(httpUrl).get().build()).execute().body().string();
  53. return accessToken;
  54. }
  55. /**
  56. * 生成跳转链接
  57. * 向微信接口请求外部跳转vx小程序的链接
  58. * 可能会失败,失败信息也由Map返回
  59. *
  60. * @param userId 邀请人ID
  61. * @return Map<String, Object>
  62. * @throws IOException
  63. */
  64. public static Map<String, Object> getAppletUrl(Integer userId) throws IOException {
  65. Map<String, Object> map = new HashMap<>();
  66. //接口地址
  67. String httpUrl = "https://api.weixin.qq.com/wxa/generatescheme?access_token=";
  68. //需要跳转的小程序路径
  69. String path = "pages/public/login";
  70. //获取AccessToken
  71. String AccessTokenJson = getAccessToken();
  72. //格式化返回数据
  73. JSONObject resultObject = JSONObject.parseObject(AccessTokenJson);
  74. String AccessToken = resultObject.getString("access_token");
  75. if (AccessToken == null) {
  76. AccessToken = resultObject.getString("errmsg");
  77. map.put("code", -1);//错误码
  78. map.put("msg", AccessToken);//错误信息
  79. } else {
  80. map.put("code", 0);
  81. try {
  82. String content = "";
  83. JSONObject jsonParam = new JSONObject();
  84. JSONObject jump_wxa = new JSONObject();
  85. //请求参数装填
  86. jump_wxa.put("path", path);
  87. jump_wxa.put("query", "id=" + userId);
  88. jump_wxa.put("env_version", "trial");
  89. jsonParam.put("jump_wxa", jump_wxa);
  90. jsonParam.put("expire_type", 1);
  91. jsonParam.put("expire_interval", 2);
  92. String params = jsonParam.toString();
  93. CloseableHttpClient httpClient = HttpClients.createDefault();
  94. RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(300 * 1000).setConnectTimeout(300 * 1000).build();
  95. HttpPost post = new HttpPost(httpUrl + AccessToken);
  96. post.setConfig(requestConfig);
  97. post.setHeader("Content-Type", "application/json;charset=utf-8");
  98. //URLEncoder.encode(name)
  99. StringEntity postingString = new StringEntity(params, "utf-8");
  100. post.setEntity(postingString);
  101. CloseableHttpResponse response = httpClient.execute(post);
  102. content = EntityUtils.toString(response.getEntity());
  103. JSONObject resultUrl = JSONObject.parseObject(content);
  104. String newUrl = resultUrl.getString("openlink");
  105. map.put("url", newUrl);
  106. System.out.println("WeChatInterfaceUtil.getWeixinUrl--" + newUrl);
  107. } catch (SocketTimeoutException e) {
  108. e.printStackTrace();
  109. } catch (Exception e) {
  110. e.printStackTrace();
  111. }
  112. }
  113. return map;
  114. }

最后当扫码后前端从onLoad可以获取一个q的数据,然后进行解码就可以获取到里面带参跳转的数据了,通过数据可以知道邀请人ID,然后进行相应的操作.

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

闽ICP备14008679号