这里设计成这种异步接口就是因为导出操作耗时可能会比较长,可能需要等待一段时间。
job_id获取后进行查询时的bug云开发使用HTTP导出数据库获取job_id后马上进行迁移状态查询是获取不到下载地址的?
2019-08-02目前长耗时的云函数确实有几率触发内部的重试机制,近期会优化。
httpapi方式调用云函数有很大机率云函数被执行两次通过httpapi方式调用云函数,有很大机率云函数会被连续触发两次(1秒内),即使两次云函数都正确执行和返回,但是http response却是“system error hint” var tkResult = await util.getAccessToken() if (tkResult.isOK) { var options = { method: 'POST', uri: 'https://api.weixin.qq.com/tcb/invokecloudfunction?access_token=' + tkResult.atoken + '&env=fympcloud-659f2f&name=getStudent', body: { type: 0, account: req.params.account }, json: true } var rpResult = await rp(options) console.log(rpResult) if (rpResult.errcode == 0) { var tmpRecord = JSON.parse(rpResult.resp_data) [图片] debug了一下,觉得不是http request发了两次,应该是云函数通过http api方式被触发可能有问题。 请问有知道原因的吗? 请官方核查。
2019-07-26从结果上看推测是参数填错了,你贴出来的代码不全,能否贴一下uploadfile这个api最终发出去的http报文以及后面那个multipart格式的http报文?
什么时候能解决云开发使用uploadFile HTTPAPI上传文件后不可用使用云开发,在自己的服务器管理微信云端的小程序数据,实现ServerLess的小程序服务。 在这个项目进行到测试阶段,发现了API的BUG问题,使用云开发HTTP API上传文件到微信小程序云存储,在小程序中使用 image src=cloud://xxxxfileID,控制台显示报错,不知道是什么原因。 按文档说明,使用的API是: POST /tcb/uploadfile?access_token={token}该调用成功后会返回一些重要参数,在之后还需要使用这些参数再次调用接口,完成将文件上传到腾讯云。 下面是一段Java代码,实现按参数返回的接口地址和其他参数,调用上传文件。 [代码]String fileName2 = Optional.of(fileName).orElse(file.getName());[代码][代码]MultipartBody requestBody = [代码][代码]new[代码] [代码]MultipartBody.Builder()[代码][代码] [代码][代码].addFormDataPart([代码][代码]"key"[代码][代码], path)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"Signature"[代码][代码], authorization)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"x-cos-security-token"[代码][代码], token)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"x-cos-meta-fileid"[代码][代码], cosFileId)[代码][代码] [代码][代码].addFormDataPart([代码][代码]"file"[代码][代码], fileName2, RequestBody.create(MultipartBody.FORM, file))[代码][代码] [代码][代码].build();[代码][代码]Request request = [代码][代码]new[代码] [代码]Request.Builder()[代码][代码] [代码][代码].url(url)[代码][代码] [代码][代码].post(requestBody)[代码][代码] [代码][代码].build();[代码][代码]try[代码] [代码](Response response = okHttpClient.newCall(request).execute()) {[代码][代码] [代码][代码]return[代码] [代码]response.body().string();[代码][代码]} [代码][代码]catch[代码] [代码](IOException e) {[代码][代码] [代码][代码]Integer code = [代码][代码]1[代码][代码];[代码][代码] [代码][代码]String codeString = [代码][代码]"Call failure:"[代码] [代码]+ e.getClass().getSimpleName();[代码][代码] [代码][代码]String errorMessage = e.getMessage();[代码][代码] [代码][代码]throw[代码] [代码]new[代码] [代码]WeChatCloudAPICallFailException(code, codeString, errorMessage);[代码][代码]}[代码]在这一步,调用也成功,然后在微信开发者工具也能看到已上传的文件和文件夹。 但是,这个文件夹显示有点奇怪,还带了冒号,请看图: [图片] [图片] 上面显示的FileID也是比较奇怪,与调用 HTTP API 上传文件得到的FileID不一样, HTTP API给我返回的值是cloud://test-p73gd.7465-test-p73gd-1259274660/upload_201907/MPCCb0a66c6ee1d7420f94aabb6d5bdcc925.png 如果是直接用小程序 wx.cloud.uploadFile 上传文件,那上传的文件夹不会出现这种奇怪的情况,而且文件fileID是正常可用的。 所以这个应该是云HTTP API的BUG。 遇到这个问题已经快一个月了,之前也有提过,很着急等着,麻烦官方反馈一下,不胜感激!
2019-07-26周六系统段时间故障,重试一下试试
云调用openapi.security.msgSecCheck接口有人成功过吗[代码]// 云函数入口文件[代码][代码]const cloud = require('wx-server-sdk')[代码] [代码]cloud.init()[代码] [代码]// 云函数入口函数[代码][代码]exports.main = async (event, context) => {[代码][代码] [代码][代码]try {[代码][代码] [代码][代码]const result = await cloud.openapi.security.msgSecCheck({[代码][代码] [代码][代码]content: event.text[代码][代码] [代码][代码]})[代码][代码] [代码][代码]// { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }[代码][代码] [代码][代码]return result[代码][代码] [代码][代码]} catch (err) {[代码][代码] [代码][代码]// 错误处理[代码][代码] [代码][代码]// err.errCode !== 0[代码][代码] [代码][代码]throw err[代码][代码] [代码][代码]}[代码][代码]}[代码]Uncaught (in promise) Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail requestID 1d75276b-aab7-11e9-aad2-525400e8849e, cloud function service error code -504002, error message errCode: -4 | errMsg: system error: error code: -4; at cloud.callFunction api; at new u (WAService.js:1) at d (WAService.js:1) at Object.t.returnAsFinalCloudSDKError (WAService.js:1) at Function.success (WAService.js:1) at WAService.js:1 at E (WAService.js:1) at i.<anonymous> (WAService.js:1) at i.emit (WAService.js:1) at Ka (WAService.js:1) at WAService.js:1
2019-07-22聚合函数是近期新增的功能,http api暂未提供支持,后续会跟进。
云开发控制台和Http api 聚合函数 命令无效- 需求的场景描述(希望解决的问题) - 希望提供的能力 云开发控制台和Http api 聚合函数 命令无效
2019-07-22请问为什么会有这种需求? http api的应用场景之一就是脱离控制台自动化处理一些任务,建议自己写一个小脚本把导出、下载文件这两个操作拼成一个工具。
databaseMigrateExport导出-请求参数-导出文件路径- 需求的场景描述(希望解决的问题) databaseMigrateExport 将数据库导出 去后导出文件路径 - 文件会导出到同环境的云存储中 问题是 但是使用云开发控制台 的云存储 并不能找到 导出文件 只能通过下面得查询 下载url, databaseMigrateQueryInfo - 希望提供的能力 希望能在控制台 找到 导出文件。
2019-07-18请提供一下错误出现的时间以及appid
为什么个别用户的小程序调用失败cloudID expired- 当前 Bug 的表现(可附上截图) 一个小程序,登录模块用了云函数,获取openid。个别用户无法正常使用 - 预期表现 通过button的获取用户信息功能获取到cloudId,然后通过云函数获取openid,大部分用户可以正常使用。 - 复现路径 个别用户无法正常获取。 我在云函数日志中看到返回信息如下: 提示说cloudId失效,请问怎么解决。我更新了客户端也没有用。 {"list":[{"cloudID":"23_hFRNwUsOn9ia_fv3gwpt90kso7z0cCMSh2yyIomqzjD9xC2bcjjF9yZF8o8","errCode":-601006,"errMsg":"cloudID expired."}],"errMsg":"getOpenData:ok","errCode":0}
2019-07-16http api本身是支持汉字的,注意一下你的汉字编码是不是utf8。
云服务http API 参数传递报错- 当前 Bug 的表现(可附上截图) [图片] [图片] - 预期表现 如何参数为英语时则正常插入记录,修改为汉字则会提示错误 [图片]
2019-07-10post的data不能为空,如果云函数不需要参数,可以传{}
【HTTP API】C#发送POST请求时报错-501007我的测试云函数,名称test [代码]// 云函数入口文件[代码][代码]const cloud = require([代码][代码]'wx-server-sdk'[代码][代码])[代码] [代码]cloud.init()[代码] [代码]// 云函数入口函数[代码][代码]exports.main = async () => {[代码] [代码] [代码][代码]var[代码] [代码]temp=[代码][代码]"我的云函数内容啦"[代码][代码] [代码] [代码] [代码][代码]return[代码] [代码]{[代码][代码] [代码][代码]temp[代码][代码] [代码][代码]}[代码][代码]}[代码] C#这边的代码 ob是我通过GET请求获得的返回数据用json解析后,ob.access_token就是我的接口调用凭证 云开发环境ID也没问题 云函数那边试过要参数也一样报这个错,不要参数也报一模一样的错 [代码]string[代码] [代码]url = String.Format([代码][代码]"https://api.weixin.qq.com/tcb/invokecloudfunction?access_token="[代码] [代码]+ ob.access_token + [代码][代码]"&env=(这里是我的云开发环境ID)&name=test"[代码][代码]);[代码][代码]WebRequest request2 = WebRequest.Create(url);[代码][代码]request2.Method = [代码][代码]"POST"[代码][代码];[代码] [代码]WebResponse response = request2.GetResponse();[代码][代码]//从网络资源中返回数据流[代码][代码]Stream stream2 = response.GetResponseStream();[代码] [代码]sr = [代码][代码]new[代码] [代码]StreamReader(stream2, coding);[代码] [代码]//将数据流转换文字符串[代码][代码]string[代码] [代码]result = sr.ReadToEnd();[代码] [代码]//关闭流数据[代码][代码]stream.Close();[代码][代码]sr.Close();[代码] 最终我这边获取到的返回就是: {"errcode":-501007,"errmsg":"Invalid request param hint: [64uusA03652162]"} 查了-501007是云资源通用错误:参数错误,调试很久都没找到解决方法 求助怎么解决?
2019-07-10从调用时间和调用耗时上看,你贴出来的这两个voiceCallForOther的调用结果都不会被2019-07-04 18:55:35的这次voiceCall的调用拿到。 另外这两次voiceCallForOther的调用都成功了,那voiceCall拿到的系统错误的结果肯定是另外的voiceCallForOther过程产生的。 建议在voiceCallForOther的参数中增加一个用来跟踪请求的字段,确定两个函数的调用关系。
httpapi方式调用有request-promise同步请求的云函数会执行两次问题: http api 云函数调用经常报系统错误。 过程: 有两个小程序分别各自有一个云函数, 记做 小程序a 有云函数 voiceCall 小程序b 有云函数 voiceCallForOther voiceCall 使用http api方式调用 voiceCallForOther --------------------------------------------------------------------------------------------------------- voiceCall 的调用日志 2019-07-04 18:55:35调用成功 日志内容 Request ID: 402f3ba3-9e4a-11e9-ac86-525400681fe1 执行时间: 1830.61ms内存使用: 19.49 MB 返回结果 {"voiceUrl":"","message":"fail"} 日志 START RequestId: 402f3ba3-9e4a-11e9-ac86-525400681fe1 Event RequestId: 402f3ba3-9e4a-11e9-ac86-525400681fe1 中途http api 调用voiceCallForOther的响应结果 { errcode: -1, errmsg: 'system error hint: [X1z6ta07363040!]' } ------------------------------------------------------ voiceCallForOther 的 响应 居然有两条 2019-07-04 18:55:36调用成功 日志内容 Request ID: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b 执行时间: 3814.51ms内存使用: 1.16 MB 返回结果 {"resultFileURL":"","resultFileID":"","message":"OK"} 日志 START RequestId: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b Event RequestId: 40e47bbf-9e4a-11e9-a5c2-525400b2c41b 2019-07-04 18:55:37调用成功 日志内容 Request ID: 415ccd29-9e4a-11e9-a5c2-525400b2c41b 执行时间: 1845.12ms内存使用: 21.29 MB 返回结果 {"resultFileURL":"","resultFileID":"","message":"OK"} 日志 START RequestId: 415ccd29-9e4a-11e9-a5c2-525400b2c41b Event RequestId: 415ccd29-9e4a-11e9-a5c2-525400b2c41b 总结调用 voiceCall 云函数使用 http api invokecloudfunction 方式调用 voiceCallForOther 云函数 ,voiceCallForOther 云函数会执行两次, 所以voiceCall 总是收到 系统错误的返回结果 { errcode: -1, errmsg: 'system error hint: [X1z6ta07363040!]' } 请问为什么出现这种结果?如何修正? ----------------------------------------------------------------------------------------------------------------- 找到原因 经过查证,是voiceCallForOther 云函数里面 有个函数 (rp为request-promise) function getAccessToken(subscriptionKey) { let options = { method: 'POST', uri: uri, headers: { 'Ocp-Apim-Subscription-Key': subscriptionKey } } return rp(options); } var accessToken = await getAccessToken(key); 只要执行await getAccessToken(key); 云函数voiceCallForOther 就会重新被系统再调用一次,和第一次一样的参数和代码执行。 发现过程:我把 await getAccessToken(key); 注释掉,就没有调用第二次voiceCallForOther 了。 诡异的是 第二次voiceCallForOther 执行的是和第一次一样的代码,所以第二次还是会执行 await getAccessToken(key),为什么第二次执行没有引发第三次 自身触发? 请官方或者大神来帮忙解惑,解决我的问题?头疼。 ----------------------------------------------------------------------------------------- 自己把await getAccessToken(key);注释了, 执行另一个含有request-promise请求的 内部函数 此voiceCallForOther 云函数依然会被执行两次。 大bug:httpapi方式调用有request-promise同步请求的云函数会执行两次 另外:我开始本地调试voiceCallForOther 运行是没有问题的。 只是http api方式调用voiceCallForOther ,会执行两次。voiceCallForOther 含有同步await request-promise请求。 吐槽:httpapi调用对云函数的响应时间只有5s。 我花了2天时间 减少云函数的运行响应时间在5s以内。 接着还有2两天时间,研究调查这个httpapi 调用这个大bug。。。。。。。。。。。。。。 总计4天时间。 强烈要求官方来答一波
2019-07-04