
示例工程小程序前端【免费下载链接】miniprogram-demo微信小程序组件 / API / 云开发示例项目地址https://gitcode.com/gh_mirrors/mi/miniprogram-demo点击查看免费下载本篇技术指南以微信小程序开源示例仓库 miniprogram-demo 中的 cloudfunctions/ARDemo 云函数为核心系统讲解如何基于 protobuf 协议文件proto驱动 svrkit 调用链完成三维识别与重建云服务的接口定义、代码生成、云函数编写与部署更新。读完本文你将掌握npm run svrkit背后完整的生成原理、ARDemo 提供的模型生成/查询协议字段含义以及小程序端调用该云函数的完整实战链路。ARDemo 云函数是什么ARDemo 是 miniprogram-demo 仓库中面向「三维识别与重建」场景的云函数示例。它并不是一个自研算法的实现而是作为微信小程序云开发环境与后台 svrkit 服务之间的协议桥云函数接收小程序端请求将参数按 protobuf 协议编码通过wx-server-sdk提供的callWXSvrkit能力转发到后台「Mmbizwxaintpar」服务从而完成 AR 模型的提交生成与结果获取。从仓库目录结构看ARDemo 云函数包含以下关键组成入口文件 index.js云函数入口负责事件分发与 svrkit 调用proto 协议文件定义 AR 模型相关的枚举、消息与接口契约svrkit.config.js声明 serviceName、magic、cmdid 及请求/响应消息映射svrkit-utils.js由 CLI 工具生成的调用工具含.static.js、.static.json两个附属产物cloud-functions-tools内置的tencent/cloud-functions-tools生成器源码与测试样例wx-server-sdk-wxg-service云开发 SDK 的内部服务插件注册后云函数才具备callWXSvrkit能力。整个链路可以概括为proto 定义契约 → CLI 生成调用代码 → 云函数按类型分发 →callWXSvrkit转发后台 → 返回结果给小程序端。proto 更新从协议变更到代码再生成ARDemo 的协议以 protobuf 为准后台接口的任何变更都通过更新 proto 文件 并重新生成 JS 调用代码来同步。原文档给出的流程分两步。第一步安装依赖在 ARDemo 目录下安装腾讯内部 npm 包管理工具tnpm对应的生成器依赖// ARDemo 目录下 tnpm install --save-dev tencent/cloud-functions-toolslatest该依赖在 package.json 中被声明为devDependencies: { tencent/cloud-functions-tools: ^1.7.0 }工具包通过bin字段对外暴露svrkit-utils命令行见 cloud-functions-tools/package.jsonbin: { svrkit-utils: bin/svrkit-utils }第二步基于 proto 文件生成脚本逻辑// ARDemo 目录下 npm run svrkit该命令对应的脚本定义在 package.json 中scripts: { svrkit: svrkit-utils --config ./svrkit.config.js --output ./svrkit-utils.js }即以svrkit.config.js为配置入口将生成结果输出到svrkit-utils.js。每次修改 proto 后都需重新执行一次该命令让协议字段、枚举值与云函数侧保持严格一致。npm run svrkit 背后发生了什么要理解这条命令需要直接阅读生成器实现 cloud-functions-tools/cli/svrkit-utils.js。该 CLI 的核心执行逻辑为解析配置读取--config指向的svrkit.config.js将其中每个模块项的proto字段解析为绝对路径config.map(c path.resolve(path.dirname(configPath), c.proto))生成静态模块调用protobufjs的pbjsCLI以static-module模式生成可独立运行的 JS 静态模块输出为svrkit-utils.static.jsconst pbjsArgs [-t, static-module, -w, commonjs, -l, eslint-disable, -o, staticModuleFilePath, ...protos]生成 JSON descriptors再次调用pbjs以json模式输出协议描述得到svrkit-utils.static.json其中以nested结构记录所有枚举、消息字段及编号供参数合法性校验使用拼接模板产出主文件读取模板 svrkit-utils-template.js与配置引用、静态模块、JSON 描述拼接后写入svrkit-utils.jsconst output const config require(${svrkitConfigRelativePath}) const proto require(./${staticModuleFileName}) const protoJSON require(./${staticJsonFileName}) ${protoUtils} 最终生成的 svrkit-utils.js 对外暴露两个方法generate(options)面向 svrkit 协议入参为{ serviceName, funcName, data }输出{ data, reqProto, resProto, decode }generateV2(options)面向新协议入参为{ apiName, data }输出结构更精简。以generate为例其内部完成三件关键工作1配置查找与校验按serviceName在svrkit.config.js中定位模块按funcName定位接口找不到即抛出service not found/function not found2proto 校验通过reqProto.verify(data)校验字段类型并借助 JSON descriptors 检查传入的每个 key 是否属于 proto 定义的合法字段非法 key 会抛出xxx doesnt exist in GenerateARModelReq proto, valid keys are ...这一机制保证了云函数侧拼装的参数与后台契约完全一致避免协议漂移导致的隐性错误3构造调用负载将参数用reqProto.encode(data).finish()编码为reqBodyBuffer连同serviceName、funcName、magic、cmdid、existResp一起打包供 SDK 转发return { data: { serviceName, funcName, magic: serviceConfig.magic, cmdid: serviceConfig.functions[funcName].cmdid, existResp: Boolean(resProto), reqBodyBuffer: reqProto.encode(data).finish(), }, reqProto, resProto, decode: buf resProto resProto.decode(buf) }仓库 cloud-functions-tools/test/svrkit-utils/example 目录下保留了生成器的完整测试样例demo.proto、svrkit.config.js、生成的svrkit-utils.js等可作为理解生成产物形态的参考。协议文件详解三维识别与重建的接口契约proto 文件 是 ARDemo 的核心契约定义了 3 个枚举与 7 个消息。枚举定义enARModelStatus模型状态机枚举值数值含义ARModel_Status_Default0默认状态ARModel_Status_Init1初始化中ARModel_Status_Sparse_Finished2稀疏点云重建完成ARModel_Status_3d_Finished33D 模型重建完成ARModel_Status_Object_Finished4目标物体重建完成ARModel_Status_Marker_Finished5Marker 模型重建完成ARModel_Status_Fail100生成失败enARAlgorithmType算法类型枚举值数值含义Algorithm_Type_3D_Object13D 物体识别算法Algorithm_Type_3D_Marker23D Marker 识别算法enARModelType模型类型枚举值数值含义ARModel_Type_Sparse1稀疏点云ARModel_Type_3D23D 模型ARModel_Type_Marker3Marker 模型模型元数据与存储映射ARModel描述一条模型记录其option(mmbizintpkv.KvTableTestID) 916声明了测试环境下的 KV 存储表 ID字段包括cosid原始文件 cosid、bizuin业务号、name原始文件名、upload_time、model_status、algo_type以及嵌套的ModelCos。ModelCos / ModelCosId用于记录模型生成过程中各类型产物的 cosid 映射每个ModelCosId包含model_type、model_cosid与errmsg某类型生成失败时的错误信息整体以model_list数组形式挂在ModelCos下。GenerateARModel提交生成请求GenerateARModelReq的字段及约束字段类型默认值说明bizuinuint32-业务号namestring-模型名称bufferbytes-原始文件数据urlstring-原始文件地址二选一提交algo_typeenARAlgorithmType-算法类型13D Object23D Markerloduint320重建模型精度最高精度为 0取 1/2/3 时精度依次下降getmeshboolfalse是否返回 obj 二进制网格gettextureboolfalse是否返回纹理二进制GenerateARModelResp返回url、host、cosid以及回显的lod、getmesh、gettexture。GetARModel获取重建产物GetARModelReq的字段及约束字段类型默认值说明bizuinuint32-业务号cosidstring-模型 cosidmodel_typeuint32-1稀疏点云23D 模型3Marker 模型need_datauint3210不需要数据1需要数据use_intranetuint320仅在 need_data 为 0 时生效0生成外网链接1内网链接expire_timeuint32-URL 过期时间默认 5 分钟单位秒最长 1800GetARModelResp包含model_data、url、host、errMsg、expire_time与status。其中status取值0生成中1生成成功2过期3生成失败。ARModelData定义了产物的负载结构mesh_model文本点面信息、texture_modelPNG 纹理图像、preview预览图、mesh_blobobj 二进制getmeshtrue时返回、texture_blob纹理二进制gettexturetrue时返回。GetARModelList列表查询已废弃GetARModelListReq / GetARModelListResp提供按bizuin、model_status、algo_type、时间区间与分页参数offset/limit查询模型列表的能力。需要特别注意的是在云函数 index.js 中该接口已被注释并标注「GetARModelList 废弃完全依赖本地缓存」——当前实现不再透传该接口模型列表由小程序端本地缓存维护。svrkit.config.js模块与接口的注册表svrkit.config.js 导出一个配置数组每个元素对应一个后台服务模块module.exports [ { proto: ./proto/mmbizwxaintparDemo.proto, // proto 文件相对路径 serviceName: Mmbizwxaintpar, // 后台 service name magic: 11081, // 模块 magic 数字 functions: { GenerateARModel: { cmdid: 1, req: GenerateARModelReq, res: GenerateARModelResp }, GetARModelList: { cmdid: 3, req: GetARModelListReq, res: GetARModelListResp }, GetARModel: { cmdid: 4, req: GetARModelReq, res: GetARModelResp } } } ]各配置项的职责proto本模块对应的 proto 文件路径生成器据此定位协议serviceName后台服务的标识云函数调用时需与后台部署一致magic模块数字签名用于路由校验functions模块暴露的接口集合每个接口包含cmdid接口号、req/res对应的 protobuf message 名必须在 proto 文件中定义。注意GetARModelList仍保留在配置中cmdid3但云函数入口已不再调用它仅保留定义以便协议层面对齐。云函数入口事件分发与 svrkit 转发cloudfunctions/ARDemo/index.js 是完整的云函数入口其工作流如下const cloud require(wx-server-sdk) const wxgService require(./wx-server-sdk-wxg-service) const svrkitUtils require(./svrkit-utils.js) cloud.registerService(wxgService) cloud.init() exports.main async (event, context) { const wxContext cloud.getWXContext() const bizuin wxContext.APPUIN switch (event.type) { case GenerateARModel: return await cloud.callWXSvrkit({ pbInstance: svrkitUtils.generate({ serviceName: Mmbizwxaintpar, funcName: GenerateARModel, data: { bizuin, name: event.name, url: event.url, algoType: event.algoType, getmesh: event.getMesh, gettexture: event.getTexture }, }), timeout: 30000, }) case GetARModel: return await cloud.callWXSvrkit({ pbInstance: svrkitUtils.generate({ serviceName: Mmbizwxaintpar, funcName: GetARModel, data: { bizuin, cosid: event.cosid, modelType: event.modelType, needData: event.needData, useIntranet: event.useIntranet, expireTime: event.expireTime }, }), timeout: 30000, }) // GetARModelList 废弃完全依赖本地缓存 // case GetARModelList: ... } }几个关键实现细节bizuin 自动注入云函数通过cloud.getWXContext().APPUIN获取当前调用方业务号小程序端无需也不应自行传入避免越权类型分发以event.type区分GenerateARModel与GetARModel两个动作参数直接透传event中的对应字段超时控制两次调用均设置timeout: 30000适配三维重建这种耗时的后台任务wx-server-sdk-wxg-service的桥接作用cloud.registerService(wxgService)注册内部服务插件。从 wx-server-sdk-wxg-service/index.js 打包产物可见callWXSvrkit底层通过/inner/svrkitclientcall接口上报req_body_bufferbase64、service_name、func_name、magic、cmdid等字段并将响应的resp_body_buffer反解为respBody对象返回给云函数调用方最终透传给小程序端。服务更新部署与上传步骤原文档给出的服务更新流程如下1. 安装 ARDemo 下本地 npm 依赖 2. 云函数环境切为 test 环境 3. ARDemo 右键上传所有文件由于有 tencent 的子包结合仓库文件可以补充说明各步骤的具体含义安装依赖在 ARDemo 目录执行依赖安装使wx-server-sdk、tencent/cloud-functions-tools等见 package.json进入本地node_modules保证本地生成的调用代码与运行环境依赖完整切换环境在微信开发者工具中将云函数环境切换为 test 环境对应 proto 中option(mmbizintpkv.KvTableTestID) 916使用的测试 KV 表 ID上传所有文件在开发者工具中对 ARDemo 目录「右键 → 上传并部署云端安装依赖不上传 node_modules」。由于项目包含tencent前缀的内部子包wx-server-sdk-wxg-service、cloud-functions-tools等必须选择上传所有文件确保这些子包连同生成代码一并部署到云端否则运行时require会失败。注意云函数的部署配置如开放接口权限位于 config.json其中permissions.openapi当前为空数组表示该云函数未申请额外的微信开放接口权限——它只通过 svrkit 内部协议访问后台服务不走开放 API。小程序端调用链示例ARDemo 云函数由小程序端 AR 页面通过wx.cloud.callFunction触发。以 arModelComponent.js 为例提交模型生成wx.cloud.callFunction({ name: ARDemo, config: { env: this.data.envId }, data: { type: GenerateARModel, name: this.data.modelName, url, algoType: 2, // Algorithm_Type_3D_Marker getMesh: true, getTexture: true } }).then((resp) { /* 生成成功处理 */ })基于缓存 cosid 获取模型wx.cloud.callFunction({ name: ARDemo, config: { env: this.data.envId }, data: { type: GetARModel, cosid, modelType: 3, // Marker 模型 needData: 0, // 不需要数据走 URL 直链 useIntranet: 0, // 生成外网链接 expireTime: 1200 // 过期时间 1200 秒≤1800 上限 } }).then(resp { const modelStatus resp.result.respBody.status // 0 生成中 / 1 生成成功 / 2 过期 / 3 生成失败 })可以清晰地看到小程序端参数与 proto 字段的映射关系type对应云函数入口的event.type分发algoType、getMesh、getTexture对应GenerateARModelReqcosid、modelType、needData、useIntranet、expireTime对应GetARModelReq。而「列表完全依赖本地缓存」的设计也解释了为何GetARModelList在云函数中被废弃——小程序的modelInfos本地缓存承担了列表查询职责云函数仅保留生成与获取两个热路径接口。总结ARDemo 展示了微信小程序云开发中一种典型的「后台 svrkit 服务接入」范式以 proto 文件为唯一契约源通过tencent/cloud-functions-tools的svrkit-utilsCLI 一键生成静态模块、JSON 描述与调用工具云函数入口只需做事件分发与参数透传即可通过callWXSvrkit完成与后台服务的协议级交互。整套链路中proto 文件、svrkit.config.js、svrkit-utils.js 与 index.js 四者构成闭环任何协议变更只需「改 proto →npm run svrkit→ 上传部署」为三维识别与重建类 AR 能力的小程序集成提供了可复制的工程样板。赞分享示例工程小程序前端【免费下载链接】miniprogram-demo微信小程序组件 / API / 云开发示例项目地址https://gitcode.com/gh_mirrors/mi/miniprogram-demo点击查看免费下载相关推荐微信小程序全栈开发实战基于 agency-agents-zh「微信小程序开发者」智能体的架构设计、微信支付与云开发全链路指南微信小程序全栈开发实战基于 agency agents zh「微信小程序开发者」智能体的架构设计、微信支付与云开发全链路指南 本指南以 agency agen人工智能AI 技能提示工程微信小程序组件/API/云开发示例微前端架构与小程序集成完整指南微信小程序组件/API/云开发示例微前端架构与小程序集成完整指南 微信小程序组件、API和云开发示例为开发者提供了完整的小程序开发解决方案。这个开源项目展示了示例工程小程序前端如何快速构建生活服务小程序微信小程序组件与云开发完整指南如何快速构建生活服务小程序微信小程序组件与云开发完整指南 微信小程序凭借其无需下载安装、即用即走的特性已成为生活服务类应用的理想载体。本指南将带你通过微信官示例工程小程序前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考