uni-app利用uniCloud获取微信步数并将数据写入数据库

uni-app利用uniCloud获取微信步数并将数据写入数据库

本项目依赖了uni-id

只是毕业设计,想法不完善,没有对用户授权失败做处理,如果编写的时候需要注意

第一步:调用wx.login()接口

拿到登录态的code ,传送给云端,获取uid,便于之后写入数据库

第二步:云端

调用uniID.loginByWeixin()接口,获取到用户的信息

第三步:客户端

拿到Uid,token,token的过期时间,并持久化保存

第四步:客户端

调用wx.getWeRunData(),拿到加密数据

第五步:云端(使用的Node.js)

  1. 从此处 下载示例代码,将其放至云端
  2. 在入口函数引入
  3. 编写代码

第六步:入库

如果能够查询到doc_id,则覆写,如果查询不到,则新增。

完整代码

样式,获取用户信息的按钮


客户端

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;
};

你可能感兴趣的:(nodejs,小程序,uni-app)