• 服务平台 API
    • invokeService

    服务平台 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. })