生成微信小程序码、URL Scheme和URL Link等方式总结

前言

  链接方式跳转或者通过接口生成的二维码,需要获取access_token,需要服务端去获取并缓存 (APPIDAPPSECRET微信小程序后台查看获取)

 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明:

image

access_token使用说明:

image

 

 1、获取小程序码(通过该接口生成的小程序码,永久有效,数量暂无限制)

        uni.request({
                url: "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token,//access_token从服务端获取
                method: 'POST',
                responseType: 'arraybuffer', //设置响应类型
                data: {
                    path: 'pages/index/index', // 必须是已经发布的小程序存在的页面(否则报错)
                    scene: encodeURIComponent('id=123&code=xxx'),//小程序端需要 decodeURIComponent(query.scene)
                    width: 360,//最小 280px,最大 1280px
                    auto_color: true, // 默认false, 自动配置线条颜色,如果颜色依然是黑色,则说明不建议配置主色调
                },
                success: function(res) {
                    console.log('获取二维码信息', res) //返回的是ArrayBuffer对象
                    const qrcode = "data:image/PNG;BASE64," + uni.arrayBufferToBase64(res.data);
                    console.log("base64的二维码图片地址", qrcode);
                }
        })

具体接口入参如下图所示:

image

 注意:当生成体验版或开发版,不需要页面路径已经发布。

 

2.获取URL Scheme

2.1 加密scheme

   通过该接口生成的Scheme,只有30天有效期;

   2023-12-19 起不再有永久scheme链接;

   IOS可以直接跳,安卓需要适配weixin://xxx这种协议头;

        在微信应用内非小程序中,则都可以直接点击weixin://类协议跳转;

URL Scheme格式

weixin://dl/business/?t=*TICKET*&cq=*CUSTOM PARAMETER*

其中参数含义如下:

image

 生成密文链接方式:

      uni.request({
                url: "https://api.weixin.qq.com/wxa/generatescheme?access_token=" + access_token, // access_token从服务端获取
                method: 'POST',
                data: {
                    expire_type: 1, //到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1
                    // expire_time: 1606737600, //到期失效的 scheme 码的失效时间,为 Unix 时间戳,最长有效期为30天. expire_type为 0 必填
                    expire_interval: 30, //到期失效的 scheme 码的失效间隔天数,最长间隔天数为30天. expire_type为 1 时必填
                    jump_wxa: {
                       path: 'pages/index/index',// 必须是已经发布的小程序存在的页面(否则报错)
                       query:'id=666&code=xxx',//传递的参数,小程序端在APP.onLaunch直接获取参数
              
env_version: "release"//正式版为release,体验版为trial, 开发版为develop
            }
                },
                success: function(res) {
                    console.log('获取scheme', res.data.openlink)  // weixin://dl/business/?t=DSTHnSHeQgj
                }
      })

 

image

 

 2.2 明文scheme

  明文 URL Scheme 没有有效期的概念,可长期有效,但需要在微信小程序后台配置路径白名单。

  前往微信公众平台登录进入小程序,点击菜单最后一项 进入设置 > 基本设置,找到隐私设置,如图:

image

 

URL Scheme格式

weixin://dl/business/?appid=*APPID*&path=*PATH*&query=*QUERY*&env_version=*ENV_VERSION*

 其中参数含义如下:

企业微信截图_17442783581638

示例:

window.open('weixin://dl/business/?appid=项目appid&path=pages/index/index&query=isApp%3Dtrue', '_blank')

 注意:

  • 生成体验版或开发版需要页面路径发布,且要在微信外打开,微信内打开仍是正式版。

3、获取URL Link

  通过该接口生成的Link,只有30天有效期;

  Link链接内部也是通过scheme跳转的,还不如直接使用方法2的scheme跳转;

      uni.request({
                url: "https://api.weixin.qq.com/wxa/generate_urllink?access_token=" + access_token, // access_token从服务端获取
                method: 'POST',
                data: {
                    path: 'pages/index/index',// 必须是已经发布的小程序存在的页面(否则报错)
                    query:'id=888&code=xxx',//传递的参数,小程序端在APP.onLaunch直接获取参数
                    expire_type: 1, //到期失效的 URL Link 失效类型,失效时间:0,失效间隔天数:1
                    // expire_time: 1606737600, //到期失效的 URL Link 的失效时间,为 Unix 时间戳,最长有效期为30天. expire_type为 0 必填
                    expire_interval: 30, //到期失效的 URL Link 的失效间隔天数,最长间隔天数为30天. expire_type为 1 时必填
                },
                success: function(res) {
                    console.log('获取link', res.data.url_link) // https://wxaurl.cn/xrkrXas4HBf
                }
      })

