uni-app 支付宝云入参后 return event 无数据返回 且 get 请求时 form-data 数据无法入参
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请求)
请求入参:
{
"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请求)
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
云对象无法通过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的调用代码,确保所有步骤都正确无误。