开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
基础 api
基础
应用级事件
界面
跳转
小程序相互跳转
打开半屏小程序
跳转支付宝应用或页面
重启/退出小程序
多媒体
缓存
文件
位置
网络
设备
worker
数据安全
分享
收藏
自定义通用菜单
更新管理
web-view组件控制
升级支付宝最新版本
隐私信息授权
小程序广告
开放能力 api
开发 > api > 基础 api > 跳转 > 小程序相互跳转 > my.navigatetominiprogram
评论 (13)
收藏
我的文档
设置
检测到你在内网环境,请查询专为内部编写的

my.navigatetominiprogram(object object)

从 10.6.50版本开始,用户点击跳转前会提示“即将访问xxxx小程序”;

基础库  或更高版本; 且 支付宝客户端 10.1.10 或更高版本; 若版本较低,建议采取 兼容处理

支小宝客户端 支持

安诊儿客户端 支持

小程序开发者工具: 不支持。

主体: 企业支付宝小程序个人支付宝小程序

跳转到其它小程序。从 10.6.50版本开始,用户点击跳转前会提示“即将访问xxxx小程序”;配置指引请参考文档:

如需跳转到目标小程序的指定开发版本,可进行 联调设置
如果已知目标小程序的 scheme,请参见后文常见问题:拿到目标小程序的 scheme (以 alipays:// 开头),应该如何跳转?

object object

查看示例

属性 类型 默认值 必填 兼容性 描述
appid string - -

要跳转的目标小程序 appid

path string - -

要打开的目标小程序页面路径。省略此参数则打开目标小程序凯发k8官方网娱乐官方首页。
path 中 “?” 后的内容会被解析为页面的 query 参数,目标小程序可在page.onload(query) 中获取。参数解析规则可参考 如何获取各种场景的启动参数

query object -
基础库: 2.7.16

用于设置目标小程序应用的 query 数据
目标小程序可在 app.onlaunch(冷启动)或 app.onshow热启动)中通过 options.query 获取;也可通过 my.getlaunchoptionssync().query 获取

extradata object - -

传递给目标小程序的额外数据
目标小程序可在 app.onlaunch(冷启动)或 app.onshow(热启动)中通过 options.referrerinfo?.extradata 获取

events object -
基础库: 2.9.41

小程序间通信接口,用于监听被打开小程序发送到当前小程序的数据。详见 小程序间通信

success function - -

调用成功的回调函数

fail function - -

调用失败的回调函数

complete function - -

调用结束的回调函数(调用成功、失败都会执行)

success 回调函数

参数

object res

查看示例

属性 类型 兼容性 描述
eventchannel object
基础库: 2.9.41

与被打开小程序进行通信。值为 eventchannel 实例。详见 小程序间通信

fail 回调的参数为 object,error 属性为错误码,errormessage 属性为错误消息。

错误码 错误消息 凯发app官方网站的解决方案
2 参数无效

检查各参数类型/格式是否正确。

30 目标应用不允许被跳转。

请目标小程序检查设置。操作路径:小程序主账号/管理员账号登录 ,在 小程序信息 中切换到 基础设置 tab,在 小程序互相跳转 中设置 指定小程序跳转。 配置指引请参考文档:

31 跳转失败,目标 appid 无效

检查目标应用 appid 参数。appid 为 16 位数字,由开放平台在小程序创建时分配。

跳转失败,请检查网络

支付宝 10.5.26 版本,网络出现问题时会报此错,可检查网络后重试;若重试若不能解决,请通过右下角 “在线咨询” 解决。

5001 跳转小程序不在允许可跳转的行业规范内

由于“支付宝小程序运营规范”升级,除特定行业(政务民生、身份验证、停车缴费)小程序外,默认不可跳转,需要联系跳转目标小程序在“小程序信息—基础设置—小程序互相跳转—指定小程序”中配置跳入方的小程序 appid;点此查看《支付宝小程序运营规范》—“ 具体运营规范 ”中的第17点

my.navigatetominiprogram(object object)
将 scheme 转换为 my.navigatetominiprogram 的参数再跳转小程序
将 my.navigatetominiprogram 的参数转换成 scheme
跳转小程序
目标小程序获取页面参数
目标小程序获取应用参数
my.navigatetominiprogram({
  appid: 'xxxxxxxxxxxxxxx', // 16 位
  path: 'pages/index/index?p=1&q=2',
  query: {
    a: 'foo',
    b: 'bar',
  },
  extradata: {
    x: {
      y: 'z',
    },
  },
  success: function (res) {
    console.log(res);
  },
  fail: function (err) {
    console.log(err);
  }
});
page({
    onload(query) {
      console.log('query:', query); // query: { p: 1, q: 2 }
    },
  });
app({
    onlaunch(options) {
      const { query, referrerinfo: { extradata } = {} } = options;
      console.log('query:', query); // query: { a: 'foo', b: 'bar' }
      console.log('extradata:', extradata); // extradata: { x: { y: 'z' } }
    },
    onsomebuttontap() {
      const { query, referrerinfo: { extradata } = {} } = my.getlaunchoptionssync();
      console.log('query:', query); // query: { a: 'foo', b: 'bar' }
      console.log('extradata:', extradata); // extradata: { x: { y: 'z' } }
    },
  });
