微信小程序PC端发送POST请求时,数据为纯文本格式引发的问题及解决方案

171 阅读1分钟

背景

微信小程序开发时有一个请求需要发送数据,且数据需要进行JSON序列化为字符串并加密后直接将加密后的字符串进行发送,且需要使用 POST 请求。

在移动端与开发工具中没有问题

当在pc端预览或真机调试时发现请求报错

问题原因

在移动端时,post请求中发送的数据正常,后端能够解析

导致问题发生的根本原因是pc端小程序在发送 POST 请求时,如果发送的数据是 纯文本格式 ,非JSON序列化之后的文本,会自动给发送的文本外层加上双引号"",导致后端拿到数据解密之后得到的JSON文本外层多了一对双引号,进一步导致了进行JSON反序列化时解析失败

以下为复现伪代码

const encryptoKey = 'xxxxxxxxxxx'
const data = {
    a:1,
    b:2
}

// 假设加密后得到的字符串为  abc123
const encryptoText = encrypto(JSON.stringify(data),encryptoKey)

// 发送请求
request({
    url:'http://xxxx.com/api/xxx
    method:'POST',
    data:encryptoText,
})

// 移动端小程序访问发起请求时,后端收到的数据为 abc123
// pc端小程序访问发起请求时 后端收到的数据为 "abc123" 外层多了一对双引号 "",

解决办法

需要后端对请求进行兼容处理,如果外层存在双引号,则去掉外层双引号之后再进行JSON反序列化