接口具体入参如下图所示:

image

 

注意:

  • URL Scheme 和 URL Link 都不能在小程序内部直接使用“跳转到另一个小程序”;它们只能从微信外(短信、邮件、浏览器、App 等)唤起微信并打开当前小程序的指定页面。
  • 经测试验证,URL Scheme 和 URL Link也可在微信APP内的消息、朋友圈文字等可直接点击跳转,就除了微信小程序内跳转不行。
  • 在小程序内实现跳转其他小程序,只能使用微信提供的导航类 API(wx.navigateToMiniProgram / navigator 组件),而不是 Scheme/Link。
  • 生成体验版或开发版需要页面路径发布,且要在微信外打开,微信内打开仍是正式版。

4、 微信小程序内跳转其他微信小程序

// 点击按钮后跳转到另一个小程序
wx.navigateToMiniProgram({
  appId: 'wx1234567890abcdef',
  path: 'pages/index/index?foo=bar', // 可带参数
  envVersion: 'release',
  success(res) {},
  fail(err) {}
})
// 或在 wxml 里用 navigator 组件:
<navigator
  target="miniProgram"
  app-id="wx1234567890abcdef"
  path="pages/index/index?foo=bar"
  version="release">
  跳转另一个小程序
</navigator>

5、h5 跳小程序

5.1、使用jweixin-1.6.0.js

a、首先需要在H5页面中引入JSSDK,它可以让H5页面的js文件执行微信小程序的部分API命令。H5页面引入JSSDK的代码如下所示

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

b、跳转至小程序页面方法

  • wx.miniProgram.navigateTo()
  • wx.miniProgram.navigateBack()
  • wx.miniProgram.switchTab()
  • wx.miniProgram.reLaunch()
  • wx.miniProgram.redirectTo()

上述API的使用与微信小程序中页面跳转的API使用规范是一样的,以wx.miniProgram.navigateTo()为例,该方法的API格式如下所示。

// 判断当前环境是否为小程序
const ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
    wx.miniProgram.getEnv((res) => {
        if (res.miniprogram) {
            console.log('在小程序内');
        } else {
            console.log('不在小程序内');
        }
    });
} else {
    console.log('不在微信浏览器内');
}

// 小程序跳转方法
wx.miniProgram.navigateTo({
   url:'/pages/index/index',        // 指定跳转至小程序页面的路径
   success: (res) => {
      console.log(res);   // 页面跳转成功的回调函数
   },
   fail: (err) => {
      console.log(err);   // 页面跳转失败的回调函数
   }
});

// 通过链接与小程序通讯传参
// 静态参数传输
wx.miniProgram.navigateTo({
   url:'/pages/index/index?id=1', // id:所需参数
   success: (res) => {
      console.log(res);   // 页面跳转成功的回调函数
   },
   fail: (err) => {
      console.log(err);   // 页面跳转失败的回调函数
   }
});

// 动态参数传输
let id = 1;
wx.miniProgram.navigateTo({
   url:'/pages/index/index?id=' + id, // id:所需参数(动态参数需放在引号外小程序才可识别)
   success: (res) => {
      console.log(res);   // 页面跳转成功的回调函数
   },
   fail: (err) => {
      console.log(err);   // 页面跳转失败的回调函数
   }
});

注意事项:

  • 跳转 tabBar 页面只可使用 wx.miniProgram.switchTab() 方法,其他方法均无效。
  • wx.miniProgram.switchTab() 方法不可以携带参数,如跳转页面为 tabBar 页面则无法通过跳转路径实现H5与小程序之间的传参。

小程序官方文档

5.2、使用URL Scheme 和 URL Link 

  在h5直接使用location.href跳转 或者window.open

  注意: 不要在微信小程序内直接使用url scheme或url link方式, 或间接用h5做中转再跳也是不行,跳不过去的。

  在微信小程序的 <web-view> 里加载的 H5 页面,微信禁止任何方式直接跳转到另一个小程序(包括 URL Scheme、URL Link、开放标签等)。
  官方文档和社区多次明确:web-view 内不支持跳转其他小程序,只能退回到宿主小程序后,由用户再次点击才能调 wx.navigateToMiniProgram

 

posted @ 2025-09-05 14:23  当下是吾  阅读(1465)  评论(0)    收藏  举报