uni-app 支付宝云入参后 return event 无数据返回 且 get 请求时 form-data 数据无法入参

发布于 1周前 作者 wuwangju 来自 Uni-App

uni-app 支付宝云入参后 return event 无数据返回 且 get 请求时 form-data 数据无法入参

产品分类

uniCloud/支付宝小程序云

示例代码

// 连接云数据库
const db = uniCloud.database();  

module.exports = {
  _before: function() { // 通用预处理器
    // const httpInfo = this.getHttpInfo();
    // console.log(httpInfo);
  },  
  // 删除公告信息  delAnnouncement  
  async delAnnouncement(event, context) {  
    // const data = event.queryStringParameters;  
    // const data = JSON.parse(event.queryStringParameters);  
    // let del = body;  
    // let res = await db.collection("announcement").doc(del).remove();  
    return event;  
  },  
  // 部分核心代码
}

操作步骤

建立一个云对象,云对象代码以代码实例为主。

使用支付宝云,云对象进行URL化后,请求delAnnouncement方法时,通过apipost进行get请求,使用的是body下form-data,云对象运行日志无入参信息,空白,但是使用阿里云可以显示入参信息!!!

发送post请求时,云对象运行日志可以入参,但是使用return event或者return event.body依然无数据,同样阿里云可以,仅支付宝云不可以。

预期结果

使用支付宝云,云对象进行URL化后,请求delAnnouncement方法时,通过apipost进行get请求,使用的是body下form-data,云对象显示入参信息!!!

实际结果

使用支付宝云,云对象进行URL化后,请求delAnnouncement方法时,通过apipost进行get或者psot请求,使用的是body下form-data,云对象无入参信息!!!

bug描述

建立一个云对象,云对象代码以代码实例为主。

使用支付宝云,云对象进行URL化后,请求delAnnouncement方法时,通过apipost进行get请求,使用的是body下form-data,云对象运行日志无入参信息,空白,但是使用阿里云可以显示入参信息!!!

发送post请求时,云对象运行日志可以入参,但是使用return event或者return event.body依然无数据,同样阿里云可以,仅支付宝云不可以。

阿里云云对象get日志:(图1请求) 图1请求

请求入参:

{
  "args": {
    "path": "/delAnnouncement",
    "httpMethod": "GET",
    "headers": {
      "content-length": "288",
      "cookie": "aliyungf_tc=6e15af622838f3d25f049a27dd257852844de167ac24d24b9eb45c9c5b0c5cae;acw_tc=ac11000117363246229457925ee86d1e6dbd48ecab15dca4b546cf9102ebb9",
      "x5-uuid": "8cb42efec7d175010541aca3a6ce1c61",
      "x-client-ip": "39.154.168.205",
      "x-forwarded-for": "39.154.168.205, 47.111.193.92, 39.96.130.165",
      "accept": "*/*",
      "x-real-ip": "39.154.168.205",
      "x-sinfo": "on",
      "host": "fc-mp-1a2816d0-1d6c-46a8-a5a4-2e9be391bb32.next.bspapp.com",
      "content-type": "multipart/form-data; boundary=--------------------------906451936686091124510637",
      "x-forwarded-by": "172.28.195.29:80",
      "cache-control": "no-cache",
      "accept-encoding": "gzip, deflate, br",
      "user-agent": "PostmanRuntime-ApipostRuntime/1.1.0"
    },
    "queryStringParameters": {
      "q": "cc11111dsd111",
      "qgvdfgfdgfg": "dfdsfssss"
    },
    "isBase64Encoded": false,
    "body": ""
  },
  "requestId": "ac1cc31d1736326154032166027"
}

请求响应状态: success

支付宝云云对象get日志:(图2请求) 图2请求

