插件功能页
某些接口不能在插件中直接调用(如 wx.login),但插件开发者可以使用插件功能页的方式来实现功能。目前,插件功能页包括:
获取用户信息,包括 openid 和昵称等(相当于 wx.login 和 wx.getUserInfo 的功能),详见用户信息功能页;
支付(相当于 wx.requestPayment),详见支付功能页;
要使用插件功能页,需要先激活功能页特性,配置对应的功能页函数,再使用 functional-page-navigator 组件跳转到插件功能页,从而实现对应的功能。详情请参考下文。
激活功能页特性
代码示例:
{ “functionalPages”: { “independent”: true }}
目前,兼容旧式写法:
{ “functionalPages”: true}
旧式写法将在未来将被移除支持,未来将不能编译上传。
这两种写法的区别在于,新式的写法”independent”: true 会使得插件功能页的代码独立于其他代码,这意味着插件功能页可以被独立下载、加载,具有更好的性能表现。但也同时使得插件功能页目录 functional-pages/(支付功能页会使用其中的文件)不能 require 这个目录以外的文件(反之亦然:这个目录以外的文件也不能调用这个目录内的)。
跳转到功能页
功能页不能使用 wx.navigateTo 来进行跳转,而是需要一个名为 functional-page-navigator 的组件。以获取用户信息为例,可以在插件中放置如下的 functional-page-navigator:
代码示例:
<functional-page-navigator name=”loginAndGetUserInfo” args=”” version=”develop” bind:success=”loginSuccess”> <button>登录到插件</button></functional-page-navigator>
functional-page-navigator 的参数和详细使用方法可以参考组件说明。
真机开发测试的常规步骤
目前,功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。初次进行真机开发测试时,通常步骤如下:
在开发者工具上打开插件项目,将插件中 functional-page-navigator 中的 version 属性设置为 develop;
如果过了一段时间之后,跳转功能页时出现“开发版已过期”这样的提示,从第1步开始重试一次。
注意:functional-page-navigator 的 version=develop 仅用于调试,因此在插件提审前,需要:
确保所有的 functional-page-navigator 组件属性设置为 version=”release”。
请检查 functional-page-navigator 的 name 属性是否被正确设置。
开发版可以正常跳转,但审核反馈不能跳转。
Bugs & Tips
functional-page-navigator 可以在开发者工具中使用,但功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。
用户信息功能页
用户信息功能页用于帮助插件获取用户信息,包括 openid 和昵称等,相当于 wx.login 和 wx.getUserInfo 的功能。
此外,自基础库版本 2.3.1 起,用户在这个功能页中授权之后,插件就可以直接调用 wx.login 和 wx.getUserInfo 。无需再次进入功能页获取用户信息。自基础库版本 2.6.3 起,可以使用 wx.getSetting 来查询用户是否授权过。
调用参数
用户信息功能页使用 functional-page-navigator 进行跳转时,对应的参数 name 应为固定值 loginAndGetUserInfo,其余参数与 wx.getUserInfo 相同,具体来说:
args参数说明:
参数名类型必填说明withCredentialsBoolean否是否带上登录态信息langString否指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。默认为en。timeoutNumber否超时时间,单位 ms
注:当 withCredentials 为 true 时,返回的数据会包含 encryptedData, iv 等敏感信息。
bindsuccess返回参数说明:
参数类型说明codeString同 wx.login 获得的用户登录凭证(有效期五分钟)。开发者需要在开发者服务器后台调用 api,使用 code 换取 openid 和 session_key 等信息errMsgString调用结果userInfoOBJECT用户信息对象,不包含 openid 等敏感信息rawDataString不包括敏感信息的原始数据字符串,用于计算签名。signatureString使用 sha1( rawData sessionkey ) 得到字符串,用于校验用户信息,参考文档 signature。encryptedDataString包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法ivString加密算法的初始向量,详细见加密数据解密算法
userInfo参数说明:
参数类型说明nickNameString用户昵称avatarUrlString用户头像,最后一个数值代表正方形头像大小(有0、46、64、96、132数值可选,0代表132*132正方形头像),用户没有头像时该项为空。若用户更换头像,原有头像URL将失效。genderString用户的性别,值为1时是男性,值为2时是女性,值为0时是未知cityString用户所在城市provinceString用户所在省份countryString用户所在国家languageString用户的语言,简体中文为zh_CN
代码示例:
<!–plugin/components/hello-component.wxml–> <functional-page-navigator name=”loginAndGetUserInfo” args=”{{ args }}” version=”develop” bind:success=”loginSuccess” bind:fail=”loginFail” > <button class=”login”>登录到插件</button> </functional-page-navigator>// plugin/components/hello-component.jsComponent({ properties: {}, data: { args: { withCredentials: true, lang: ‘zh_CN’ } }, methods: { loginSuccess: function (res) { console.log(res.detail); }, loginFail: function (res) { console.log(res); } }});
由于插件需要 appid 才能工作,请填入一个 appid;
由于当前代码片段的限制,打开该示例后请手动将 appid 填写到 miniprogram/app.json 中(如下图)使示例正常运行。
支付功能页
支付功能页用于帮助插件完成支付,相当于 wx.requestPayment 的功能。
调用参数
支付功能页使用 functional-page-navigator 进行跳转时,对应的参数 name 应为固定值 requestPayment,其他参数如下:
args参数说明:
参数名类型必填说明feeNumber是需要显示在页面中的金额,单位为分paymentArgsObject否任意数据,传递给功能页中的响应函数currencyTypeString否需要显示在页面中的货币符号的代码,默认为 CNY
currencyType 的合法值:
值说明最低版本CNY货币符号 ??USD货币符号 US$JPY货币符号 J??EUR货币符号 HKD货币符号 HK$GBP货币符号 £AUD货币符号 A$MOP货币符号 MOP$KRW货币符号 ??
代码示例:
配置功能页函数
callback函数的参数:
参数名类型说明errorObject失败信息,若无失败,应返回nullrequestPaymentArgsObject支付参数,用于调用wx.requestPayment,参数如下
reqeustPaymentArgs 的参数:
用于发起支付,和 wx.requestPayment 的参数相同,但没有回调函数(success, fail, complete):
功能页函数代码示例:
注意:功能页函数不应 require 其他非 functional-pages 目录中的文件,其他非 functional-pages 目录中的文件也不应 require 这个目录中的文件。这样的 require 调用在未来将不被支持。
调用参数
用户信息功能页使用 functional-page-navigator 进行跳转时,对应的参数 name 应为固定值 chooseAddress ,返回参数与 wx.chooseAddress 相同。
bindsuccess返回参数说明:
代码示例: