微信生成外部链接

微信生成外部链接

一、前期准备工作

微信官方文档

注意:获取小程序 URL Link,适用于短信、邮件、网页、微信内等拉起小程序的业务场景。通过该接口,可以选择生成到期失效和永久有效的小程序链接,有数量限制,目前仅针对国内非个人主体的小程序开放,详见获取 URL Link

HTTPS调用请求地址:

POST https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN
1.导入微信小程序包依赖(pom中配置)
        <!--微信小程序工具包-->
        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-miniapp</artifactId>
            <version>4.0.0</version>
        </dependency>

2.配置微信的必要参数(yml文件中配置)
wx:
    miniapp:
        app-id: wxba11af1453cscs
        app-secret: f86410070e07cscscsc

3.微信配置

  1. 属性配置

    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;
    
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "wx.miniapp")
    public class WxProperties {
    
        /**
         * 设置微信小程序的appid.
         */
        private String appId;
    
        /**
         * 设置微信小程序的Secret.
         */
        private String appSecret;
    
    
    }
    
    
  2. 将微信小程序注入到spring中

    import cn.binarywang.wx.miniapp.api.WxMaService;
    import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
    import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
    import lombok.AllArgsConstructor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    @AllArgsConstructor
    public class WxConfig {
    
        private final WxProperties properties;
    
    
        /**
         * 小程序service配置
         */
        @Bean
        public WxMaService wxMaService() {
            WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();
            wxMaConfig.setAppid(this.properties.getAppId());
            wxMaConfig.setSecret(this.properties.getAppSecret());
            WxMaService wxMaService = new WxMaServiceImpl();
            wxMaService.setWxMaConfig(wxMaConfig);
            return wxMaService;
        }
    
    }
    

这个wxMaService 可以直接获得一些必要的数据,比如可以直接调用获得用户个人信息,可以生成订阅消息,可以生成微信二维码,这些都可以在wxMaService对应的类中找到,如果找不到,就只能采取最直接的方法,直接调用微信给的url。

这次生成微信外部链接就是需要直接调用方法。

二、核心代码

  1. 思路:首先看到官方文档,我们需要access_token,所以首先要获得这个。然后那这个和他所需要的参数,去请求接口。

  2. 业务描述:上一篇的钉钉发送工作通知,里面有对应小程序的链接地址,这里需要直接跳转到我们自己对应的微信小程序上,所以需要微信的外部链接。

  3. 没有跳转路径的代码

     public String getWxUrl() {
            try {
                String accessToken = wxMaService.getAccessToken();
                //构建请求参数(带上一个无意义的参数,应为这个请求不带参数请求不成功)
                JSONObject paramMap = new JSONObject();
                    paramMap.put("query", "");
                String generateLinkUrl = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN";
                String postUrl = generateLinkUrl.replaceAll("ACCESS_TOKEN", accessToken);
                String result = HttpUtil.post(postUrl, paramMap.toString());
                System.out.println(result);
                JSONObject jsonObject = JSONObject.parseObject(result);
                String wxUrl = jsonObject.getString("url_link");
                return StrUtil.isEmpty(wxUrl) ? "默认地址" : wxUrl;
            } catch (Exception e) {
                log.error("微信链接生成失败:错误信息:{}", e.getMessage());
            }
            //如果生成链接失败就返回kpi首页地址
            return "默认地址";
        }
    

注意:这个永久不失效的url连接一个小程序是有个数限制的,所以最好弄个有效期。下面的代码可以看有效期是怎么设置的

  1. 有跳转路径的代码

import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * @author 
 * @date 2022/2/28 14:37
 */
@Slf4j
@AllArgsConstructor
@Component
public class WxUrlUtil {

    //刚才注册到spring里面的wxservice
    private final WxMaService wxMaService;
/**
     * 生成微信跳转链接,用于钉钉跳转
     * 目前钉钉内部安卓可以直接跳到微信,但是ios不能跳转
     * 但是通过外部浏览器能打开
     *
     * @param path  微信小程序路径(如果为空默认就进入的是小程序首页)
     * @param query 进入小程序的参数(配合有参的路径用)
     * @return 微信url,如果生成失败返回一个默认地址
     */
    public String getWxUrl(String path, String query) {
        try {
            String accessToken = wxMaService.getAccessToken();
            //构建请求参数
            JSONObject paramMap = new JSONObject();
            //通过 URL Link 进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带 query 。path 为空时会跳转小程序主页
            paramMap.put("path", path);
            //小程序页面的参数,直接为:参数=值
            if (!StrUtil.isEmpty(query)) {
                paramMap.put("query", query);
            }
            //生成的 URL Link 类型,到期失效:true,永久有效:false
            paramMap.put("is_expire", true);
            //小程序 URL Link 失效类型,失效时间:0,失效间隔天数:1
            paramMap.put("expire_type", 1);
            //到期失效的URL Link的失效间隔天数。生成的到期失效URL Link在该间隔时间到达前有效。最长间隔天数为365天。expire_type 为 1 必填
            paramMap.put("expire_interval", 60);
            //执行post
            String generateLinkUrl = "https://api.weixin.qq.com/wxa/generate_urllink?access_token=ACCESS_TOKEN";
            String postUrl = generateLinkUrl.replaceAll("ACCESS_TOKEN", accessToken);
            String result = HttpUtil.post(postUrl, paramMap.toString());
            System.out.println(result);
            JSONObject jsonObject = JSONObject.parseObject(result);
            String wxUrl = jsonObject.getString("url_link");
            return StrUtil.isEmpty(wxUrl) ? "默认地址" : wxUrl;
        } catch (Exception e) {
            log.error("微信链接生成失败:错误信息:{}", e.getMessage());
        }
        //如果生成链接失败就返回kpi首页地址
        return "默认地址";
    }
}

il.isEmpty(wxUrl) ? “默认地址” : wxUrl;
} catch (Exception e) {
log.error(“微信链接生成失败:错误信息:{}”, e.getMessage());
}
//如果生成链接失败就返回kpi首页地址
return “默认地址”;
}
}


  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值