最近在做一个插件,有这样的一个需求,首先是插件授权,需要获取到用户的openId,官方提供了一个用户信息组件,需要在插件所依附的小程序里的app.json文件里加上"functionalPages": true这个字段即可,其他的仿照官方提供的Demo,这样就能够获取到用户的临时code去后端调用获取微信用户openid的接口。
这个解决了就引出一个新的问题,因为是插件,从小程序直接到插件我需要传一个token,但是进入到插件的一个页面必须是授权组件。组件没法从小程序的页面里拿到值,因此,先在插件里建立一个logind的page页面。
<!-- 引用组件的页面模版wxml -->
<view>
<my-component my-property="{{buserId}}"></my-component>
</view>
// plugin/pages/login/login.js
Page({
/**
* 页面的初始数据
*/
data: {
buserId:""
},
/**
* 生命周期函数--监听页面卸载
*/
onLoad: function (opt) {
wx.setStorageSync("buserId", opt.buserId);
var that = this;
that.setData({
buserId: opt.buserId
})
}
})
buerId为从路径的参数获取到的,现在就是如何把这个buserId传给用户信息组件里。
在用户信息组件里加一个properties。
/*auth.js*/
Component({
properties: {
myProperty: { // 属性名
type: String, // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
value: '', // 属性初始值(可选),如果未指定则会根据类型选择一个
observer: function (newVal, oldVal) { } // 属性被改变时执行的函数(可选),也可以写成在methods段中定义的方法名字符串, 如:'_propertyChange'
}
},
methods: {
loginSuccess(res) {
console.log(this.data.myProperty);
wx.request({
url: data.url,
data: {
code: res.detail.code,
encryptedData: res.detail.encryptedData,
iv: res.detail.iv,
buserid: this.data.myProperty
},
method: 'POST',
success: function (result) {
console.log(result)
var data = result.data.data;
wx.setStorageSync("token", data.tminstoreToken);
wx.setStorageSync("openid", data.openid);
wx.navigateTo({
url: 'plugin://myPlugin/scan?wxuserid=' + data.wxuserId + "&buserid=" + this.data.myProperty
})
}
})
},
loginFail(res) {
console.log(res)
}
}
})
这样就能拿到那个buserId到后端获取响应的数据了。