Expand description
组件服务实现。
对应 Java me.chanjar.weixin.open.api.impl.WxOpenComponentServiceImpl:
持有门面服务引用(Java 强引用构造 new WxOpenComponentServiceImpl(this),
Rust 以 Weak<dyn WxOpenService> 打破循环),实现
component_access_token 双检锁刷新、带 token 注入的 get/post、
verify ticket 推送启动、预授权码与预授权链接,以及 Wave 2 补齐的
授权方信息/选项/列表、代码模板、open 帐号、快速创建、minishop、tcb、
oauth2、服务器域名等全部接口方法(Wave 2 待定清单见各方法注释)。
镜像约定:
- Java
getWxOpenService().post(url, json)(裸 post,URL 已带 access_token 或无需 token)→ [Self::bare_post](直调执行器,不做 token 注入);Java 组件层post(url, json)→ [Self::post]。 - minishop 入参 bean 的 Java
toJsonObject()均为手工拼装 snake_case JSON,与 Rust bean 的 serde(camelCase)不一致,故在 [minishop_json] 中以serde_json::json!逐键镜像 Java 线格式。 - Java
WxOpenMinishopService.UPLOAD_IMG_MINISHOP_FILE_URL与接口常量UPLOAD_IMAGE_URL同值,统一为 [urls::upload_image_url]。 - 未实现(待依赖接线)清单:
getWxMpServiceByAppid/getWxMaServiceByAppid/getWxFastMaServiceByAppid/getWxMinishopServiceByAppid(恒 None)与依赖其 post 的createOpenAccount/bindOpenAccount/unbindOpenAccount/getOpenAccount(Err(-99));Java 恒return null的minishopGetCouponList/minishopCommonPost以Ok(None)镜像。
Wave 4 更新(代 mp/ma 桥接接线,对应本文件
WxOpenComponentServiceImpl):
getWxMpServiceByAppid/getWxMaServiceByAppid/getWxFastMaServiceByAppid由恒 None 改为按 appId 双检锁缓存装配 [crate::api::r#impl::WxOpenMpService] / [crate::api::r#impl::WxOpenMaService](镜像 Java 静态 ConcurrentHashMap + synchronized 双检锁;Rust 以实例级Mutex<HashMap>表达),返回值仍为Arc<dyn Any + Send + Sync>, 调用方经downcast_mp_service/downcast_ma_service下转;createOpenAccount/bindOpenAccount/unbindOpenAccount/getOpenAccount解锁:镜像 Java 私有方法openAccountServicePost(switch appIdType:mp → 代 mp 服务 post;mini → 代 ma 服务 post; 其余抛「appIdType类型异常」);getWxMinishopServiceByAppid接线(Wave 5):双检锁缓存装配WxOpenMinishopServiceImpl(此前恒 None)。- Ma*/Minishop 子域服务(Wave 5)见
api/wx_open_ma_*_service.rs/api/impl/wx_open_ma_*_service_impl.rs,由代 ma 桥接WxOpenMaService按 Java 语义装配七个子服务;组件层getWxMaServiceByAppid取回的桥接实例自带全部子服务 getter。
Structs§
- WxOpen
Component Service Impl - 组件服务实现。