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请求数据时,对浮点数进行了精度截断导致的。具体来说,经纬度数据中的小数部分被截断,导致验签失败。

解决方案:

  1. 在接收数据时,直接获取原始字符串进行处理:
let bodyStr = httpInfo.body.toString(); // 确保获取原始字符串
let bodyParams = JSON.parse(bodyStr); // 自行解析JSON
  1. 或者使用Buffer方式处理:
let bodyBuffer = Buffer.from(httpInfo.body);
let bodyStr = bodyBuffer.toString('utf8');
  1. 如果仍然有问题,可以尝试修改云函数配置:
// cloudfunctions.json
{
  "memorySize": 256,
  "timeout": 5,
  "triggers": [
    {
      "url": true,
      "type": "http",
      "config": {
        "method": "POST",
        "bodyType": "raw"  // 确保使用原始数据格式
      }
    }
  ]
}
回到顶部