服务平台 API
API 均在 wx.serviceMarket
对象下。
invokeService
调用服务提供商提供的 API
入参
接收一个对象,对象下有如下定义的字段:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
service | string | 是 | 服务提供商 ID | |
api | string | 是 | 是 | 服务 API 名 |
data | Object | 否 | 传递给服务 API 的 JSON 数据 |
返回值
返回一个 Promise
,如调用失败,则 reject
一个 Error
对象,如调用成功,则 resolve
结果为如下定义的对象:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
data | Object | 是 | 服务 API 的返回结果 |
示例代码 1: OCR
从手机选择图片后,调用 OCR 服务。OCR 服务要求调用方传图片,接收图片的方式是图片 URL。OCR 服务要求调用方的 data 结构如下:
字段名 | 类型 | 必填 | 默认值 | 说明 |
---|---|---|---|---|
img_url | string | 是 | 图片 URL | |
data_type | number | 是 | 固定为 3,表示 URL 形式的图片 | |
ocr_type | number | 是 | OCR 类型,1 为身份证识别 |
OCR 的接口需要传入图片 URL,如果需要将手机本地选择的图片上传转换成 URL,既可以用任意的存储服务和自建的存储服务,也可以使用云开发的云文件存储服务(有免费配额),以下分别给出对应的示例。
首先假设有自己的存储服务,示例代码如下:
// 选择图片
wx.chooseImage({
count: 1,
success: async function(res) {
try {
// 将选择到的图片上传到自己的存储空间,假设获取得到的链接为 http://aaa.bbb.ccc/xxx.jpg
const invokeRes = await wx.serviceMarket.invokeService({
service: 'wx79ac3de8be320b71',
api: 'ocr',
data: {
img_url: 'http://aaa.bbb.ccc/xxx.jpg',
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', JSON.stringify(err))
wx.showModal({
title: 'fail',
content: JSON.stringify(err),
})
}
},
fail: function(res) {},
complete: function(res) {},
})
接着以使用云开发为例:
首先需要开通云开发,完成后如下方式上传图片然后调用 OCR 服务:
wx.cloud.init({
env: '你的云环境ID',
})
// 选择图片
wx.chooseImage({
count: 1,
success: async function(res) {
try {
const uploadResult = await wx.cloud.uploadFile({
filePath: res.tempFilePaths[0],
cloudPath: `tmp/${Date.now()}`,
})
const { fileList } = await wx.cloud.getTempFileURL({
fileList: [uploadResult.fileID],
})
const invokeRes = await wx.serviceMarket.invokeService({
service: 'wx79ac3de8be320b71',
api: 'ocr',
data: {
img_url: fileList[0].tempFileURL,
data_type: 3,
ocr_type: 1
},
})
await wx.cloud.deleteFile({
fileList: [fileID],
})
console.log('invokeService success', invokeRes)
wx.showModal({
title: 'success',
content: JSON.stringify(invokeRes),
})
} catch (err) {
console.error('invokeService fail', JSON.stringify(err))
wx.showModal({
title: 'fail',
content: JSON.stringify(err),
})
}
},
fail: function(res) {},
complete: function(res) {},
})
示例代码 2: 不需上传的情况
有些服务不需要传递 URL 或大数据,可以直接 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)
},
})