背景
在微信小程序开发时有一个请求需要发送数据,且数据需要进行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反序列化