小程序如何訪問未備案的 API | 雲開發

在開發小程序的時候,常常會用到一些第三方的 API。可是第三方的 API 每每會有各類各樣的問題,好比:javascript

  1. 沒有HTTPS
  2. 沒有備案
  3. 小程序不支持其中的一些方法

等等。可是,在業務中,咱們又必需要使用這些接口,應該如何操做呢?java

使用雲開發中轉

一個比較簡單的方法,就是使用雲開發來作中轉。將有限制的小程序請求,轉化爲沒有限制的雲函數請求,就能夠輕鬆實現未備案、無 HTTPS 接口的請求。npm

具體實現方式

在具體的實現時,主要有如下幾個步驟:json

  1. 建立用於中轉的雲函數
  2. 編寫請求代碼
  3. 上傳並部署雲函數
  4. 在小程序端請求雲函數

代碼部分

咱們重點講解一下「請求代碼的建立」和「在小程序請求雲函數」小程序

API 介紹

假設咱們要請求快遞 100 的 API,來查詢快遞信息。因爲其沒有 HTTPS 證書,因此咱們沒有辦法直接在小程序端查詢。因此,咱們創建了一個新的雲函數 getKuaiDi 來查詢快遞信息。bash

咱們要調用的 API 地址是 http://www.kuaidi100.com/query?type=快遞公司代號&postid=快遞單號 ,咱們只須要將這裏的快遞代號和單號替換,併發送一個 get 請求,就能夠獲取到下面這樣的結果。併發

{
    "message": "ok",
    "nu": "11111111111",
    "ischeck": "1",
    "com": "yuantong",
    "status": "200",
    "condition": "F00",
    "state": "3",
    "data": [
        {
            "time": "2020-02-10 08:47:03",
            "context": "查無結果",
            "ftime": "2020-02-10 08:47:03"
        }
    ]
}

請求代碼的建立

接下來來編寫代碼,首先,咱們須要安裝依賴,在雲函數上右擊,選擇「在終端中打開」,執行命令安裝 gotasync

npm install --save got@9

安裝完成後,咱們開始編寫代碼。由於剛剛安裝了 got ,咱們在雲函數中編寫代碼就簡單許多。函數

const got = require('got')

// 雲函數入口函數
exports.main = async (event, context) => {
  const response = await got(`http://www.kuaidi100.com/query?type=${event.type}&postid=${event.id}`)
  return response.body
}

刪除掉無用的代碼後,咱們只須要保留上面這些代碼,就完成了雲函數側的代碼。post

這段代碼中,經過 ES6 的新語法,拼接了 event 的參數,造成一個完成的 API 地址,並經過 got 請求了咱們剛剛拼接好的 API。再將獲取到的 Response 中的 Body 返回給小程序端。

小程序端的調用

上傳部署雲函數之後,咱們能夠在小程序端調用這個 API 以驗證。在你的小程序端輸入這樣的代碼

wx.cloud.callFunction({ name:"getKuaiDi",data:{
  "type": "yuantong",
  "id":"11111111111"
}}).then(console.log).catch(console.error)

你會看到這樣的返回,則說明你的 API 接口正常工做。

{"message":"ok","nu":"11111111111","ischeck":"0","condition":"B00","com":"yuantong","status":"200","state":"1","data":[{"time":"2020-02-11 11:59:11","ftime":"2020-02-11 11:59:11","context":"攬收任務已分配給王國賢,配送員電話17767187183","location":""}]}

後續,你只須要在調用雲函數的時候,經過 data 參數,傳入快遞公司,以及快遞單號,就能夠完成接口的查詢了。

總結

最後,咱們再總結一下。由於小程序限制了 request 的請求必須是備案域名,且必須有 https,若是你想要請求一個沒有備案,或者沒有 HTTPS 證書的 API,能夠藉助雲函數環境下不受任何限制的 HTTP 請求來獲取到數據,並經過雲函數的返回,返回給小程序端使用。這樣,就能夠很方便的繞太小程序請求的一些限制。

相關文章
相關標籤/搜索