追梦随想
追梦随想
  • 发布:2026-04-03 19:35
  • 更新:2026-04-11 14:57
  • 阅读:327

【报Bug】支付宝云服务空间内的云对象返回值如果是字符串会报错

分类:uniCloud

产品分类: uniCloud/支付宝小程序云

操作步骤:

我在A云对象内调用了B云对象,B云对象生成了一个邀请码字符串直接返回了。
因为之前是在阿里云服务空间,没有这个问题,近日迁移到支付宝云了,发现很多用户发送了短信但没有注册,好奇之下看了日志,才发现这个坑

预期结果:

无论什么格式都应该正确返回

实际结果:

字符串报错,json格式正常

bug描述:

云对象返回值如果是字符串会报错,根据报错内容大概意思是解析json的时候发生了错误

JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")  
    at /var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:57549  
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
    at async Proxy.<anonymous> (/var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:15397)  
    at async Object.register (/var/task/code/module/passport.js:118:25)  
    at async c (/var/task/code/__index.js:1:2798)  
    at async We (/var/task/code/index.js:2:86679)  
    at async Je (/var/task/code/index.js:2:86929)  
    at async FetchEventPearl2.handleRequest (/var/task/index.js:62628:17)  
    at async Container.dispatchHttpRequest (/var/task/index.js:68654:17)  
    at async Container.dispatch (/var/task/index.js:68635:14) {  
  errMsg: 'JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")',  
  errCode: -1,  
  code: -1,  
  errSubject: undefined,  
  forceReturn: false,  
  cause: undefined  
}
2026-04-03 19:35 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

感谢提交这个详细的bug反馈。以下是我作为DCloud官方人员对该反馈的评审意见:

1. 反馈内容完整性分析

优点:

  • 标题清晰,明确指出了问题发生在支付宝云服务空间且与云对象返回类型相关
  • 错误日志完整,包含了完整的堆栈信息和具体的错误内容("4KDEDD"),有助于定位问题
  • 复现步骤描述了关键的上下文信息(A云对象调用B云对象、从阿里云迁移到支付宝云后出现的问题)
  • 明确对比了预期结果和实际结果

需要补充的信息:

  • 缺少云对象代码示例:没有提供B云对象返回字符串的具体代码(如return "4KDEDD"还是return inviteCode),也没有提供A云对象调用B云对象的代码
  • 缺少版本信息:未说明使用的HBuilderX版本、uniCloud SDK版本
  • 缺少项目配置:未说明是云函数普通模式还是云对象模式的具体配置

建议补充:

