首页 > 编程语言 >小程序二维码配置+前端生成带参二维码+数据加密解密+地址逆解析

小程序二维码配置+前端生成带参二维码+数据加密解密+地址逆解析

时间:2023-07-17 10:57:42浏览次数:47  
标签:const 位置服务 res 带参 解密 二维码 CryptoJS data

这是一个关于用户回访调查的小程序,技术栈vue3+uniapp。遇到的知识点如下:

1.微信公众平台认证的小程序账号只对应一个小程序,一个邮箱只能绑定一个小程序,如果企业之前有认证过微信公众号的,可以复用微信公众号的资料认证小程序,这样就不需要另外收认证费。(复用公众号资料认证小程序流程:https://blog.csdn.net/dxnn520/article/details/129182588)

2.小程序生成普通二维码,开发者/体验者扫码体验。前端:配置二维码规则,后端:二维码规则中有个校验文本需要放置再服务器域名下。(如果配置之后扫码没反应,那可能是有哪些权限没有开通,我这个后端有开通了某些权限,具体生效是不是与后端开通某些权限有没有关系,我不晓得,我觉得大概率那个时候是因为自己没有点选项生成体验码,所以才无法体验)

 3.前端:生成带参数的二维码

3.1在src/utils下放置qrcode源码(如果有需要我可以发你,小白不晓得咋放置文件夹在随笔中)

 3.2需要用到的页面中导入

html

<view>
 <canvas type="2d" id="myQrcode" class="codeStyle" />
</view>

js

引入
import drawQrcode from '../../utils/weapp.qrcode.esm.js'
二维码生成函数
const qrcode = (obj) => {
  const query = wx.createSelectorQuery()
  query.select('#myQrcode')
    .fields({
      node: true,
      size: true
    })
    .exec((res) => {
      var canvas = res[0].node

      // 调用方法drawQrcode生成二维码
      drawQrcode({
        canvas: canvas,
        canvasId: 'myQrcode',
        width: 260,
        padding: 30,
        background: '#ffffff',
        foreground: '#000000',
        text: `http://www.xxx.com/code?id=zhuziyi&obj=${obj}`//二维码内容,此处内容是我上面配置的一个小程序二维码路径及所需要携带的参数
      })
      // 获取临时路径
      uni.canvasToTempFilePath({
        canvasId: 'myQrcode',
        canvas: canvas,
        x: 0,
        y: 0,
        width: 260,
        height: 260,
        destWidth: 260,
        destHeight: 260,
        success(res) {
          console.log('二维码临时路径:', res.tempFilePath)
        

        },
        fail(res) {
          console.error(res)
        }
      })
    })
}
qrcode()//调用

 4.携带参数加密解密

利用的是crypto-js,参考的一篇掘金上的文档

下载
npm run crypto-js

src/utils/encrypt.js  

import CryptoJS from "crypto-js";
// 设置密钥和密钥偏移量
// 十六位十六进制数作为密钥
const SECRET_KEY = CryptoJS.enc.Utf8.parse("1234123412341234");
// 十六位十六进制数作为密钥偏移量
const SECRET_IV = CryptoJS.enc.Utf8.parse("1234123412341234");
/**
 * 加密方法
 * @param data
 * @returns {string}
 */
export function encrypt(data) {
    if (typeof data === "object") {
      try {
        // eslint-disable-next-line no-param-reassign
        data = JSON.stringify(data);
      } catch (error) {
        console.log("encrypt error:", error);
      }
    }
    const dataHex = CryptoJS.enc.Utf8.parse(data);
    const encrypted = CryptoJS.AES.encrypt(dataHex, SECRET_KEY, {
      iv: SECRET_IV,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.ciphertext.toString();
  }
  
/**
 * 解密方法
 * @param data
 * @returns {string}
 */
export function decrypt(data) {
    const encryptedHexStr = CryptoJS.enc.Hex.parse(data);
    const str = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    const decrypt = CryptoJS.AES.decrypt(str, SECRET_KEY, {
      iv: SECRET_IV,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
  }

  

使用:
加密: const encryptText = encrypt(数据);//数据加密
解密: const decryptText=decrypt(数据)//解密

5.位置服务

位置服务(LBS)是基于用户的位置来提供服务的技术,通过要配合第三方的服务来实现,如腾讯地图、高德地图、百度地图等,在本项目采用的是腾讯的位置服务https://lbs.qq.com/

申请使用腾讯位置服务需要按如下步骤操作:

  1. 注册账号

  2. 创建应用

  3. 生成 key

  4. 小程序管理后台添加合法域名

5.1在使用位置服务的时候需要提供用户的位置(经纬度),关于用户的位置小程序提供了 API ,在使用获取位置的 API 时需要先在 app.json / manifest.json中进行声明,

{
  "requiredPrivateInfos": [
    "getLocation",
    "chooseLocation"
  ],
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示"
   }
}

调用 wx.getLocation() 获取用户当前位置,该 API 支持返回 Promise:

{
  async getLocation() {
    // 调用 API
    const {latitude, longitude} = await wx.getLocation()
    console.log(latitude, longitude)
  }
}

5.2接下来可以到项目中使用腾讯位置服务提供的功能了:

5.2.1导入位置服务微信小程序https://mapapi.qq.com/web/miniprogram/JSSDK/qqmap-wx-jssdk1.2.zip,它是官方封装好的一个 .js 文件

// utils/qqmap.js
// 导入腾讯位置服务 SDK
import QQMapWX from '../libs/qqmap-wx-jssdk'
// 实例化位置服务(使用个人申请的 key)
export default new QQMapWX({
  key: '填写自已的 KEY',
})

5.2.2调用 SDK 提供的方法 reverseGeocoder 实现逆解析https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodReverseGeocoder的功能,逆地址解析是指根据经纬度来获取具体的地址信息。

import map from '../../utils/qqmap'
const fn=async()=>{
  const {latitude, longitude}=await uni.getLocation()
  console.log(latitude, longitude,1111);
  map.reverseGeocoder({
    location:[latitude, longitude].join(','),
    success:(res)=>{
      console.log(res,99999);
    }
  })
}

注意:如果页面显示如下错误:

 修改如下:

 

标签:const,位置服务,res,带参,解密,二维码,CryptoJS,data
From: https://www.cnblogs.com/zhuziyi007/p/17559243.html

相关文章

  • SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文,查询明文
    场景为防止数据泄露,需要在插入等操作时将某表的字段在数据库中加密存储,在需要查询使用时明文显示。ShardingSphereShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。......
  • 解密Prompt系列11. 小模型也能COT-先天不足后天来补
    前两章我们分别介绍了COT的多种使用方法以及COT的影响因素。这一章更多面向应用,既现实场景中考虑成本和推理延时,大家还是希望能用6B的模型就不用100B的大模型。但是在思维链基础和进阶玩法中反复提到不论是few-shot还是zero-shot的思维链能力似乎都是100B左右的大模型才有的涌现能......
  • HJ29 字符串加解密
    1.题目读题HJ29 字符串加解密  考查点 2.解法思路 代码逻辑 具体实现 这道题目的解答思路是:首先,定义两个字符串,分别存储加密和解密的规则,例如"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"和"BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijk......
  • Vue路由跳转时携带参数
    在方法中使用this.$router.push方法进路由跳转时,需要携带参数,可以使用上下文参数,这样携带的话参数会一直存在,具体携带方式如下 在跳转路径下,添加state对象属性,属性名是固定的,对象中填入自己需要传递的参数,ps:对象需要转化为字符串,不然传递不过去,JSON。stringify方法进行字符串......
  • $O00OO0=urldecode微盾php解密
    例如,如下代码:$O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};如果要解密类似以上代码,第一步新建一个php文件,php文件的代码如下:<?......
  • C#_生成二维码放到excel中
    1、需要提前导包2、代码//创建二维码//content:扫描二维码出来的内容,例如想要扫出来的内容是:A=3&B=4,那么content就要赋值为content="A=3&B=4"privateBitmapcreateQRCode(stringcontent){QRCodeGeneratorqRCodeGenerator=newQRCodeGenerator();QRCodeDa......
  • 二维码简易实现 Vue+Springboot
    Vue:<template><div><img:src="database64"width="150px"/><div>注:请使用手机微信扫码,并于2分钟内绑定员工账号(二维码为账号独属,请勿分享)。</div></div></template><script>import{getQrCode}from"......
  • hutool md5 aes 加密解密
    //AES加密解密AESaes=newAES(Mode.CBC,Padding.ZeroPadding,"xxx".getBytes(),"xxx".getBytes());//加密并进行Base转码Stringencrypt=aes.encryptBase64(content);//解密为字符串Stringdecrypt=aes.decryptStr(encrypt);System.out.println(decrypt);......
  • feign 微服务调用,post请求如何在URL 后面带参数
    ​ 在Feign微服务调用中,可以通过在URL后面添加参数来进行POST请求。参数可以以两种方式传递:作为路径参数或查询参数。 路径参数:可以将参数添加到URL的路径中,并使用@PathVariable注解来获取参数的值。例如:@FeignClient(name="example-service")publicinterfaceExample......
  • ,软件运行监听地址 ,扫码登录,爬虫介绍,requests模块介绍和快速使用,get请求携带参数,编码
    补充#软件运行,监听地址127.0.0.1 只能访问127.0.0.1localhost不能用本机ip地址访问,外部所有人都不能访问你0.0.0.0 127.0.0.1localhost本机ip地址访问同一个局域网内,都可以通过ip地址访问#本地host解析 输入网址---》www.baidu.com---->找本地host文......