uni-app利用uniCloud获取微信步数并将数据写入数据库
本项目依赖了uni-id
只是毕业设计,想法不完善,没有对用户授权失败做处理,如果编写的时候需要注意
第一步:调用wx.login()接口
拿到登录态的code
,传送给云端,获取uid,便于之后写入数据库
第二步:云端
调用uniID.loginByWeixin()接口,获取到用户的信息
第三步:客户端
拿到Uid,token,token的过期时间,并持久化保存
第四步:客户端
调用wx.getWeRunData(),拿到加密数据
第五步:云端(使用的Node.js)
- 从此处 下载示例代码,将其放至云端
- 在入口函数引入
- 编写代码
第六步:入库
如果能够查询到doc_id,则覆写,如果查询不到,则新增。
完整代码
样式,获取用户信息的按钮
<view class="container"><button type="default" open-type="getUserInfo" @getuserinfo="userinfo">登录</button></view>
客户端
uni.login({
//step 1
provider: "weixin",
success: (res) => {
const code = res.code;
// 换取登录态信息
uniCloud.callFunction({
name: "login_wx",
data: {
code,
typea: "werun",
},
success: (result) => {
console.log(result);
//step 3
const uid = result.result.uid;
const sessionKey = result.result.sessionKey;
uni.setStorageSync("uni_id_token", result.result.token);
uni.setStorageSync(
"uni_id_token_expired",
result.result.tokenExpired
);
//step 4
wx.getWeRunData({
success: (werunData) => {
werunData.sessionKey = sessionKey;
werunData.user_id = uid;
console.log(werunData);
uniCloud.callFunction({
name: "decrypt_werun_data",
data: {
werunData,
},
success(db_write_result) {
debugger;
console.log("=================读写数据库======");
console.log(db_write_result);
console.log("=================读写数据库完======");
},
});
},
});
},
});
},
});
云端
// step 5.2
const WXBizDataCrypt = require("./WXBizDataCrypt.js");
const db = uniCloud.database();
exports.main = async (event, context) => {
//event为客户端上传的参数
// return event
const appID = "your appID";
// step 4
const {
sessionKey,
encryptedData,
iv
} = event.werunData;
const pc = new WXBizDataCrypt(appID, sessionKey);
const data = pc.decryptData(encryptedData, iv);
// return data;
// return event.werunData.user_id;
/**
* @description step 6
*/
const collection = db.collection('werun');
// 利用Uid查询文档id
let search_docid_result = await collection.field({
"_id": true
}).where({
"user_id": event.werunData.user_id
}).get();
// 数据库中没有该记录,添加
if (search_docid_result.data.length === 0) {
let add_data_result = await collection.add({
last_modified_time: data.watermark.timestamp,
sports_details: data.stepInfoList,
user_id: event.werunData.user_id
});
add_data_result.type = "add";
// 出口1
return add_data_result;
}
// 数据库有该记录,覆写
search_docid_result = search_docid_result.data[0]._id;
// return search_docid_result;
let update_data_result = await collection.doc(search_docid_result).set({
last_modified_time: data.watermark.timestamp,
sports_details: data.stepInfoList,
user_id: event.werunData.user_id
});
update_data_result.type = "rewrite";
// 返回数据给客户端
// 出口2
return update_data_result;
};