插件功能页

插件功能页从小程序基础库版本 2.1.0 开始支持。

插件不能直接调用 wx.login 等较为敏感的接口。在需要访问一些敏感接口时,可以使用插件功能页的方式。使用插件功能页可以实现以下这些功能:

  • 获取用户信息,包括 openid 和昵称等(相当于 wx.login 和 wx.getUserInfo 的功能)。
  • 支付(相当于 wx.requestPayment )。
    需要注意的是:插件使用支付功能,需要进行额外的权限申请,申请位置位于管理后台的“小程序插件 -> 基本设置 -> 支付能力”设置项中。另外,无论是否通过申请,主体为个人小程序在使用插件时,都无法正常使用插件里的支付功能。

在具体使用功能页时,插件可以在插件的自定义组件中放置一个 <functional-page-navigator> 组件,用户在点击这个组件区域时,可以跳转到一个固定的页面,允许用户执行登录或其他操作。

激活功能页特性

功能页是 插件所有者小程序 中的一个特殊页面。

插件所有者小程序,指的是与插件 AppID 相同的小程序。例如,“小程序示例”小程序开发了一个“小程序示例插件”,无论这个插件被哪个小程序使用,这个插件的插件所有者小程序都是“小程序示例”。

启用插件功能页时,需要在插件所有者小程序 app.json 文件中添加 functionalPages 定义段,其值为 true

  1. {
  2. "functionalPages": true
  3. }

注意,新增或改变这个字段时,需要这个小程序发布新版本,才能在正式环境中使用插件功能页。

跳转到功能页

在插件需要登录时,可以在插件的自定义组件中放置一个 <functional-page-navigator> 组件。

代码示例:

  1. <functional-page-navigator name="loginAndGetUserInfo" args="" version="develop" bind:success="loginSuccess">
  2. <button>登录到插件</button>
  3. </functional-page-navigator>

用户在点击这个区域时,会自动跳转到插件所有者小程序的功能页。功能页会提示用户进行登录或其他相应的操作。操作结果会以组件事件的方式返回。

具体用法和支持的功能页列表详见 组件说明

目前,功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。

功能页函数

在使用支付功能页时,插件所有者小程序需要提供一个函数来响应支付请求。这个响应函数应当写在小程序根目录中的 functional-pages/request-payment.js 文件中,名为 beforeRequestPayment 。如果不提供这段代码,将通过 fail 事件返回失败。

注意:功能页函数不应 require 其他非 functional-pages 目录中的文件,其他非 functional-pages 目录中的文件也不应 require 这个目录中的文件。这样的 require 调用在未来将不被支持。

代码示例:

  1. // functional-pages/request-payment.js
  2. exports.beforeRequestPayment = function(paymentArgs, callback) {
  3. paymentArgs // 就是 functional-page-navigator 的 args 属性中 paymentArgs
  4. // 在这里可以执行一些支付前的参数处理逻辑,包括通知后台调用统一下单接口
  5. // 在 callback 中需要返回两个参数: err 和 requestPaymentArgs
  6. // err 应为 null (或者一些失败信息)
  7. // requestPaymentArgs 将被用于调用 wx.requestPayment
  8. callback(null, {
  9. // 这里的参数与 wx.requestPayment 相同,除了 success/fail/complete 不被支持
  10. timeStamp: timeStamp,
  11. nonceStr: nonceStr,
  12. package: package,
  13. signType: signType,
  14. paySign: paySign,
  15. })
  16. }

这个目录和文件应当被放置在插件所有者小程序代码中(而非插件代码中),它是插件所有者小程序的一部分(而非插件的一部分)。 如果需要新增或更改这段代码,需要发布插件所有者小程序,才能在正式版中生效;需要重新预览插件所有者小程序,才能在开发版中生效。

Bugs & Tips

  • Bug:在微信版本 6.6.7 中,功能页被拉起时会触发 App 的部分生命周期并使得功能页启动时间变得比较长。在后续的微信版本中这一行为会发生变更,使 App 生命周期不再被触发。

原文:

https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/functional-pages.html