微信生成短链接并点击跳转到微信小程序
温馨提示:这篇文章已超过400天没有更新,请注意相关的内容是否还可用!
前言:首先我的业务通过短信发链接让用户点击链接跳转进小程序,但是在短信里点击默认跳转到浏览器,浏览器又不支持打开小程序的,正好微信有自带的短链接生成并自己跳转到微信里打开,废话不多说 直接看下面。
一、功能描述
参考微信短链接生成:
获取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 工具类
package org.jeecg.modules.message.util;
import cn.hutool.http.*;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.util.RedisUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
* @author rwy
* @date 2023-08-04 9:30
*/
@Slf4j
@Component
public class WeChatUtil {
@Resource
private RedisUtil redisUtil;
//微信小程序appId
@Value("${wx.xcx.appId}")
private String appId;
//微信小程序secret
@Value("${wx.xcx.appSecret}")
private String appSecret;
//存入缓存中的缓存名称 自定义
@Value("${spring.application.name}")
private String appName;
/**
* 请求微信接口服务,获取小程序全局唯一后台接口调用凭据(access_token)
* @return
*/
public String getAccessToken() {
//如果缓存有token直接拿
if (redisUtil.hasKey(appName+":wx_accss_token")) {
return (String) redisUtil.get(appName+":wx_accss_token");
}
//没有去取
try {
String baseUrl = "https://api.weixin.qq.com/cgi-bin/token";
HashMap requestParam = new HashMap();
// appId
requestParam.put("grant_type", "client_credential");
// 唯一凭证id appid:(换成自己的)
requestParam.put("appid", appId);
// appSecret(小程序的唯一凭证密钥,换成自己的)
requestParam.put("secret", appSecret);
// 发送GET请求读取调用微信接口获取openid用户唯一标识
String result = HttpUtil.get(baseUrl, requestParam);
JSONObject jsonObject = JSONUtil.parseObj(result);
log.info("获取微信access_token:"+jsonObject.toString());
if (jsonObject.containsKey("access_token")) {
String access_token = jsonObject.getStr("access_token");
redisUtil.set(appName+":wx_accss_token", access_token, 2 * 60 * 60);
} else {
throw new JeecgBootException("获取微信授权失败!");
}
} catch (Exception e) {
e.printStackTrace();
}
return (String) redisUtil.get(appName+":wx_accss_token");
}
}
请求代码
/**
* 微信订阅短链接消息
* @param
* @param
* @return
*/
public String generateUrllink(){
String result = null;
try {
// 接口调用凭证:accessToken
String accessToken = weChatUtil.getAccessToken();
System.out.println(accessToken);
String baseUrl = "https://api.weixin.qq.com/wxa/generate_urllink?access_token="+accessToken;
HashMap requestParam = new HashMap();
//跳转自己小程序的链接
requestParam.put("path","");
//带参 例如:id=1
requestParam.put("query","");
String jsonStr = JSONUtil.toJsonStr(requestParam);
cn.hutool.http.HttpResponse response = HttpRequest.post(baseUrl)
.header(Header.CONTENT_ENCODING, "UTF-8")
.header(Header.CONTENT_TYPE, "application/x-www-form-urlencoded")
.body(jsonStr)
.execute();
if (response.getStatus() == HttpStatus.HTTP_OK) {
com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(response.body());
String url_link = jsonObject.getString("url_link");
result =url_link;
System.out.println(result);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
四、效果演示
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!







