codecamp

微信小程序 服务平台·API

服务平台 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 方法的示例:

// 选择图片
wx.chooseImage({
  count: 1,
  success: async function(res) {
    try {
      const invokeRes = await wx.serviceMarket.invokeService({
        service: 'wx79ac3de8be320b71',
        api: 'OcrAllInOne',
        data: {
          // 用 CDN 方法标记要上传并转换成 HTTP URL 的文件
          img_url: new wx.serviceMarket.CDN({
            type: 'filePath',
            filePath: res.tempFilePaths[0],
          }),
          data_type: 3,
          ocr_type: 1
        },
      })

      console.log('invokeService success', invokeRes)
      wx.showModal({
        title: 'success',
        content: JSON.stringify(invokeRes),
      })
    } catch (err) {
      console.error('invokeService fail', err)
      wx.showModal({
        title: 'fail',
        content: err,
      })
    }
  },
  fail: function(res) {},
  complete: function(res) {},
})

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

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

// 选择图片
wx.chooseImage({
  count: 1,
  success: function(res) {
    // 调用 OCR 服务
    wx.serviceMarket.invokeService({
      service: 'some_service_id',
      api: 'test',
      data: {
        type: 'x',
        name: 'y',
      },
    }).then(res => {
      console.log('invokeService success', res)
    }).catch(err => {
      console.error('invokeService fail', err)
    })
  },
  fail: function(err) {
    console.error(err)
  },
})

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 基础库。


微信小程序 服务平台·能力介绍
多端开发kbone
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

微信小程序 指南

目录结构

开放能力

微信小程序 调试

微信小程序 实时日志

微信小程序 小程序测速

微信小程序 基础组件

微信小程序 API

媒体

界面

微信小程序API 绘图

微信小程序 服务端

接口调用凭证

统一服务消息

微信小程序 服务市场

微信小程序 生物认证

微信小程序 云开发

服务端

微信小程序云开发服务端API 数据库

SDK文档

微信小程序 扩展能力

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }