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

2 篇文章 0 订阅
2 篇文章 0 订阅

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


一、功能描述

 参考微信短链接生成:
获取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<String, Object> 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<String, Object> 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;
    }

四、效果演示

 

 

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

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值