共计 2166 个字符,预计需要花费 6 分钟才能阅读完成。
小程序分享二维码思路:
a 分享二维码给 b,二维码上带有 a 的标识 ppid
b 接收 a 的二维码打开页面,将接收到的 ppid 传递给后台,后台就可以知道 b 是通过 a 的二维码打开的页面
1. 在后台设置识别二维码进入的页面,这里用 index 页面。
2. 在 index 页面是接收二维码里面的参数,解析并截取获取。二维码的参数格式:scene=ppid:12
export default {data() {
return {ppid: "",}
},
onLoad(option) {
// 解析二维码里面的参数获得 ppid
this.ppid = this.scene_decode(decodeURIComponent(option.scene)).ppid // 封装的 scene_decode() 方法
if(this.ppid) {
// 我这里是把 ppid 存进 vuex,然后在 b 注册时,把 ppid 传给后台
this.saveppid(this.ppid)// ppid 存进 vuex
}
},
methods: {
// 截取 ppid 的方法
scene_decode(scene) {
var _str = scene + "";
var _str_list = _str.split(",");
var res = {};
for (var i in _str_list) {var _tmp_str = _str_list[i];
var _tmp_str_list = _tmp_str.split(":");
if (_tmp_str_list.length > 0&&_tmp_str_list[0]) {res[_tmp_str_list[0]] = _tmp_str_list[1] || null;
}
}
return res;
}
}
}
vuex 里面存 ppid 的方法
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({
state: {ppid: '',},
mutations: {
// 二维码 ppid
saveppid(state,ppid) {
state.ppid = ppid
uni.setStorage({
key: 'ppid',
data: ppid
})
// console.log(state.ppid)
},
},
})
export default store
3.b 登陆注册时,从 vuex 里面取出 ppid 传给后台
_getuserinfo(res) {console.log(store.state.ppid)
var that = this
var userinfoDetails = {}
userinfoDetails = res.detail.userInfo
uni.getUserInfo({
provider: 'weixin',
success: function () {
uni.login({success:function(res){
uni.showLoading({
title: '登陆中...',
mask: false
});
uni.request({
url: that.apiUrl + 'small/index/GetOpenid?code=' + res.code,
success: (res) => {console.log(res)
if (res.data.openid) {uni.setStorageSync('openid', res.data.openid)
userinfoDetails.openid = res.data.openid
//store.state.ppid 取 ppid,然后赋值给 userinfoDetails.ppid
userinfoDetails.ppid = store.state.ppid || ''
}
if(res.data.status == 0) {that.sendInfo(userinfoDetails) // 用户还没注册过需调用此方法
console.log('我还没有注册')
} else if (res.data.status == 1) {
uni.showToast({
title: '登录成功',
icon: 'success',
duration: 2000
})
that.getUserData() // 调用获取用户信息的接口} else {uni.hideLoading()
uni.showToast({
title: '登录失败',
duration: 2000,
icon:'none'
})
}
}
})
}
})
}
});
},
sendInfo(userinfoDetails) {
var that = this
uni.request({
url: this.apiUrl + 'small/index/insertvip', // 注册接口
data: userinfoDetails,
method: 'POST',
success: (res) => {if(res.data.userinfo == 1) {uni.hideLoading()
uni.showToast({
title: '注册成功',
icon: 'success',
duration: 2000
})
that.getUserData() // 调用获取用户信息的接口} else {uni.hideLoading()
uni.showToast({
title: res.data.msg,
duration: 2000
})
}
}
})
},
正文完