跳转至

微信公众号 JSAPI(WeixinServiceController)

微信公众号 JS-SDK 配置与媒体下载接口:获取 JSAPI 配置(签名 / appId / nonceStr / timestamp / signature),以及从微信下载媒体文件到本地存储。基址为 /api/portal/weixin/jsapi

  • 接口类型:REST 资源(@RestController,方法返回 Map<String, Object>,由 Spring Jackson 序列化为 JSON 对象;响应非统一 Resource,统一封装为 { "status": 1/0, "message": "ok"/"error", "data": <数据> },详见「公共说明 · 响应结构」)
  • 基址${myapps.context-path.runtime:}/api/portal/weixin/jsapi
  • Tag:微信

公共说明

  • 鉴权(据源码):基址 /api/portal/weixin/jsapi 不在 RestSecurityHandlerInterceptor 覆盖范围(拦截器仅覆盖 /api/runtime/**/api/rest/bpm/**)。鉴权由全局过滤器 RuntimeSecurityFilter/*)执行登录态校验,未登录返回 401(或 SSO 模式重定向到 /signon)。所有端点均需 accessToken,可通过 Cookie / 请求头 / query 参数任一方式传递。控制器内 getUser() 优先走 AuthTimeServiceManager.getWebUser(request),无登录态时若请求 User-Agent 含 MicroMessenger 则 fallback 到 Cookie WEB_USER_COOKIE_KEY(解密后取 loginNo 反查 UserVO 重建 WebUser)——为微信网页内置登录态续接逻辑。
  • 响应结构(据源码 WeixinServiceController.addActionResult:本控制器所有端点返回 Map<String, Object>,结构为:
    {
      "status": 1,
      "message": "ok",
      "data": <数据>
    }
    
  • status1 成功,0 失败;
  • message:成功 ok,失败 error
  • data:业务数据(ESAPI.encode(data) XSS 编码处理);当业务返回 nulldata 字段缺省。
  • 与统一 Resourceerrcode/errmsg/data/errors)约定不一致,本文档按源码如实记录。
  • 参数读取:通过 getParams()(基于 ParamsTable.convertHTTP(request))统一从 query / form 读取;_pagelines 默认 Web.DEFAULT_LINES_PER_PAGE

1. 获取 JSAPI 配置

_url_appid 与当前用户企业域调用 WeixinServiceProxy.getJsapiConfig,返回微信 JS-SDK 注入所需的配置对象。

  • 接口类型:REST 资源
  • 请求方式@RequestMapping(未限定 method,支持 GET / POST 等所有方法
  • 请求路径/getJsapiConfig.action(完整:{runtime-context}/api/portal/weixin/jsapi/getJsapiConfig.action
  • 鉴权:是(需 accessToken,据源码)
  • Tag:微信

请求参数

参数名 位置 类型 必填 说明
_url query string 当前页面 URL(参与签名)
_appid query string 微信公众号 appId

请求示例

GET /api/portal/weixin/jsapi/getJsapiConfig.action?_url=https%3A%2F%2Fexample.com%2Fpage&_appid=wx1234567890 HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...

响应

结构Map(详见「公共说明 · 响应结构」)。 dataMap<String, String>,微信 JS-SDK 配置(典型含 appId / nonceStr / timestamp / signature / jsApiList)。

{
  "status": 1,
  "message": "ok",
  "data": {
    "appId": "wx1234567890",
    "nonceStr": "abc123",
    "timestamp": "1754000000",
    "signature": "9e7c4f..."
  }
}

2. 上传文件(微信媒体下载)

serverId(微信媒体 id)+ appId + 当前用户企业域,调用 WeixinServiceProxy.downloadMedia 把微信服务器上的媒体文件下载到本地存储路径 /uploads/<folder>/<year>/<uuid>.<fileType>,返回相对存储路径。

  • 接口类型:REST 资源
  • 请求方式@RequestMapping(未限定 method)
  • 请求路径/upload.action(完整:{runtime-context}/api/portal/weixin/jsapi/upload.action
  • 鉴权:是(需 accessToken,据源码)
  • Tag:微信

请求参数

参数名 位置 类型 必填 说明
serverId query string 微信媒体 id
folder query string 保存目录名,默认 photo
fileType query string 保存文件扩展名,默认 jpg
appId query string 微信公众号 appId

请求示例

GET /api/portal/weixin/jsapi/upload.action?serverId=SERVER_MEDIA_ID&appId=wx1234567890&folder=photo&fileType=jpg HTTP/1.1
Cookie: accessToken=eyJhbGciOiJIUzI1NiJ9...

响应

结构Map(详见「公共说明 · 响应结构」)。 datastring,本地存储相对路径(/uploads/<folder>/<year>/<uuid>.<fileType>,经 ESAPI.encode 编码)。

{
  "status": 1,
  "message": "ok",
  "data": "/uploads/photo/2026/550e8400-e29b-41d4-a716-446655440000.jpg"
}

失败示例

{ "status": 0, "message": "error" }