服务平台 API

2.9.4

API 均在 wx.serviceMarket 对象下。invokeService 方法可以通过兼容性配置,无需依赖 2.9.4 即可使用,配置方法见底部 兼容性配置 章节说明。

2.11.1 开始,插件内也可以使用 wx.serviceMarket API,在调用时,消耗的是宿主的资源而不是插件方的资源。

invokeService

调用服务提供商提供的 API

入参

接收一个对象,对象下有如下定义的字段:

字段名类型必填默认值说明
servicestring服务提供商 ID
apistring服务 API 名
dataObject传递给服务 API 的 JSON 数据

返回值

返回一个 Promise,如调用失败,则 reject 一个 Error 对象,如调用成功,则 resolve 结果为如下定义的对象:

字段名类型必填默认值说明
dataObjectString

data 中,如果服务提供商要求其中某个字段为文件 URL、并且此时希望将本地文件/大数据上传成 URL 作为字段值传入,则可以使用我们提供的 CDN 方法对相应值进行标记,微信会自动在调用服务 API 的时候将其转换成 CDN URL 给到服务提供方。

错误码

错误码含义
-1入参错误
-2调用失败
-3逻辑失败
-6appid错误
-7api信息错误
-8api信息错误
-10api扣费失败
-11命中频率

示例代码 1: OCR

从手机选择图片后,调用 OCR 服务。OCR 服务要求调用方传图片,接收图片的方式是图片 URL。OCR 服务要求调用方的 data 结构如下:

字段名类型必填默认值说明
img_urlstring图片 URL
data_typenumber固定为 3,表示 URL 形式的图片
ocr_typenumberOCR 类型,1 为身份证识别

OCR 的接口需要传入图片 URL,如果需要将手机本地选择的图片上传转换成 URL,可以使用 CDN 方法对文件路径进行标记(或用任意的存储服务和自建的存储服务,也可以使用云开发的云文件存储服务,但都没有 CDN 方法便捷),以下给出使用 CDN 方法的示例:

  1. // 选择图片
  2. wx.chooseImage({
  3. count: 1,
  4. success: async function(res) {
  5. try {
  6. const invokeRes = await wx.serviceMarket.invokeService({
  7. service: 'wx79ac3de8be320b71',
  8. api: 'OcrAllInOne',
  9. data: {
  10. // 用 CDN 方法标记要上传并转换成 HTTP URL 的文件
  11. img_url: new wx.serviceMarket.CDN({
  12. type: 'filePath',
  13. filePath: res.tempFilePaths[0],
  14. }),
  15. data_type: 3,
  16. ocr_type: 1
  17. },
  18. })
  19. console.log('invokeService success', invokeRes)
  20. wx.showModal({
  21. title: 'success',
  22. content: JSON.stringify(invokeRes),
  23. })
  24. } catch (err) {
  25. console.error('invokeService fail', err)
  26. wx.showModal({
  27. title: 'fail',
  28. content: err,
  29. })
  30. }
  31. },
  32. fail: function(res) {},
  33. complete: function(res) {},
  34. })

示例代码 2: 普通 JSON 协议接口

有些服务不需要用到 CDN 辅助接口,可以直接 JSON 调用,以下任意举例:

  1. // 选择图片
  2. wx.chooseImage({
  3. count: 1,
  4. success: function(res) {
  5. // 调用 OCR 服务
  6. wx.serviceMarket.invokeService({
  7. service: 'some_service_id',
  8. api: 'test',
  9. data: {
  10. type: 'x',
  11. name: 'y',
  12. },
  13. }).then(res => {
  14. console.log('invokeService success', res)
  15. }).catch(err => {
  16. console.error('invokeService fail', err)
  17. })
  18. },
  19. fail: function(err) {
  20. console.error(err)
  21. },
  22. })

CDN

标记需要上传到 CDN 的文件/大字符串然后转换成 HTTP URL 的数据,必须在 invokeService 中使用。

CDN 方法可以接收三种参数类型:

  • String
  • ArrayBuffer
  • 文件路径定义对象

当使用文件路径定义对象时,将在调用服务 API 时自动将相应文件路径对应的文件内容上传至 CDN 并转换成 CDN URL,对象定义如下:

字段名 类型 必填 默认值 说明 type String 是 定义对象的类型,必填 filePath filePath String 是 文件路径

入参

接收一个对象,对象下有如下定义的字段:

字段名类型必填说明
typestring定义对象的类型,必填 filePath
filePathstring文件路径

兼容性配置

可以通过兼容性配置让 wx.serviceMarket.invokeService API 的使用不受基础库版本约束,配置方式是:在 app.json / game.json 中指定顶层字段 "servicemarket": true,在预览发布时小程序代码包会自动包含此 API 的兼容代码,在 2.9.4 以下也可使用。仅在手机上使用,工具中调试请选择 2.9.4 基础库。