当前位置:   article > 正文

微信生成短链接并点击跳转到微信小程序_generate_urllink

generate_urllink

        前言:首先我的业务通过短信发链接让用户点击链接跳转进小程序,但是在短信里点击默认跳转到浏览器,浏览器又不支持打开小程序的,正好微信有自带的短链接生成并自己跳转到微信里打开,废话不多说 直接看下面。


一、功能描述

 参考微信短链接生成:
获取URLLink | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-link/generateUrlLink.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E

二、操作步骤

1.微信提供的接口
POST https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN
2.在调用上面这个接口之前得先拿到access_token 获取接口调用凭据 
GET https://api.weixin.qq.com/cgi-bin/token
3.请求参数及返回参数

4.请求数据示例及返回数据示例

三、示例代码

获取 access_token 工具类
  1. package org.jeecg.modules.message.util;
  2. import cn.hutool.http.*;
  3. import cn.hutool.json.JSONObject;
  4. import cn.hutool.json.JSONUtil;
  5. import lombok.extern.slf4j.Slf4j;
  6. import org.jeecg.common.api.vo.Result;
  7. import org.jeecg.common.exception.JeecgBootException;
  8. import org.jeecg.common.util.RedisUtil;
  9. import org.springframework.beans.factory.annotation.Value;
  10. import org.springframework.stereotype.Component;
  11. import javax.annotation.Resource;
  12. import javax.crypto.Cipher;
  13. import javax.crypto.spec.IvParameterSpec;
  14. import javax.crypto.spec.SecretKeySpec;
  15. import java.io.UnsupportedEncodingException;
  16. import java.nio.charset.StandardCharsets;
  17. import java.security.MessageDigest;
  18. import java.security.NoSuchAlgorithmException;
  19. import java.util.*;
  20. /**
  21. * @author rwy
  22. * @date 2023-08-04 9:30
  23. */
  24. @Slf4j
  25. @Component
  26. public class WeChatUtil {
  27. @Resource
  28. private RedisUtil redisUtil;
  29. //微信小程序appId
  30. @Value("${wx.xcx.appId}")
  31. private String appId;
  32. //微信小程序secret
  33. @Value("${wx.xcx.appSecret}")
  34. private String appSecret;
  35. //存入缓存中的缓存名称 自定义
  36. @Value("${spring.application.name}")
  37. private String appName;
  38. /**
  39. * 请求微信接口服务,获取小程序全局唯一后台接口调用凭据(access_token)
  40. * @return
  41. */
  42. public String getAccessToken() {
  43. //如果缓存有token直接拿
  44. if (redisUtil.hasKey(appName+":wx_accss_token")) {
  45. return (String) redisUtil.get(appName+":wx_accss_token");
  46. }
  47. //没有去取
  48. try {
  49. String baseUrl = "https://api.weixin.qq.com/cgi-bin/token";
  50. HashMap<String, Object> requestParam = new HashMap<>();
  51. // appId
  52. requestParam.put("grant_type", "client_credential");
  53. // 唯一凭证id appid:(换成自己的)
  54. requestParam.put("appid", appId);
  55. // appSecret(小程序的唯一凭证密钥,换成自己的)
  56. requestParam.put("secret", appSecret);
  57. // 发送GET请求读取调用微信接口获取openid用户唯一标识
  58. String result = HttpUtil.get(baseUrl, requestParam);
  59. JSONObject jsonObject = JSONUtil.parseObj(result);
  60. log.info("获取微信access_token:"+jsonObject.toString());
  61. if (jsonObject.containsKey("access_token")) {
  62. String access_token = jsonObject.getStr("access_token");
  63. redisUtil.set(appName+":wx_accss_token", access_token, 2 * 60 * 60);
  64. } else {
  65. throw new JeecgBootException("获取微信授权失败!");
  66. }
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. }
  70. return (String) redisUtil.get(appName+":wx_accss_token");
  71. }
  72. }
请求代码
  1. /**
  2. * 微信订阅短链接消息
  3. * @param
  4. * @param
  5. * @return
  6. */
  7. public String generateUrllink(){
  8. String result = null;
  9. try {
  10. // 接口调用凭证:accessToken
  11. String accessToken = weChatUtil.getAccessToken();
  12. System.out.println(accessToken);
  13. String baseUrl = "https://api.weixin.qq.com/wxa/generate_urllink?access_token="+accessToken;
  14. HashMap<String, Object> requestParam = new HashMap<>();
  15. //跳转自己小程序的链接
  16. requestParam.put("path","");
  17. //带参 例如:id=1
  18. requestParam.put("query","");
  19. String jsonStr = JSONUtil.toJsonStr(requestParam);
  20. cn.hutool.http.HttpResponse response = HttpRequest.post(baseUrl)
  21. .header(Header.CONTENT_ENCODING, "UTF-8")
  22. .header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded")
  23. .body(jsonStr)
  24. .execute();
  25. if (response.getStatus() == HttpStatus.HTTP_OK) {
  26. com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response.body());
  27. String url_link = jsonObject.getString("url_link");
  28. result =url_link;
  29. System.out.println(result);
  30. }
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. return result;
  35. }

四、效果演示

 

 

温馨提示:记得在微信小程序开发管理里面配置域名啥的 不然跳转不了。

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号