// 建议补充B云对象的大致代码  
module.exports = {  
  generateCode() {  
    const code = "4KDEDD"  
    return code  // 直接返回字符串  
  }  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

2. Bug成立性分析

从知识库中关于云函数返回格式的文档来看,云函数(包括云对象)的返回数据通常会被包装在JSON响应体中。错误信息JSONResponseFormatError表明支付宝云的runtime在尝试将云对象返回值序列化或反序列化时,对纯字符串格式的处理存在问题。

关键判断:

  • 阿里云和支付宝云在底层实现上存在差异,支付宝云可能对返回值的JSON格式要求更为严格
  • 根据错误堆栈,问题发生在/var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js,这是支付宝云特定的运行时处理逻辑
  • 知识库中多处提到支付宝云的兼容性问题(如插件市场中多个插件标注支付宝云不支持或需要特殊处理)

结论: 这是一个平台兼容性Bug。虽然最佳实践建议返回JSON对象(如return { code: "4KDEDD" }),但框架应当兼容直接返回基础类型(字符串、数字等)的情况,或者在支付宝云上有明确的错误提示和文档说明。

3. 临时解决方案

在官方修复前,建议将返回的字符串包装为对象:

// 不推荐  
return "4KDEDD"  

// 推荐  
return { inviteCode: "4KDEDD" }

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

4. 后续处理建议

建议将该问题提交到DCloud官方issue系统,并附上:

  1. 完整的云对象代码(调用方和被调用方)
  2. HBuilderX版本号
  3. 确认该问题在支付宝云稳定复现,但在阿里云正常

这是一个有效的平台兼容性bug反馈,需要开发团队针对支付宝云runtime的JSON序列化处理进行修复。

内容为 AI 生成,仅供参考
DCloud_uniCloud_CRL

DCloud_uniCloud_CRL

接口返回的是字符串吗?

  • DCloud_uniCloud_CRL

    贴下 passport.js:118:25 这个位置代码

    2026-04-07 11:41

  • 追梦随想 (作者)

    这里是调用了另一个云对象https://ext.dcloud.net.cn/plugin?name=dm-user-id-co,而这个云对象是直接复制uni-id-co内部的一个方法,返回的就是一个邀请码字符串,在阿里云没问题,支付宝云就不行

    2026-04-07 17:42

  • DCloud_uniCloud_CRL

    回复 追梦随想: 代码中有处理返回值的地方吗?支付宝云不存在返回字符串报错的问题。

    2026-04-08 13:40

  • 追梦随想 (作者)

    回复 DCloud_uniCloud_CRL: 没有的,直接return '4KDEDD';

    2026-04-08 20:38

  • DCloud_uniCloud_CRL

    回复 追梦随想: 发一个最小复现demo吧,我这边没有复现你这个问题。

    2026-04-09 10:40

  • 追梦随想 (作者)

    回复 DCloud_uniCloud_CRL: 发了

    2026-04-11 15:00

追梦随想

追梦随想 (作者)

test_a 云对象

module.exports = {  
    async demo() {  
        const code = await uniCloud.importObject('test_b').get_code();  
        console.log(code);  
    },  
}

test_b 云对象

module.exports = {  
    get_code() {  
        return '4KDEDD';  
    },  
}

将云对象上传到支付宝云服务空间
客户端调用

uniCloud.importObject('test_a').demo();

云对象报错日志

2026-04-11 14:53:15.754  [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] reserve_instance_start: reserveFunctionInstance start  
2026-04-11 14:53:15.758  [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] reserve_instance_end: reserveFunctionInstance success; instanceName=13cada85-80d7-4db2-ae27-bb7d58e52048 ip=10.75.76.227  
2026-04-11 14:53:15.758  [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] call_function_start: call function start  
2026-04-11 14:53:16.126 [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] user_code_execution: 13cada85-80d7-4db2-ae27-bb7d58e52048,version: aa9bc0f0  
2026-04-11 14:53:16.625 [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] sdk_request: 13cada85-80d7-4db2-ae27-bb7d58e52048,mode: function, path: /functions/invokeFunction, error, status: 200, cost: 439.97  
2026-04-11 14:53:16.626 [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] sdk_request_error: 13cada85-80d7-4db2-ae27-bb7d58e52048,SyntaxError [JSONResponseFormatError]: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")  
    at JSON.parse (<anonymous>)  
    at parseJSON (/var/task/code/node_modules/@alipay/faas-server-sdk/node_modules/urllib/dist/commonjs/utils.js:39:21)  
    at #requestInternal (/var/task/code/node_modules/@alipay/faas-server-sdk/node_modules/urllib/dist/commonjs/HttpClient.js:577:57)  
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
    at async HttpClient.request (/var/task/code/node_modules/@alipay/faas-server-sdk/node_modules/urllib/dist/commonjs/HttpClient.js:158:16)  
    at async request (/var/task/code/node_modules/@alipay/faas-server-sdk/node_modules/urllib/dist/commonjs/index.js:77:12)  
    at async callMiddleware (/var/task/code/node_modules/@alipay/faas-server-sdk/lib/requester/middlewares/call_middleware.js:1:526)  
    at async /var/task/code/node_modules/@alipay/faas-server-sdk/lib/requester/middlewares/sign_middleware_factory.js:1:1299  
    at async /var/task/code/node_modules/@alipay/faas-server-sdk/lib/requester/middlewares/init_call_functiongateway_headers_middleware.js:1:381  
    at async /var/task/code/node_modules/@alipay/faas-server-sdk/lib/requester/middlewares/body_middleware.js:1:748 {  
  opaque: undefined,  
  status: 200,  
  headers: {  
    'content-type': 'text/plain',  
    'x-faas-from-start': '1',  
    'x-http-response-code': '200',  
    'x-trace-id': '8c4c9e80-0a90-434d-9de1-7d44ad6c16c1',  
    date: 'Sat, 11 Apr 2026 06:53:16 GMT',  
    'content-length': '6'  
  },  
  res: {  
    status: 200,  
    statusCode: 200,  
    statusText: 'OK',  
    statusMessage: 'OK',  
    headers: {  
      'content-type': 'text/plain',  
      'x-faas-from-start': '1',  
      'x-http-response-code': '200',  
      'x-trace-id': '8c4c9e80-0a90-434d-9de1-7d44ad6c16c1',  
      date: 'Sat, 11 Apr 2026 06:53:16 GMT',  
      'content-length': '6'  
    },  
    size: 6,  
    aborted: false,  
    rt: 439.97,  
    keepAliveSocket: true,  
    requestUrls: [ 'http://10.75.96.205:8081/functions/invokeFunction' ],  
    timing: {  
      queuing: 3.534,  
      connected: 8.519,  
      requestHeadersSent: 9.073,  
      requestSent: 9.617,  
      waiting: 437.878,  
      contentDownload: 438.859  
    },  
    socket: {  
      id: 2,  
      localAddress: '172.17.3.34',  
      localPort: 32768,  
      remoteAddress: '10.75.96.205',  
      remotePort: 8081,  
      remoteFamily: 'IPv4',  
      bytesWritten: 1119,  
      bytesRead: 206,  
      handledRequests: 1,  
      handledResponses: 1,  
      connectedTime: 2026-04-11T06:53:16.194Z  
    },  
    retries: 0,  
    socketErrorRetries: 0  
  },  
  socket: {  
    id: 2,  
    localAddress: '172.17.3.34',  
    localPort: 32768,  
    remoteAddress: '10.75.96.205',  
    remotePort: 8081,  
    remoteFamily: 'IPv4',  
    bytesWritten: 1119,  
    bytesRead: 206,  
    handledRequests: 1,  
    handledResponses: 1,  
    connectedTime: 2026-04-11T06:53:16.194Z  
  }  
}  
2026-04-11 14:53:16.635 [test_a][USER][WARN][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] execute: 13cada85-80d7-4db2-ae27-bb7d58e52048,Error: JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")  
    at /var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:57549  
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
    at async Proxy.<anonymous> (/var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:15397)  
    at async i.demo (/var/task/code/index.obj.js:5:16)  
    at async We (/var/task/code/index.js:2:86679)  
    at async Je (/var/task/code/index.js:2:86929)  
    at async FetchEventPearl2.handleRequest (/var/task/index.js:62628:17)  
    at async Container.dispatchHttpRequest (/var/task/index.js:68654:17)  
    at async Container.dispatch (/var/task/index.js:68635:14)  
    at async /var/task/index.js:68094:30  
2026-04-11 14:53:16.635 [test_a][SYSTEM][INFO][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] user_code_execute_exception: 13cada85-80d7-4db2-ae27-bb7d58e52048,w [Error]: JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")  
    at /var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:57549  
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)  
    at async Proxy.<anonymous> (/var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:15397)  
    at async i.demo (/var/task/code/index.obj.js:5:16)  
    at async We (/var/task/code/index.js:2:86679)  
    at async Je (/var/task/code/index.js:2:86929)  
    at async FetchEventPearl2.handleRequest (/var/task/index.js:62628:17)  
    at async Container.dispatchHttpRequest (/var/task/index.js:68654:17)  
    at async Container.dispatch (/var/task/index.js:68635:14)  
    at async /var/task/index.js:68094:30 {  
  errMsg: 'JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: "4KDEDD")',  
  errCode: -1,  
  code: -1,  
  errSubject: undefined,  
  forceReturn: false,  
  cause: undefined  
}  
2026-04-11 14:53:16.637  [test_a][SYSTEM][ERROR][8c4c9e80-0a90-434d-9de1-7d44ad6c16c1] call_function_end: call function failed; err: {"code":"400","message":"error: JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: \"4KDEDD\"). stack: Error: JSONResponseFormatError: Unexpected token K in JSON at position 1 (data json format: \"4KDEDD\")\n    at /var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:57549\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async Proxy.<anonymous> (/var/task/code/@dcloudio/serverless/lib/alipay/uni-cloud.js:1:15397)\n    at async i.demo (/var/task/code/index.obj.js:5:16)\n    at async We (/var/task/code/index.js:2:86679)\n    at async Je (/var/task/code/index.js:2:86929)\n    at async FetchEventPearl2.handleRequest (/var/task/index.js:62628:17)\n    at async Container.dispatchHttpRequest (/var/task/index.js:68654:17)\n    at async Container.dispatch (/var/task/index.js:68635:14)\n    at async /var/task/index.js:68094:30"}
  • DCloud_uniCloud_CRL

    支付宝云云端SDK限制,只能返回JSON格式数据,非JSON格式会解析失败。

    2026-04-13 16:39

要回复问题请先登录注册