小程序插件开发的前期申请和权限介绍

小程序插件开发的前期申请和权限介绍

开发插件

开发插件前,请先发送邮件申请插件开发权限。 邮件内容包括:

【标题】QQ小程序插件开发申请
【内容】
插件名称:
Appid:
插件用途:

创建插件项目

开发小程序插件需要appid。 申请步骤与小程序相同,添加商品的步骤也与小程序相同。

小程序插件目录一般包括以下三个:

小程序目录下的内容可以像普通小程序一样编写,用于调试和预览小程序插件。

插件目录结构

一个插件可以包含多个自定义组件、页面和一组js接口。 插件目录内容如下:

plugin
├── components
│   ├── hello-component.js   // 插件提供的自定义组件(可以有多个)
│   ├── hello-component.json
│   ├── hello-component.wxml
│   └── hello-component.wxss
├── pages
│   ├── hello-page.js        // 插件提供的页面(可以有多个)
│   ├── hello-page.json
│   ├── hello-page.wxml
│   └── hello-page.wxss
├── index.js                 // 插件的 js 接口
└── plugin.json              // 插件配置文件
插件配置文件

10

11

12

13

14

插件配置文件

所有向第三方小程序开放的自定义组件、页面和js接口都必须在插件配置文件plugin.json中列出3D角色,格式如下:

{
  "publicComponents": {
    "hello-component": "components/hello-component"
  },
  "pages": {
    "hello-page": "pages/hello-page"
  },
  "main": "index.js"
}

该配置文件会打开一个自定义组件hello-component、一个页面hello-page以及index.js下导出给第三方小程序的所有js接口。

进行插件开发

请注意:插件开发时,只能直接调用部分接口。

自定义组件

一个插件可以定义多个自定义组件,这些自定义组件可以在插件内相互引用。 但是,供第三方小程序使用的自定义组件必须列在配置文件的 publicComponents 部分中(参见上文)。

除接口限制外,自定义组件的编写和组织方式与通用自定义组件相同。 每个自定义组件由四个文件组成:wxml、wxss、js 和 json。 具体请参考自定义组件的文档。

一个插件可以定义多个插件页面,这些页面可以从本插件的自定义组件跳转,也可以从其他页面跳转,也可以从第三方小程序跳转。 所有页面都必须列在配置文件的页面部分中(见上文)。

除接口限制外,插件页面的编写和组织方式与普通页面相同。 每个页面由四个文件组成:wxml、wxss、js和json。 详细信息请参阅页面上的其他文档。

插件进行页面跳转时,可以使用navigator组件。 当插件跳转到自己的页面时,url应该设置为这种形式:plugin-private://PLUGIN_APPID/PATH/TO/PAGE。 当需要跳转到其他插件时,也可以这样设置url。


  Go to pages/hello-page!

在插件自带的页面中,插件也可以调用qq.navigateTo跳转到该页面。 url 格式与使用 navigator 组件时类似。

界面

插件可以在接口文件(配置文件中指定,具体见上文)中导出一些js接口供插件的用户调用,如:

module.exports = {
  hello: function() {
    console.log('Hello plugin!')
  }
}

预览、上传和发布

插件可以像小程序一样预览和上传,但插件没有试用版。

该插件会同时有多个在线版本,具体使用的版本号由使用该插件的小程序决定。

在手机上预览、审核插件时,会使用专门的小程序,应用项目小程序文件夹中的小程序来预览插件。

插件开发文档

当第三方小程序使用插件时,插件代码是不可见的。 因此,除了插件代码外,我们还支持插件开发者上传插件开发文档。 本开发文档将展示在插件详情页面,供其他开发者在浏览和使用插件时阅读和参考。 插件开发者应在插件开发文档中对插件提供的自定义组件、页面、接口等提供必要的描述和说明,以方便第三方小程序正确使用插件。

插件开发文档必须放在插件项目根目录下的doc目录下。 目录结构如下

doc
├── README.md   // 插件文档,应为 markdown 格式

编辑好README.md后,您可以使用开发者工具打开README.md,在编辑器右下角预览插件文档并单独上传插件文档。 文件上传后,立即发布。

其他需要注意的事项:插件之间相互调用

插件不能直接引用其他插件。 但如果小程序引用了多个插件,插件之间是可以互相调用的。

插件调用另一个插件的方式与插件调用自身的方式类似。 您可以使用plugin-private://APPID来访问插件的自定义组件和页面(plugin://尚不能使用)。 对于js接口,可以使用requirePlugin。

插件请求签名

当插件使用qq.request等API发送网络请求时,会携带额外的签名HostSign游戏素材下载 免费,以验证该请求来自小程序插件。 该签名位于请求标头中,如下所示:

X-WECHAT-HOSTSIGN: {"noncestr":"NONCESTR", "timestamp":"TIMESTAMP", "signature":"SIGNATURE"}

其中,NONCESTR是一个随机字符串,TIMESTAMP是生成这个随机字符串和SIGNATURE的UNIX时间戳。 它们是用于计算签名SIGNATRUE的参数。 签名算法为:

签名 = sha1([APPID, NONCESTR, TIMESTAMP, TOKEN].sort().join(''))

其中,APPID为小程序的AppId(可以从请求头的referrer中获取); TOKEN是插件Token,可以在小程序插件的基本设置中找到。

网络请求的Referer格式固定为{appid}/{version}/page-frame.html,其中{appid}为小程序的appid游戏开发程序,{version}为小程序的版本号游戏开发程序,version数字0表示开发版本。 对于试用版和审核版,版本号是devtools,这意味着它们是开发者工具,其余的都是正式版本。

插件开发者可以按照以下步骤在服务器上验证签名:

sort以字符串形式表示APPID NONCESTR TIMESTAMP TOKEN的四个值,并按字典顺序排序(与JavaScript数组的排序方法相同);

2.join直接将四个排序后的字符串连接在一起;

3. 对连接结果使用sha1算法,结果为SIGNATURE。

小程序运行过程中,如果网络情况正常,NONCESTR 和 TIMESTAMP 会每 10 分钟变化一次。 如果需要,可以通过判断TIMESTAMP来判断当前签名是否仍然有效。

文章来源:https://q.qq.com/wiki/develop/miniprogram/frame/plugins/plugins_exploit_plugin.html