// 使用 scheme 跳转小程序
function navigatetominiprogramscheme({ scheme, success, fail }) {
  var { params, message } = schemetoparams(scheme);
  if (params) {
    my.navigatetominiprogram({ ...params, success, fail });
  } else {
    fail && fail({ error: -1, errormessage: `无效的小程序 scheme ${scheme}: ${message}` });
  }
}
// 将 scheme 转换为 my.navigatetominiprogram 的参数
function schemetoparams(scheme) {
  if (!scheme.startswith('alipays:')) {
    return { message: '! 非 alipays: 开头' };
  }
  var params = {};
  var parsequery = (str) => {
    return str.replace(/^.*?\?/, '').split('&').map(s => {
      var p = s.includes('=') ? s.indexof('=') : s.length;
      return [s.slice(0, p), s.slice(p  1)].map(decodeuricomponent);
    });
  };
  for (var [k, v] of parsequery(scheme)) {
    if (k == 'appid') {
      if (v.length != 16) {
        return { message: `! 非 16 位 appid '${v}'` };
      }
    } else if (k == 'page') {
      k = 'path';
    } else if (k == 'query') {
      var o = {};
      for (var [x, y] of parsequery(v)) {
        o[x] = y;
      }
      v = o;
    } else {
      return { message: `! 不支持参数 '${k}' ` };
    }
    params[k] = v;
  }
  return { params };
}
// 调用示例
var scheme = 'alipays://platformapi/startapp?appid=2022061812345678&page=/pages/index/index&query=foo=bar';
navigatetominiprogramscheme({
  scheme,
  fail: (error) => {
    console.error('navigatetominiprogramscheme fail: ', json.stringify(error));
  },
});
function paramstoscheme(params) {
  var { appid, path, query, extradata } = params;
  var scheme = `alipays://platformapi/startapp?appid=${appid}`;
  if (path) {
    scheme  = `&page=${encodeuricomponent(path)}`;
  }
  if (query) {
    query = object.keys(query)
      .map(k => `${encodeuricomponent(k)}=${encodeuricomponent(query[k])}`)
      .join('&');
    scheme  = `&query=${encodeuricomponent(query)}`;
  }
  if (extradata && object.keys(extradata).length) {
    console.log('! extradata 不支持在 scheme 中使用', params);
  }
  return scheme;
}
// 使用示例
var params = {
  appid: '2022061812345678',
  path: '/pages/index/index',
  query: { foo: 'bar' },
};
console.log(paramstoscheme(params));
  • tip
    如果目标小程序未上架,调用本接口仍会触发 success 回调而非失败报错,未通过 联调设置 指定跳转开发版的用户将看到 “暂未找到此功能” 提示页。
  • tip
    在 10.5.36 以前的客户端版本中,即使是相同主体的小程序互跳,或已设置过允许的小程序跳转,也可能会出现 error: 30,errormessage: 目标应用不允许被跳转 的错误。此时,请升级客户端 10.5.36 及以上版本以解决问题。

q:拿到目标小程序的 scheme (以 alipays:// 开头),应该如何跳转?

a:

scheme 用于从外部应用打开支付宝,在小程序内部一般不能直接使用。 如果 scheme 中 appid 是 16 位,且只包含 page、query 参数,则应转换成 my.navigatetominiprogram 调用。推荐使用 检测并生成代码。 也可参考示例代码: 将 scheme 转换为 my.navigatetominiprogram 的参数再跳转小程序

q:my.navigatetominiprogram 的调用参数如何转换为等价的 scheme ?

a:

如果调用参数只含 appid、path、query,则可以转换成等价的 scheme。extradata 不支持在 scheme 中使用。参考示例代码:将 my.navigatetominiprogram 的参数转换成 scheme

q:如果目标小程序已经打开,再次调用 my.navigatetominiprogram 向它跳转会怎样?

a:

已打开的目标小程序将被切到前台,晚于目标小程序打开的小程序(包括当前小程序)会退出。例如,有 a b 两个小程序,发生以下跳转序列:
1、a 使用 my.navigatetominiprogram 跳转 b;
2、b 使用 my.navigatetominiprogram 跳转 a。则 b 会退出,a 被切到到前台。
3、如果 2 中跳转时传入了 path 参数,则 a 中当前已经打开的所有页面被关闭、path 指向的页面被打开。

有关小程序跳转的更多知识,可查看 小程序内嵌 & 外跳能力导航

q:当前有哪些官方小程序 appid 可以跳转?

a:

在小程序中跳转官方业务,请先查看官方公开的 appcode 列表 并使用 my.ap.openalipayapp 跳转;如果 appcode 中未找到,再参考下表 appid 使用 my.navigatetominiprogram 跳转:

小程序 appid 描述
我的小程序 2018072560844004 支付宝小程序官方出品,与支付宝用户的小程序相关的内容和服务都在这。
集分宝 2019092567759928 集分宝的官方小程序。
支付宝校园缴费 2021002140649424 支付宝教育缴费是由支付宝推出的一款平台型的教育缴费服务。

如果 appcode 列表及上表均未包含所需跳转的官方小程序,并确实有强需求,可联系合作的支付宝业务人员。

内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图