我曾在前两篇博文中讲了如果微信小程序通过php后端和云函数后端解密encryptedData获得过去三十一天微信运动步数,二者的实现关键步骤是一样的,首先是申请一个appid,在appid下申请一个密钥secret,第二步前端执行wx.login获得res.code,第三步前端执行wx.getWeRunData获得encryptedData、iv,第四步后端访问api.weixin.qq.com,代入appid、secret、res.code参数,获得sessionkey,第五步用官方示例代码解码encryptedData(需要变量encryptedData、iv和sessionkey),最后前端获得解密数据输出结果。
其实,如果用云函数我们可能更简单的后端代码就能实现,wx.getWeRunData除了获得encryptedData、iv之外,还有一个cloudID,我们可以用cloudID在后端直接获得步数,无需访问api.weixin.qq.com,后端几行代码就能搞定。
首先,你得有一个正式appid,这里不需要申请secret。
有了appid我们就可以新建项目了,打开开发工具,新建项目,这里选择云开发基础模板,可以看到开发工具已经为我们生成了一个quickstartFunctions的云函数,为了检测我们的含有云函数的小程序是否配置正确,可以将quickstartFunctions上传,然后任意测试一个官方的例程,比如获得openid,如果能正确输出结果,就说明我们配置是正确的,可以下一步了。
接下来就可以新建一个获得微信步数的云函数,新建一个nodejs云函数,这里取名为wxrundata,接着编写代码,代码如下。
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV,
})
exports.main = async (event, context) => {
return event
}
你没有看错,后端代码就是如此简单,然后上传此云函数,等待上传完成后,就可以编写前端代码,将除index以外的page全部删除,相应的app.json中index以外配置路径已删除,再将index对应的wxml、json、wxss和js的代码也全部删除,接着修改js代码如下
// pages/index/index.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
},
getrundata()
{
var that=this;
wx.getWeRunData({
success: function (res) {
console.log("wx.getWeRunData成功")
wx.cloud.callFunction(
{
name: 'wxrundata',
data: {
weRunData: wx.cloud.CloudID(res.cloudID)
},
success:function(res)
{
console.log("成功"+res.result)
console.log(res.result.weRunData.data.stepInfoList)
that.setData({
steplist:res.result.weRunData.data.stepInfoList
})
},
fail:function(e)
{
console.log("失败"+e)
}
},
)
},
})
},
})
再编写wxml代码,如下
<!--pages/index/index.wxml-->
<wxs module="m1">
var ts2date=function(timestamp)
{
//timestamp默认是1970-1-1加timestamp毫秒,这里秒,所以*1000
var date = getDate(timestamp*1000);
var year = date.getFullYear();
var month = ('0' + (date.getMonth() + 1)).slice(-2);
var day = ('0' + date.getDate()).slice(-2);
var hours = ('0' + date.getHours()).slice(-2);
var minutes = ('0' + date.getMinutes()).slice(-2);
var seconds = ('0' + date.getSeconds()).slice(-2);
//const formattedDate = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
var formattedDate = year + '-' + month + '-' + day ;
return formattedDate;
//return "fdsf";
}
module.exports.ts2date=ts2date;
</wxs>
<button type="warn" plain="true" bind:tap="getrundata">获取微信步数</button>
<view wx:for="{{steplist}}"> {{m1.ts2date(item.timestamp)}} {{item.step}}步</view>
运行代码,如图1,代码运行成功。
千万不要忘记将云函数的环境变量替换成你自己的。
好了,整个代码完成,因为云函数(上传后)已运行于腾讯的云端,因此可在真机上也能运行。over
源码地址:https://download.csdn.net/download/wstcl/89250128