uni-app unicloud会截断请求数据不能完整获取post请求里面的数据
uni-app unicloud会截断请求数据不能完整获取post请求里面的数据
操作步骤:
const {
handleDeliveryStatusUpdate,
handleSfCancel,
handleOrderCompletion,
handleOrderException,
handleRiderRecall
} = require('../utils/handlers.js');
module.exports = {
/**
* 处理顺丰同城回调(主入口方法)
* @param {Object} params - 包含GET参数的对象
*/
async handleCallback(params) {
try {
// 获取HTTP请求信息
let httpInfo = this.getHttpInfo();
let bodyStr = httpInfo.body;
let bodyParams = {};
let receivedSign = params.sign
console.log("bodyStr原始数据", bodyStr)
console.log("sign", receivedSign)
} catch (error) {
console.error(error);
}
}
}
预期结果:
{
"shop_id": 3243279847393,
"sf_order_id": "JS4153276256918",
"shop_order_id": "SO1741771294995445",
"url_index": "rider_status",
"operator_name": "柳芸",
"operator_phone": "16541639283",
"rider_lng": 116.3350750000000033423930290155112743377685546875,
"rider_lat": 39.943297999999998637576936744153499603271484375,
"order_status": 10,
"status_desc": "配送员已指派",
"push_time": 1741771336,
"arrive_shop_time": 0,
"sf_ucode": "01405784"
}
实际结果:
{
"shop_id": 3243279847393,
"sf_order_id": "JS4153276256918",
"shop_order_id": "SO1741771294995445",
"url_index": "rider_status",
"operator_name": "柳芸",
"operator_phone": "16541639283",
"rider_lng": 116.335075,
"rider_lat": 39.943298,
"order_status": 10,
"status_desc": "配送员已指派",
"push_time": 1741771336,
"arrive_shop_time": 0,
"sf_ucode": "01405784"
}
bug描述:
云函数url化 的请求的post的请求经纬度位数过多,unicloud 得到的数据会被截断,数据如下,导致验签不通过。
{
"shop_id": 3243279847393,
"sf_order_id": "JS4153276256918",
"shop_order_id": "SO1741771294995445",
"url_index": "rider_status",
"operator_name": "柳芸",
"operator_phone": "16541639283",
"rider_lng": 116.3350750000000033423930290155112743377685546875,
"rider_lat": 39.943297999999998637576936744153499603271484375,
"order_status": 10,
"status_desc": "配送员已指派",
"push_time": 1741771336,
"arrive_shop_time": 0,
"sf_ucode": "01405784"
}
{
"shop_id": 3243279847393,
"sf_order_id": "JS4153276256918",
"shop_order_id": "SO1741771294995445",
"url_index": "rider_status",
"operator_name": "柳芸",
"operator_phone": "16541639283",
"rider_lng": 116.335075,
"rider_lat": 39.943298,
"order_status": 10,
"status_desc": "配送员已指派",
"push_time": 1741771336,
"arrive_shop_time": 0,
"sf_ucode": "01405784"
}
更多关于uni-app unicloud会截断请求数据不能完整获取post请求里面的数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
问题已修复,重新上传云函数试下。
更多关于uni-app unicloud会截断请求数据不能完整获取post请求里面的数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这个问题是由于UniCloud在处理POST请求数据时,对浮点数进行了精度截断导致的。具体来说,经纬度数据中的小数部分被截断,导致验签失败。
解决方案:
- 在接收数据时,直接获取原始字符串进行处理:
let bodyStr = httpInfo.body.toString(); // 确保获取原始字符串
let bodyParams = JSON.parse(bodyStr); // 自行解析JSON
- 或者使用Buffer方式处理:
let bodyBuffer = Buffer.from(httpInfo.body);
let bodyStr = bodyBuffer.toString('utf8');
- 如果仍然有问题,可以尝试修改云函数配置:
// cloudfunctions.json
{
"memorySize": 256,
"timeout": 5,
"triggers": [
{
"url": true,
"type": "http",
"config": {
"method": "POST",
"bodyType": "raw" // 确保使用原始数据格式
}
}
]
}