微信小程序 服務(wù)平臺(tái)·API

2022-05-12 17:53 更新

服務(wù)平臺(tái) API

2.9.4

API 均在 wx.serviceMarket 對(duì)象下。invokeService 方法可以通過(guò)兼容性配置,無(wú)需依賴 2.9.4 即可使用,配置方法見(jiàn)底部 兼容性配置 章節(jié)說(shuō)明。

從 2.11.1 開(kāi)始,插件內(nèi)也可以使用 wx.serviceMarket API,在調(diào)用時(shí),消耗的是宿主的資源而不是插件方的資源。

invokeService

調(diào)用服務(wù)提供商提供的 API

入?yún)?/p>

接收一個(gè)對(duì)象,對(duì)象下有如下定義的字段:

字段名類(lèi)型必填默認(rèn)值說(shuō)明
servicestring服務(wù)提供商 ID
apistring服務(wù) API 名
dataObject傳遞給服務(wù) API 的 JSON 數(shù)據(jù)

返回值

返回一個(gè) Promise,如調(diào)用失敗,則 reject 一個(gè) Error 對(duì)象,如調(diào)用成功,則 resolve 結(jié)果為如下定義的對(duì)象:

字段名類(lèi)型必填默認(rèn)值說(shuō)明
dataObjectString

在 data 中,如果服務(wù)提供商要求其中某個(gè)字段為文件 URL、并且此時(shí)希望將本地文件/大數(shù)據(jù)上傳成 URL 作為字段值傳入,則可以使用我們提供的 CDN 方法對(duì)相應(yīng)值進(jìn)行標(biāo)記,微信會(huì)自動(dòng)在調(diào)用服務(wù) API 的時(shí)候?qū)⑵滢D(zhuǎn)換成 CDN URL 給到服務(wù)提供方。

錯(cuò)誤碼

錯(cuò)誤碼含義
-1入?yún)㈠e(cuò)誤
-2調(diào)用失敗
-3邏輯失敗
-6appid錯(cuò)誤
-7api信息錯(cuò)誤
-8api信息錯(cuò)誤
-10api扣費(fèi)失敗
-11命中頻率

示例代碼 1: OCR

從手機(jī)選擇圖片后,調(diào)用 OCR 服務(wù)。OCR 服務(wù)要求調(diào)用方傳圖片,接收?qǐng)D片的方式是圖片 URL。OCR 服務(wù)要求調(diào)用方的 data 結(jié)構(gòu)如下:

字段名類(lèi)型必填默認(rèn)值說(shuō)明
img_urlstring圖片 URL
data_typenumber固定為 3,表示 URL 形式的圖片
ocr_typenumberOCR 類(lèi)型,1 為身份證識(shí)別

OCR 的接口需要傳入圖片 URL,如果需要將手機(jī)本地選擇的圖片上傳轉(zhuǎn)換成 URL,可以使用 CDN 方法對(duì)文件路徑進(jìn)行標(biāo)記(或用任意的存儲(chǔ)服務(wù)和自建的存儲(chǔ)服務(wù),也可以使用云開(kāi)發(fā)的云文件存儲(chǔ)服務(wù),但都沒(méi)有 CDN 方法便捷),以下給出使用 CDN 方法的示例:

// 選擇圖片
wx.chooseImage({
  count: 1,
  success: async function(res) {
    try {
      const invokeRes = await wx.serviceMarket.invokeService({
        service: 'wx79ac3de8be320b71',
        api: 'OcrAllInOne',
        data: {
          // 用 CDN 方法標(biāo)記要上傳并轉(zhuǎn)換成 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 協(xié)議接口

有些服務(wù)不需要用到 CDN 輔助接口,可以直接 JSON 調(diào)用,以下任意舉例:

// 選擇圖片
wx.chooseImage({
  count: 1,
  success: function(res) {
    // 調(diào)用 OCR 服務(wù)
    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

標(biāo)記需要上傳到 CDN 的文件/大字符串然后轉(zhuǎn)換成 HTTP URL 的數(shù)據(jù),必須在 invokeService 中使用。

CDN 方法可以接收三種參數(shù)類(lèi)型:

  • String
  • ArrayBuffer
  • 文件路徑定義對(duì)象

當(dāng)使用文件路徑定義對(duì)象時(shí),將在調(diào)用服務(wù) API 時(shí)自動(dòng)將相應(yīng)文件路徑對(duì)應(yīng)的文件內(nèi)容上傳至 CDN 并轉(zhuǎn)換成 CDN URL,對(duì)象定義如下:

字段名 類(lèi)型 必填 默認(rèn)值 說(shuō)明 type String 是 定義對(duì)象的類(lèi)型,必填 filePath filePath String 是 文件路徑

入?yún)?/p>

接收一個(gè)對(duì)象,對(duì)象下有如下定義的字段:

字段名類(lèi)型必填說(shuō)明
typestring定義對(duì)象的類(lèi)型,必填 filePath
filePathstring文件路徑

兼容性配置

可以通過(guò)兼容性配置讓 wx.serviceMarket.invokeService API 的使用不受基礎(chǔ)庫(kù)版本約束,配置方式是:在 app.json / game.json 中指定頂層字段 "servicemarket": true,在預(yù)覽發(fā)布時(shí)小程序代碼包會(huì)自動(dòng)包含此 API 的兼容代碼,在 2.9.4 以下也可使用。僅在手機(jī)上使用,工具中調(diào)試請(qǐng)選擇 2.9.4 基礎(chǔ)庫(kù)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)