开发插件
开发插件前,请先发送邮件申请插件开发权限。 邮件内容包括:
【标题】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