c语言编程笔录

您现在的位置是:首页 > 编程 > 编程经验

编程经验

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的代码是必要的前提,加密和解密的过程则是将获取到的数据进行处理和转化的关键。

文章评论