2.9.4
API 均在 wx.serviceMarket 对象下。invokeService 方法可以通过兼容性配置,无需依赖 2.9.4 即可使用,配置方法见底部 兼容性配置 章节说明。
从 2.11.1 开始,插件内也可以使用 wx.serviceMarket API,在调用时,消耗的是宿主的资源而不是插件方的资源。
调用服务提供商提供的 API
入参
接收一个对象,对象下有如下定义的字段:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
service | string | 是 | 服务提供商 ID | |
api | string | 是 | 是 | 服务 API 名 |
data | Object | 否 | 传递给服务 API 的 JSON 数据 |
返回值
返回一个 Promise,如调用失败,则 reject 一个 Error 对象,如调用成功,则 resolve 结果为如下定义的对象:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
data | Object | String | 是 |
在 data 中,如果服务提供商要求其中某个字段为文件 URL、并且此时希望将本地文件/大数据上传成 URL 作为字段值传入,则可以使用我们提供的 CDN 方法对相应值进行标记,微信会自动在调用服务 API 的时候将其转换成 CDN URL 给到服务提供方。
错误码
错误码 | 含义 |
---|---|
-1 | 入参错误 |
-2 | 调用失败 |
-3 | 逻辑失败 |
-6 | appid错误 |
-7 | api信息错误 |
-8 | api信息错误 |
-10 | api扣费失败 |
-11 | 命中频率 |
示例代码 1: OCR
从手机选择图片后,调用 OCR 服务。OCR 服务要求调用方传图片,接收图片的方式是图片 URL。OCR 服务要求调用方的 data 结构如下:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
img_url | string | 是 | 图片 URL | |
data_type | number | 是 | 固定为 3,表示 URL 形式的图片 | |
ocr_type | number | 是 | OCR 类型,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 的文件/大字符串然后转换成 HTTP URL 的数据,必须在 invokeService 中使用。
CDN 方法可以接收三种参数类型:
当使用文件路径定义对象时,将在调用服务 API 时自动将相应文件路径对应的文件内容上传至 CDN 并转换成 CDN URL,对象定义如下:
字段名 类型 必填 默认值 说明 type String 是 定义对象的类型,必填 filePath filePath String 是 文件路径
入参
接收一个对象,对象下有如下定义的字段:
字段名 | 类型 | 必填 | 说明 |
---|---|---|---|
type | string | 是 | 定义对象的类型,必填 filePath |
filePath | string | 是 | 文件路径 |
可以通过兼容性配置让 wx.serviceMarket.invokeService API 的使用不受基础库版本约束,配置方式是:在 app.json / game.json 中指定顶层字段 "servicemarket": true,在预览发布时小程序代码包会自动包含此 API 的兼容代码,在 2.9.4 以下也可使用。仅在手机上使用,工具中调试请选择 2.9.4 基础库。
本指南将概述可用于创建文档的不同设计元素。#警告VuePress 提供了一个自定义容器插件来创建警稿框。有四种类型:Info:提供中立...
#data类型:Function详细:返回组件实例的 data 对象的函数。在 data 中,我们不建议观察具有自身状态行为的对象,如浏览器 API ...
无论如何,不要跳过这一节。阅读这一章将提高你的技能,减轻你网页的重量,让你更清楚地了解标记和设计之间的区别。本章中的概念...
AJAX 教程 AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 教程涵盖了适用于初学者和专业人士的...