微信小程序开发 您所在的位置:网站首页 微信测量步数的小程序 微信小程序开发

微信小程序开发

2024-07-14 15:29| 来源: 网络整理| 查看: 265

官方API

https://mp.weixin.qq.com/debug/wxadoc/dev/api/we-run.html#wxgetwerundataobject

步骤

最近做一个微信小程序需用到微信运动数据,根据文档,我写了一个demo;先总结一下步骤,流程简单如下:

1、调用小程序API:wx.login获取code和sessionKey; 2、调用小程序API: wx.getWeRunData获取微信运动数据(加密的); 3、解密步骤2的数据;

我后台用C#的,其实其他语言原理一样,只有解密数据一个核心方法;

实现代码: 前端(小程序的 JS) const util = require('../../utils/util.js') Page({ /** * 页面的初始数据 */ data: { runData:[], }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { //1、调用小程序API:wx.login获取code和sessionKey; var that=this; wx.login({ success: function (resLogin) { if (resLogin.code) { wx.request({ url: 'http://localhost:9281/wxapp/onlogin', data: { code: resLogin.code }, success: function (resSession) { //2、调用小程序API: wx.getWeRunData获取微信运动数据(加密的); wx.getWeRunData({ success(resRun) { const encryptedData = resRun console.info(resRun); //3、解密步骤2的数据; wx.request({ url: 'http://localhost:9281/wxapp/decrypt', data: { encryptedData: resRun.encryptedData, iv: resRun.iv, code: resLogin.code }, method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT // header: {}, // 设置请求的 header success: function (resDecrypt) { var runData = JSON.parse(resDecrypt.data.data) console.info(runData); if (runData.stepInfoList) { runData.stepInfoList = runData.stepInfoList.reverse() for (var i in runData.stepInfoList) { runData.stepInfoList[i].date = util.formatTime(new Date(runData.stepInfoList[i].timestamp*1000)) } that.setData({ runData: runData.stepInfoList }); } } }); } }) } }) } else { console.log('获取用户登录态失败!' + res.errMsg) } } }); }, })

以上的http://localhost:9281 是本地环境啦

后端(c# .net MVC) //控制器 public class WxAppController : BaseController { /// /// 登录,获取sessionKey,对应上面的http://localhost:9281/wxapp/onlogin /// /// code /// public ActionResult OnLogin(string code) { if (string.IsNullOrEmpty(code) == false) { var sessionKey= WxAppHelper.GetSessionKey("你的appid", "你的appSecret", code); if (string.IsNullOrEmpty(sessionKey) == false) { //将sessionKey放入缓存,key是code CacheHelper.Set(code, sessionKey, 360); return WritingSuccess("登录成功"); } } return WritingFailed("登录失败"); } /// /// 解密,对应上面的http://localhost:9281/wxapp/decrypt /// /// public ActionResult Decrypt() { string code = Request["code"]; string iv = Request["iv"]; string encryptedData = Request["encryptedData"]; string sessionKey = CacheHelper.Get(code); //取出OnLogin的sessionKey string rawData = WxAppHelper.AES_decrypt(encryptedData, sessionKey, iv); if (string.IsNullOrEmpty(rawData) == false) { return WritingSuccess("解密成功", rawData); } return WritingFailed("解密失败"); } //WxAppHelper的GetSession public static AppSession GetSession(string appid,string appSecret,string code) { string api = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code"; string url = string.Format(api, appid, appSecret, code); var sessionStr = HttpUtil.Get(url); if (string.IsNullOrEmpty(sessionStr) == false) { return JsonHelper.Json2Object(sessionStr); } return null; } /// /// AES解密 /// /// /// /// /// public static string AES_decrypt(string encryptedDataStr, string key, string iv) { RijndaelManaged rijalg = new RijndaelManaged(); //----------------- //设置 cipher 格式 AES-128-CBC rijalg.KeySize = 128; rijalg.Padding = PaddingMode.PKCS7; rijalg.Mode = CipherMode.CBC; rijalg.Key = Convert.FromBase64String(key); rijalg.IV = Convert.FromBase64String(iv); byte[] encryptedData = Convert.FromBase64String(encryptedDataStr); //解密 ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV); string result=null; using (MemoryStream msDecrypt = new MemoryStream(encryptedData)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { result= srDecrypt.ReadToEnd(); } } } return result; } //实体 public class AppSession { public string session_key; public int expires_in; public string openid; }

ok啦,就是这么简单,我们看看运行结果:

运行结果

运动步数 简单吧~,哪里写的不清楚可以留言交流



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有