服务平台 API

API 均在 wx.serviceMarket 对象下。

invokeService

调用服务提供商提供的 API

入参

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

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

返回值

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

字段名类型必填默认值说明
dataObject服务 API 的返回结果

示例代码 1: OCR

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

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

OCR 的接口需要传入图片 URL,如果需要将手机本地选择的图片上传转换成 URL,既可以用任意的存储服务和自建的存储服务,也可以使用云开发的云文件存储服务(有免费配额),以下分别给出对应的示例。

首先假设有自己的存储服务,示例代码如下:

  1. // 选择图片
  2. wx.chooseImage({
  3. count: 1,
  4. success: async function(res) {
  5. try {
  6. // 将选择到的图片上传到自己的存储空间,假设获取得到的链接为 http://aaa.bbb.ccc/xxx.jpg
  7. const invokeRes = await wx.serviceMarket.invokeService({
  8. service: 'wx79ac3de8be320b71',
  9. api: 'ocr',
  10. data: {
  11. img_url: 'http://aaa.bbb.ccc/xxx.jpg',
  12. data_type: 3,
  13. ocr_type: 1
  14. },
  15. })
  16. console.log('invokeService success', invokeRes)
  17. wx.showModal({
  18. title: 'success',
  19. content: JSON.stringify(invokeRes),
  20. })
  21. } catch (err) {
  22. console.error('invokeService fail', JSON.stringify(err))
  23. wx.showModal({
  24. title: 'fail',
  25. content: JSON.stringify(err),
  26. })
  27. }
  28. },
  29. fail: function(res) {},
  30. complete: function(res) {},
  31. })

接着以使用云开发为例:

首先需要开通云开发,完成后如下方式上传图片然后调用 OCR 服务:

  1. wx.cloud.init({
  2. env: '你的云环境ID',
  3. })
  4. // 选择图片
  5. wx.chooseImage({
  6. count: 1,
  7. success: async function(res) {
  8. try {
  9. const uploadResult = await wx.cloud.uploadFile({
  10. filePath: res.tempFilePaths[0],
  11. cloudPath: `tmp/${Date.now()}`,
  12. })
  13. const { fileList } = await wx.cloud.getTempFileURL({
  14. fileList: [uploadResult.fileID],
  15. })
  16. const invokeRes = await wx.serviceMarket.invokeService({
  17. service: 'wx79ac3de8be320b71',
  18. api: 'ocr',
  19. data: {
  20. img_url: fileList[0].tempFileURL,
  21. data_type: 3,
  22. ocr_type: 1
  23. },
  24. })
  25. await wx.cloud.deleteFile({
  26. fileList: [fileID],
  27. })
  28. console.log('invokeService success', invokeRes)
  29. wx.showModal({
  30. title: 'success',
  31. content: JSON.stringify(invokeRes),
  32. })
  33. } catch (err) {
  34. console.error('invokeService fail', JSON.stringify(err))
  35. wx.showModal({
  36. title: 'fail',
  37. content: JSON.stringify(err),
  38. })
  39. }
  40. },
  41. fail: function(res) {},
  42. complete: function(res) {},
  43. })

示例代码 2: 不需上传的情况

有些服务不需要传递 URL 或大数据,可以直接 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. })