先调用login换取code,然后调用wx.getWeRunData,在成功的回调中调用后端同学的接口,传code,iv,encryptedData,其实后端不需要code,需要sessionkey,但是sessionkey需要通过code和code2session服务端接口取获取,就可以换取微信运动步数了,这里要注意的是微信步数的timestamp字段单位是秒!!!!,如果用Date对象操作的时候需要乘1000!!!
uni.login({
provider: 'weixin',
success: async function(e) {
// console.log("login参数", e);
if (e.errMsg == "login:ok") {
wx.getWeRunData({
async success(result) {
// console.log("微信运动成功参数", result);
var data = {
code: e.code,
iv: result.iv,
encryptedData: result.encryptedData,
userId: state.userInfo.userId
}
try {
let res = await step(data)
if (res.state === 1) {
commit("set_wxStepNum", res.content)
}
resolve(res);
} catch (e) {
reject(e);
uni.$u.toast(`${e}`)
}
}
})
} else {
uni.showToast({
title: "获取微信步数失败",
icon: 'none',
duration: 2500
})
}
},
fail: () => { //uni.login 失败的回调
uni.showToast({
title: '授权已取消',
icon: 'error',
mask: true,
});
}
})
后续 发现这个还是最好写在是否有这个权限的判断里面
封装的vuex的action
getAuthority({ commit, state }, val) { //val:权限名称 和触发函数
return new Promise(async (resolve, reject) => {
let authorityMap = {
'scope.werun': '微信运动'
}
if (state.hasLogin) {
uni.getSetting({
async success(res) {
// console.log(res);
if (!res.authSetting[val.type]) {
uni.authorize({
scope: val.type,
async success(res) {
await val.method()
},
fail() {
uni.showModal({
content: `为了您良好的用户体验,请允许${authorityMap[val.type]}权限`,
showCancel: false,
success() {
uni.openSetting({
async success(settingdata) {
if (settingdata.authSetting[val.type]) {
await val.method()
} else {
console.log('获取权限失败')
uni.showToast({
title: '获取权限失败',
icon: 'error',
duration: 2000
})
}
}
})
}
})
}
})
} else {
await val.method()
}
}
})
}
})
},