2025-01-08 16:57:11.326  [adminAnnouncement][SYSTEM][INFO][0a4b4c5717363266313245131235] reserve_instance_start: reserveFunctionInstance start
2025-01-08 16:57:11.335  [adminAnnouncement][SYSTEM][INFO][0a4b4c5717363266313245131235] reserve_instance_end: reserveFunctionInstance success; instanceName=316da974-ad53-42a9-abc3-2561a2fe1be4 ip=10.75.77.117
2025-01-08 16:57:11.335  [adminAnnouncement][SYSTEM][INFO][0a4b4c5717363266313245131235] call_function_start: call function start
2025-01-08 16:57:11.663 [adminAnnouncement][SYSTEM][INFO][0a4b4c5717363266313245131235] user_code_execution: 316da974-ad53-42a9-abc3-2561a2fe1be4,version: aa9bc0f0
2025-01-08 16:57:11.745 [adminAnnouncement][USER][INFO][0a4b4c5717363266313245131235] execute: 316da974-ad53-42a9-abc3-2561a2fe1be4,{
  path: '/delAnnouncement',
  httpMethod: 'GET',
  headers: {
    accept: '*/*',
    'accept-encoding': 'gzip, deflate, br',
    'cache-control': 'no-cache',
    'content-length': '288',
    'content-type': 'multipart/form-data; boundary=--------------------------348084099964761518606134',
    service: 'adminAnnouncement',
    'sofa-rpcid': '0a4b4c5717363266313245131235',
    'sofa-traceid': '0a4b4c5717363266313245131235',
    sofa_head_method_name: '/announcement/delAnnouncement',
    'user-agent': 'PostmanRuntime-ApipostRuntime/1.1.0',
    'x-djy-uuid': 'f8d18cf6-efe7-41e0-ba75-0f63a0ef5772',
    'x-faas-context-bindconfigs': '{"NEED_AUTH":"false","NEED_SIGN":"false"}',
    'x-faas-context-binddomain': 'env-00jxhew1a2ph.dev-hz.cloudbasefunction.cn',
    'x-faas-context-bindpath': '/announcement',
    'x-faas-runtime-call-context': '{"appId":"2021004182661748","traceId":"0a4b4c5717363266313245131235","rpcId":"0.1.2","requestId":"fcab599d-afe4-46a2-8c01-766d329b7ac8","eventType":"http"}',
    'x-faas-source-type': 'httpDefault',
    'x-forwarded-for': '39.154.168.205',
    'x-forwarded-proto': 'https',
    'x-real-ip': '39.154.168.205',
    'x-stream-request-id': 'd1b91a70-3ac8-4cd4-856f-0b1fa5ca1309',
    'x5-uuid': 'f8d18cf6-efe7-41e0-ba75-0f63a0ef5772'
  },
  queryStringParameters: {},
  body: '',
  isBase64Encoded: ''
}
2025-01-08 16:57:11.755  [adminAnnouncement][SYSTEM][INFO][0a4b4c5717363266313245131235] call_function_end: call function success

6 回复

云对象无法通过event获取请求信息,应该使用 this.getHttpInfo获取。


使用 this.getHttpInfo 获取的内容,get请求已经无法入参,之前在预处理那里已经设置过了。

云函数代码: // 删除公告信息 delAnnouncement async delAnnouncement(event, context) { // const data = event.queryStringParameters; // const data = JSON.parse(event.queryStringParameters); // let del = body; // let res = await db.collection(“announcement”).doc(del).remove(); const httpInfo = this.getHttpInfo(); return httpInfo; },

回复 1***@qq.com: get 请求无法设置body

使用 this.getHttpInfo 获取的内容,get请求无法入参

针对你提到的uni-app在支付宝云调用时遇到的问题,我们可以通过以下代码案例来尝试解决这两个问题:

1. 解决支付宝云入参后return event无数据返回的问题

首先,确保你在支付宝云函数中正确处理了入参并返回了数据。以下是一个简单的支付宝云函数示例,它接收一个参数并返回相应的数据:

// 云函数入口文件
const cloud = require('wx-server-sdk');

cloud.init();

exports.main = async (event, context) => {
  const { OPENID, FROM_APPID } = cloud.getWXContext(); // 获取用户的openid等信息
  
  // 假设event中包含一个名为'param'的参数
  const { param } = event;
  
  // 这里进行你的业务逻辑处理,比如查询数据库
  let result = {};
  if (param) {
    result = {
      message: '参数接收成功',
      data: param
    };
  } else {
    result = {
      message: '未接收到参数',
      data: null
    };
  }
  
  // 返回结果
  return result;
};

在uni-app中调用这个云函数时,确保你正确传递了参数,并处理了返回结果:

uni.cloud.callFunction({
  name: 'yourCloudFunctionName',
  data: {
    param: '你的参数值'
  },
  success: res => {
    console.log('云函数调用成功', res.result);
  },
  fail: err => {
    console.error('云函数调用失败', err);
  }
});

2. 解决GET请求时form-data数据无法入参的问题

对于GET请求,通常不使用form-data来传递数据,而是将参数附加到URL的查询字符串中。在uni-app中,你可以使用uni.request来发起GET请求,并正确附加参数:

uni.request({
  url: 'https://example.com/your-endpoint',
  method: 'GET',
  data: {
    key1: 'value1',
    key2: 'value2'
  },
  success: (res) => {
    console.log('GET请求成功', res.data);
  },
  fail: (err) => {
    console.error('GET请求失败', err);
  }
});

注意,在GET请求中,data对象的内容会被自动转换为查询字符串并附加到URL上。如果你确实需要使用form-data,通常这是POST请求的用途,确保你的API端点也支持以这种方式接收数据。

希望这些代码示例能帮助你解决问题。如果问题依旧存在,请检查支付宝云函数的配置和uni-app的调用代码,确保所有步骤都正确无误。

回到顶部