uniapp如何获取微信步数
刘柏宏 2023-07-09编程经验
1.概述获取微信步数是一个比较常见的需求,可以应用于健身、社交、打卡等场景。在uniapp中,我们可以通过微信的api来获取用户的步数。下面就让我们来看看具体的实现流程。2.获取步数的流程说明获取步数的流程需要涉及到三个主要的
1. 概述
获取微信步数是一个比较常见的需求,可以应用于健身、社交、打卡等场景。在uniapp中,我们可以通过微信的api来获取用户的步数。下面就让我们来看看具体的实现流程。
2. 获取步数的流程说明
获取步数的流程需要涉及到三个主要的步骤,分别是信令获取、数据加密和数据解密。在实现这三个步骤前,我们需要在微信开发平台中创建应用,获取appId和appSecret。具体流程如下:
1. 微信官方文档:https://developers.weixin.qq.com/doc/platform/OpenAPI/get_step_info.html 2. 点击左侧目录栏请求地址中的资源下载open_id_uni.zip 3. 微信开发平台获取appid和appsecret
其中,信令获取的过程需要从微信服务器获取openId等信息。代码示例如下:
uni.getProvider({ service: 'oauth', success: function (res) { if (~res.provider.indexOf('weixin')) { // 判断是否为微信环境 uni.login({ provider: 'weixin', success: function (loginRes) { if (loginRes.code) { uni.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: 'your appId', secret: 'your appSecret', js_code: loginRes.code, grant_type: 'authorization_code' }, success: function (res) { console.log(res); if (res.data.openid) { // 获取openId成功,此处可以进行加密、解密等其他操作 } else { console.error('获取openId失败'); } }, fail: function () { console.error('request fail'); } }); } else { console.error('登录失败!' + loginRes.errMsg); } }, fail: function () { console.error('login fail'); } }); } } });
3. 数据加密
在获取到openId和sessionId之后,需要进行数据加密。具体的加密流程如下:
1. 将“appid”、“session_key”、“encryptedData”三个参数进行字典序排序。 2. 将参数串并成一个字符串。 3. 对拼接后的字符串进行sha1算法,得到signature。
代码示例如下:
import sha1 from 'js-sha1'; const paramArr = [ 'appid=' + appId, 'encryptedData=' + encryptedData, 'session_key=' + sessionKey ]; paramArr.sort(); const signature = sha1(paramArr.join('&'));
4. 数据解密
经过数据加密之后,我们还需要进行数据解密。解密过程需要使用到另一个参数——iv(初始向量)。解密流程如下:
1. Base64解密encryptedData。 2. Base64解密session_key。 3. Base64解密iv。 4. 用session_key解密第一步的结果,得到原始数据。 5. 对原始数据进行解析,得到步数等信息。
代码示例如下:
import CryptoJS from 'crypto-js'; import Base64 from '@/utils/base64'; // AES-128-CBC解密 const decrypt = (ciphertextStr, keyWordStr, ivWordStr) => { const key = CryptoJS.enc.Base64.parse(keyWordStr); const iv = CryptoJS.enc.Base64.parse(ivWordStr); const ciphertext = Base64.decode(ciphertextStr); const decrypted = CryptoJS.AES.decrypt( ciphertext, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 } ); return decrypted.toString(CryptoJS.enc.Utf8); }; // 在上述获取openId和sessionId的代码中进行 const encryptedData = res.encryptedData; const sessionKey = res.session_key; const signature = res.signature; const iv = res.iv; const decryptedData = JSON.parse(decrypt(encryptedData, sessionKey, iv)); console.log('解密后的步数:' + decryptedData.stepInfoList[30].step);
5. 总结
通过上述的步骤,我们就实现了uniapp获取微信步数的具体流程。其中,获取openId和sessionId的代码是必要的前提,加密和解密的过程则是将获取到的数据进行处理和转化的关键。
很赞哦! ()