开发插件前,请阅读了解 《小程序插件接入指南》 了解开通流程及开放范围,并开通插件功能。如果未开通插件功能,将无法上传插件。
# 插件间互相调用
插件不能直接引用其他插件。但如果小程序引用了多个插件,插件之间是可以互相调用的。
一个插件调用另一个插件的方法,与插件调用自身的方法类似。可以使用 plugin-private://APPID
访问插件的自定义组件、页面(暂不能使用 plugin://
)。
对于 js 接口,可使用 requirePlugin
,但目前尚不能在文件一开头就使用 requirePlugin ,因为被依赖的插件可能还没有初始化,请考虑在更晚的时机调用 requirePlugin
,如接口被实际调用时、组件 attached 时。(未来会修复这个问题。)
# 插件请求签名
插件在使用 wx.request 等 API 发送网络请求时,将会额外携带一个签名 HostSign
,用于验证请求来源于小程序插件。这个签名位于请求头中,形如:
X-WECHAT-HOSTSIGN: {"noncestr":"NONCESTR", "timestamp":"TIMESTAMP", "signature":"SIGNATURE"}
其中, NONCESTR
是一个随机字符串, TIMESTAMP
是生成这个随机字符串和 SIGNATURE
的 UNIX 时间戳。它们是用于计算签名 SIGNATRUE
的参数,签名算法为:
SIGNATURE = sha1([APPID, NONCESTR, TIMESTAMP, TOKEN].sort().join(''))
其中,APPID
是 所在小程序 的 AppId (可以从请求头的 referrer
中获得);TOKEN
是插件 Token,可以在小程序插件基本设置中找到。
网络请求的 referer 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本。
插件开发者可以在服务器上按以下步骤校验签名:
sort
对APPID
NONCESTR
TIMESTAMP
TOKEN
四个值表示成字符串形式,按照字典序排序(同 JavaScript 数组的 sort 方法);join
将排好序的四个字符串直接连接在一起;- 对连接结果使用
sha1
算法,其结果即SIGNATURE
。
自基础库版本 2.0.7 开始,在小程序运行期间,若网络状况正常, NONCESTR
和 TIMESTAMP
会每 10 分钟变更一次。如有必要,可以通过判断 TIMESTAMP
来确定当前签名是否依旧有效。