1.关于小程序与公众号unionid数据互通
小程序和公众号必须为同一主体,而且必须绑定在同一个开放平台上,其中又分为两点:
-
1.开放平台主动创建 此时需要手动将小程序和公众号绑定在开放平台上,不可使用接口绑定;
-
2.开放平台由第三方接口创建 在公众号和小程序授权第三方开放平台管理权限后,可由接口进行绑定,若要绑定在同一个开放平台上,前提是公众号和小程序的主体相同,同时也支持接口解除绑定;
2.关于小程序ext.json
开发过程中可在小程序的根目录下添加ext.json文件来进行调试,比如在文件里添加以下配置:
{ "extEnable": true, "extAppid": "wx90d87655678517ee", "ext": { "id": 100 }}复制代码
设置extEnable属性为true,后续小程序的逻辑将依照ext.json中extAppid来执行,并可以通过以下两种方式来获取ext中的参数:
//方式一if(wx.getExtConfig) { wx.getExtConfig({ success: function (res) { console.log(res.extConfig) } })}//方式二let extConfig = wx.getExtConfigSync? wx.getExtConfigSync(): {}console.log(extConfig)复制代码
另外第三方在帮助授权小程序提交代码的时候也可以指定ext字段,具体方式参考: 其中需要注意的一点是ext_json
的格式要非常注意,因为ext_json
结构很松散,所以很多时候需要我们自己拼装这个字段,那么它需要为类似以下格式:
"{\"extAppid\": \"wx90d87655678517ee\",\"ext\":{\"id\":100}}"复制代码
另外通过接口提交的ext_json
会覆盖配置的ext.json中的对应信息,但在开发者工具无法获取接口提交的ext_json
的信息,只能获取ext.json中信息,这点需要注意。
3.mpvue结合ext.json
目前最新版本的mpvue好像还不支持在main.js中添加ext.json的配置,所以若是需要使用它有以下两种方式:
- 1.写一个插件,将src下的ext.json编译的dist目录下(mpvue编译后的小程序源码目录)
- 2.直接在dist目录下创建一个ext.json文件 但记得要将extEnable属性设置为true。
4.用户小程序授权之后的解密算法(js版)
import crypto from 'crypto-browserify'function WXBizDataCrypt (appId, sessionKey) { //小程序appid,用户登录利用code从接口获得的sessionKey this.appId = appId this.sessionKey = sessionKey}WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) { // base64 decode var sessionKey = new Buffer(this.sessionKey, 'base64') encryptedData = new Buffer(encryptedData, 'base64') iv = new Buffer(iv, 'base64') try { // 解密 var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv) // 设置自动 padding 为 true,删除填充补位 decipher.setAutoPadding(true) var decoded = decipher.update(encryptedData, 'binary', 'utf8') decoded += decipher.final('utf8') decoded = JSON.parse(decoded) } catch (err) { console.log(err) throw new Error('Illegal Buffer') } if (decoded.watermark.appid !== this.appId) { throw new Error('Illegal Buffer') } return decoded}let DataCrypt = { getData (appId, sessionKey, encryptedData, iv) { var pc = new WXBizDataCrypt(appId, sessionKey) return pc.decryptData(encryptedData, iv) }}export default DataCrypt使用方式:import DataCrypt from "path/to/DataCrypt"const data = DataCrypt.getData(...)复制代码