全部產品
Search
文件中心

Mobile Platform as a Service:網路

更新時間:Jul 13, 2024

my.request

小程式網路請求。

  • my.request 目前支援 GET/POST/DELETE

  • my.request 目前只支援 HTTPS 協議的請求。

說明
  • 基礎庫 1.11.0 及以上版本支援該介面可以使用 my.canIUse('request') 做相容性處理。詳見 小程式基礎庫說明

  • mPaaS 10.1.60 及以上版本支援該介面。

  • 介面 my.httpRequest 將被廢棄,請使用 my.request 來代替。

  • my.request 的要求標頭預設值為 {'content-type': 'application/json'},而不是 {'content-type': 'application/x-www-form-urlencoded'}。此外,要求標頭對象裡面的 key 和 value 必須是 String 類型。

更多問題請參見 my.request 常見問題

使用說明

  • 需預先在 小程式發布 > 開放平台小程式管理 中開啟 小程式許可權控制開關,並在 伺服器網域名稱白名單 中佈建網域名白名單。小程式在以下 API 呼叫時只能與白名單中的網域名稱進行通訊:HTTP 要求(my.request)、上傳檔案(my.uploadFile)。

  • 添加伺服器網域名稱白名單後,需要重新打包上傳產生體驗版,伺服器網域名稱才會生效。

  • 在 IDE 上進行調試時,請使用真機預覽調試。

入參

名稱

類型

必填

描述

url

String

目標伺服器 url

headers

Object

佈建要求的 HTTP 頭,預設為 {'content-type': 'application/json'},該對象中的 key 和 value 必須是 String 類型。

method

String

預設為 GET,目前支援 GET/POST/DELETE。

data

Object / ArrayBuffer

參考下文 data 參數說明。

timeout

Number

逾時時間,單位為 ms,預設為 30000

dataType

String

期望返回的資料格式,預設為 json,支援 json、text、base64 和 arraybuffer。

success

Function

調用成功的回呼函數

fail

Function

調用失敗的回呼函數

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)

data 參數說明

傳給伺服器的資料最終會是 String 類型,如果資料不是 String 類型,會被轉換成 String 。轉換規則如下:

  • 若方法為GET,會將資料轉換成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...

  • 若方法為 POSTheaders['content-type']application/json ,會對資料進行 JSON 序列化。

  • 若方法為 POSTheaders['content-type']application/x-www-form-urlencoded ,會將資料轉換成 query string: encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...

referer 說明

  • 網路請求的 referer Header 不可設定。

  • 其格式固定為 https://urlhost/{appid}/{version}/page-frame.html,其中 {appid} 為小程式的 APPID,{version} 為小程式的版本號碼。

success 傳回值

名稱

類型

描述

data

String

響應資料,格式取決於請求時的 dataType 參數

status

Number

響應碼

headers

Object

回應標頭

錯誤碼

錯誤碼

描述

解決方案

1

請求沒有結束,就跳轉到了另一個頁面

建議請求完成後再進行頁面跳轉

2

參數錯誤。

  • 可能是連結過長導致,建議參數放在 data 中處理。

  • 建議檢查請求時傳遞的資料是否正常,格式是否正確,可以在請求前列印下入參資料日誌。

11

無權跨域

檢查請求網域名稱是否添加了網域名稱白名單,開發版測試可以點擊 IDE 右上方 > 詳情,勾選 忽略 httpRequest 網域名稱合法性檢查注意:新版本上架,一定要添加 伺服器網域名稱白名單,否則會出現異常。

12

網路出錯

建議檢查網路環境是否正常,伺服器是否穩定。

13

逾時

建議檢查網路環境是否正常,伺服器是否正常響應,若請求需要時間長,可適當設定逾時時間 timeout。

14

解碼失敗

建議檢查前後端請求和響應資料格式是否一致。如返回資料格式 text 與入參 dataType 值 JSON 不一致而導致介面報錯,請修改後台返回資料格式為 JSON。

15

傳參失敗。

小程式頁面傳參如果做 urlencode 需要把整體參數進行編碼。

19

HTTP 錯誤

  • 請確認請求 URL 地址在外網是否能正常請求 HTTPS 協議,小程式真機中均為線上環境的正式請求,不能使用區域網路本地請求。

  • 如遇見 HTTP 404、500、504 等異常錯誤,建議開啟 IDE 調試器 > Network 以查看具體的錯誤資訊,然後根據對應 HTTP 錯誤碼對症處理。

  • SSL 憑證不正確導致,建議更換網站 SSL 憑證。

20

請求已被停止/服務端限流

請確認請求伺服器是否能正常請求和響應。

23

代理請求失敗。

建議檢查代理配置是否正確。

說明

當入參 dataType 值為 json 時,小程式架構會先對返回結果做 JSON.prase 操作,如果解析失敗,則會返回 error 為 14 的錯誤。當入參 dataType 值為 text 時,如果返回的內容格式不符,也會返回 error 為 14 的錯誤。遇到此錯誤時,請先檢查 dataType 的設定是否正確。

my.request 調用返回 無權調用該介面,則需要在 開放平台小程式管理 > 伺服器網域名稱白名單 中佈建網域名白名單。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.request({
  url: 'https://example.org/post',
  method: 'POST',
  data: {
    from: '支付寶',
    production: 'AlipayJSAPI',
  },
  dataType: 'json',
  success: function(res) {
    my.alert({content: 'success'});
  },
  fail: function(res) {
    my.alert({content: 'fail'});
  },
  complete: function(res) {
    my.hideLoading();
    my.alert({content: 'complete'});
  }
});

// 返回RequestTask,可以調用abort方法取消請求
const task = my.request({url: 'https://example.org/post'})
task.abort()

傳回值

RequestTask

網路請求任務對象。

方法

RequestTask.abort()

my.uploadFile

說明

mPaaS 10.1.32 及以上版本支援該介面。

上傳本地資源到開發人員伺服器。

使用說明

  • 需預先在 開放平台小程式管理 > 伺服器網域名稱白名單 中佈建網域名白名單。小程式在以下 API 呼叫時只能與白名單中的網域名稱進行通訊:HTTP 要求(my.request)、上傳檔案(my.uploadFile)。

入參

名稱

類型

必填

描述

url

String

開發人員伺服器位址

filePath

String

要上傳檔案資源的本地定位器

fileName

String

檔案名稱,即對應的 key, 開發人員在伺服器端通過這個 key 可以擷取到檔案二進位內容

fileType

String

檔案類型,image/video/audio

hideLoading

Bool

是否隱藏 loading 圖(預設值為 false)

header

Object

HTTP 要求 Header

formData

Object

HTTP 要求中其他額外的 form 資料

success

Function

調用成功的回呼函數

fail

Function

調用失敗的回呼函數

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)

success 傳回值

名稱

類型

描述

data

String

伺服器返回的資料

statusCode

String

HTTP 狀態代碼

header

Object

伺服器返回的 Header

錯誤碼

error

描述

解決方案

11

檔案不存在

檢查本地檔案是否存在

12

上傳檔案失敗

檢查網路和伺服器

13

沒有許可權

檢查使用權限設定

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.uploadFile({
  url: '請使用自己伺服器位址',
  fileType: 'image',
  fileName: 'file',
  filePath: '...',
  success: (res) => {
    my.alert({
      content: '上傳成功'
    });
  },
});

UploadTask

監聽上傳進度變化,取消上傳任務的對象。

方法

方法

描述

UploadTask.abort()

中斷上傳任務

UploadTask.onProgressUpdate(function callback)

監聽上傳進度變化事件

程式碼範例

const task = my.uploadFile({
  url: '請使用自己伺服器位址',
  fileType: 'image',
  fileName: 'file',
  filePath: '...',
});
task.onProgressUpdate(({progress, totalBytesWritten, totalBytesExpectedToWrite}) => {
})
task.abort()

常見問題

  • Q:小程式上傳圖片可以自動轉成 Base64(基於 64 個可列印字元來表示位元據的方法)嗎?

    A:小程式暫不支援圖片轉成 Base64。

  • Q:my.uploadFile 如何擷取伺服器返回的錯誤資訊?

    A:

    • 可以通過 success 回調中的 data 參數擷取。

    • 可以在服務端增加一個日誌擷取介面。如果上傳失敗,就請求到日誌擷取介面擷取詳細的失敗日誌。

  • Q:my.uploadFile 預設逾時時間是多長?是否可以設定預設延長時間?

    A:my.uploadFile 預設逾時時間是 30s,目前無法設定預設延長時間。

  • Q:使用 my.uploadFile 上傳檔案,為何報錯 error:12

    A:上傳失敗導致報錯 error:12,造成上傳失敗的可能原因有:

    • 檔案過大。

    • 上傳時間超過 30s。

    • 沒有許可權。

  • Q:使用 my.uploadFile 上傳圖片至後台,接收的是二進位圖片,再從後台發送小程式前台對應的二進位圖片,小程式前台是如何解析的?

    A:上傳圖片是後端通過二進位流接受圖片,之後後端只需提供對應的圖片在伺服器上的位置地址即可。

  • Q:調用 my.uploadfile,為何報錯 error: 4,無許可權調用此介面?

    A:請求的 URL 沒有配置白名單,建議添加 URL 的網域名稱為白名單。

  • Q:小程式是否支援上傳 Excel 檔案?

    A:目前 my.uploadFile 上傳檔案類型支援圖片、視頻、音頻( image / video / audio),暫不支援其他類型的檔案。

  • Q:my.uploadFile 是否支援多張圖片同時上傳?

    A:my.uploadFile 暫不支援多張圖片同時上傳,一次只能上傳一張圖片。

my.downloadFile

說明

mPaaS 10.1.32 及以上版本支援該介面。

下載檔案資源到本地。

入參

名稱

類型

必填

描述

url

String

下載檔案地址

header

Object

HTTP 要求 Header

success

Function

調用成功的回呼函數

fail

Function

調用失敗的回呼函數

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)

success 傳回值

名稱

類型

描述

apFilePath

String

檔案臨時存放的位置

錯誤碼

error

描述

解決方案

12

下載失敗

建議檢查網路和伺服器

13

沒有許可權

建議檢查許可權

20

請求的 URL 不支援 HTTP

建議將請求的 URL 改成 HTTPS

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

// API-DEMO page/API/download-file/download-file.json
{
    "defaultTitle": "下載檔案"
}
<!-- API-DEMO page/API/download-file/download-file.axml-->
<view class="container">
  <button onTap="download">下載圖片並顯示</button>
</view>
// API-DEMO page/API/download-file/download-file.js
Page({
  download() {
    my.downloadFile({
      url: 'https://img.alicdn.com/tfs/TB1x669SXXXXXbdaFXXXXXXXXXX-520-280.jpg',
      success({ apFilePath }) {
        my.previewImage({
          urls: [apFilePath],
        });
      },
      fail(res) {
        my.alert({
          content: res.errorMessage || res.error,
        });
      },
    });
  },
})

my.connectSocket

說明

mPaaS 10.1.60 及以上版本支援該介面。

建立一個 WebSocket 的串連。

一個小程式同時只能保留一個 WebSocket 串連,如果當前已存在 WebSocket 串連,會自動關閉該串連,並重新建立一個新的 WebSocket 串連。

入參

名稱

類型

必填

描述

url

String

目標伺服器 URL。注意:部分新發布的小程式只支援 wss 協議。

data

Object

請求的參數

header

Object

佈建要求的頭部

success

Function

調用成功的回呼函數

fail

Function

調用失敗的回呼函數

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)

錯誤碼

error

描述

解決方案

1

未知錯誤

-

2

網路連接已經存在

一個小程式在一段時間內只能保留一個 WebSocket 串連。如果當前已存在 WebSocket 串連,那麼會自動關閉該串連,並重新建立一個新的 WebSocket 串連。

3

URL 參數為空白

替換 URL 連結。

4

無法識別的 URL 格式

替換 URL 連結。

5

URL 必須以 ws 或者 wss 開頭

替換 URL 連結。

6

串連伺服器逾時

稍後重試。

7

伺服器返回的 HTTPS 認證無效

小程式必須使用 HTTPS/WSS 發起網路請求。請求時系統會對伺服器網域名稱使用的 HTTPS 認證進行校正,如果校正失敗,則請求不能成功發起。由於系統限制,不同平台對於認證要求的嚴格程度不同。為了保證小程式的相容性,建議開發人員按照最高標準進行認證配置,並使用相關工具檢查現有認證,確保其符合要求。

8

服務端返回協議頭無效

從 2019 年 5 月開始新建立的小程式,預設強制使用 HTTPS 和 WSS 協議,不再支援 HTTP 和 WS 協議。

9

WebSocket 請求沒有指定 Sec-WebSocket-Protocol 要求標頭

請指定 Sec-WebSocket-Protocol 要求標頭。

10

網路連接沒有開啟,無法發送訊息

請正常串連伺服器後再調用 my.sendSocketMessage 發送資料訊息,可通過 my.onSocketOpen 監聽事件來判斷與伺服器建立正確串連。注意:通過 WebSocket 串連發送資料,需要先使用 my.connectSocket 發起串連,在 my.onSocketOpen 回調之後再調用 my.sendSocketMessage 發送資料。

11

訊息發送失敗

稍後重試。

12

無法申請更多記憶體來讀取網路資料

請檢查記憶體。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.connectSocket({
  url: 'test.php',
  data: {},
  header:{
    'content-type': 'application/json'
  },
});

my.onSocketOpen

說明

mPaaS 10.1.60 及以上版本支援該介面。

監聽 WebSocket 串連開啟事件。

入參

Object 類型,屬性如下:

屬性

類型

必填

說明

callback

Function

WebSocket 串連開啟事件的回呼函數。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.connectSocket({
  url: 'test.php',
});

my.onSocketOpen(function(res) {
  console.log('WebSocket 串連已開啟!');
});

my.offSocketOpen

說明

mPaaS 10.1.60 及以上版本支援該介面。

取消監聽 WebSocket 串連開啟事件。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

Page({
  onLoad() {
    this.callback = this.callback.bind(this);
    my.onSocketOpen(this.callback);
  },
  onUnload() {
    my.offSocketOpen(this.callback);
  },
  callback(res) {
  },
})

是否需要傳 callback 值

  • 不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:

    my.offSocketOpen();
  • 傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:

    my.offSocketOpen(this.callback);

my.onSocketError

說明

mPaaS 10.1.60 及以上版本支援該介面。

監聽 WebSocket 錯誤。

入參

Object 類型,屬性如下:

參數

類型

必填

說明

callback

Function

WebSocket 錯誤事件的回呼函數。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.connectSocket({
  url: '開發人員的伺服器位址'
});

my.onSocketOpen(function(res){
  console.log('WebSocket 串連已開啟!');
});

my.onSocketError(function(res){
  console.log('WebSocket 串連開啟失敗,請檢查!');
});

my.offSocketError

說明

mPaaS 10.1.60 及以上版本支援該介面。

取消監聽 WebSocket 錯誤。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

Page({
  onLoad() {
    this.callback = this.callback.bind(this);
    my.onSocketError(this.callback);
  },
  onUnload() {
    my.offSocketError(this.callback);
  },
  callback(res) {
  },
})

是否需要傳 callback 值

  • 不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:

    my.offSocketError();
  • 傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:

    my.offSocketError(this.callback);

my.sendSocketMessage

說明

mPaaS 10.1.60 及以上版本支援該介面。

通過 WebSocket 串連發送資料,需要先使用 my.connectSocket 發起建連,並在 my.onSocketOpen 回調之後再發送資料。

入參

名稱

類型

必填

描述

data

String

需要發送的內容:普通的常值內容 String 或者經 base64 編碼後的 String。

isBuffer

Boolean

如果需要發送位元據,需要將入參資料經 base64 編碼成 String 後,賦值 data,同時將此欄位設定為 true,否則,若為普通的常值內容 String,則不需要設定此欄位。

success

Function

回呼函數。

fail

Function

調用失敗的回呼函數。

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.sendSocketMessage({
    data: this.data.toSendMessage, // 需要發送的內容
    success: (res) => {
        my.alert({content: '資料發送!' + this.data.toSendMessage});
    },
});

my.onSocketMessage

說明

mPaaS 10.1.60 及以上版本支援該介面。

監聽 WebSocket 接受到伺服器的訊息事件。

回調傳回值

名稱

類型

描述

data

String/ArrayBuffer

伺服器返回的訊息:普通的文本 String 或者經 base64 編碼後的 String。

isBuffer

Boolean

如果此欄位值為 truedata 欄位表示接收到的經過了 base64 編碼後的 String,否則,data 欄位表示接收到的普通 String 文本。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.connectSocket({
  url: '伺服器位址'
})

my.onSocketMessage(function(res) {
  console.log('收到伺服器內容:' + res.data)
})

my.offSocketMessage

說明

mPaaS 10.1.60 及以上版本支援該介面。

取消監聽 WebSocket 接受到伺服器的訊息事件。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.connectSocket({
  url: '伺服器位址'
})
my.onSocketMessage(function(res) {
  console.log('收到伺服器內容:' + res.data)
})
my.offSocketMessage();

是否需要傳 callback 值

  • 不傳遞 callback 值,則會移除監聽所有的事件回調。程式碼範例如下:

    my.offSocketMessage();
  • 傳遞 callback 值,只移除對應的 callback 事件。程式碼範例如下:

    my.offSocketMessage(this.callback);

my.closeSocket

說明

mPaaS 10.1.60 及以上版本支援該介面。

關閉 WebSocket 串連。

入參

名稱

類型

必填

描述

success

Function

回呼函數

fail

Function

調用失敗的回呼函數

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.onSocketOpen(function() {
  my.closeSocket()
})

my.onSocketClose(function(res) {
  console.log('WebSocket 已關閉!')
})

my.onSocketClose

說明

mPaaS 10.1.60 及以上版本支援該介面。

監聽 WebSocket 關閉。

入參

Object 類型,屬性如下:

參數

類型

必填

描述

callback

Function

WebSocket 串連關閉事件的回呼函數。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

onLoad() {
    // 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
    my.onSocketClose((res) => {
      my.alert({content: '串連已關閉!'});
      this.setData({
        sendMessageAbility: false,
        closeLinkAbility: false,
      });
    });
    // 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
    my.onSocketOpen((res) => {
      my.alert({content: '串連已開啟!'});
      this.setData({
        sendMessageAbility: true,
        closeLinkAbility: true,
      });
    });

    my.onSocketError(function(res){
      my.alert('WebSocket 串連開啟失敗,請檢查!' + res);
    });

    // 注意: 回調方法的註冊在整個小程式啟動階段只要做一次,調多次會有多次回調
    my.onSocketMessage((res) => {
      my.alert({content: '收到資料!' + JSON.stringify(res)});
    });
  }

connect_start() {
    my.connectSocket({
      url: '伺服器位址', // 開發人員伺服器介面地址,必須是 wss 協議,且網域名稱必須是後台配置的合法網域名稱
      success: (res) => {
        my.showToast({
          content: 'success', // 文字內容
        });
      },
      fail:()=>{
        my.showToast({
          content: 'fail', // 文字內容
        });
      }
    });
  },

my.offSocketClose

說明

mPaaS 10.1.60 及以上版本支援該介面。

取消監聽 WebSocket 關閉。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

Page({
  onLoad() {
  my.onSocketClose(this.callback);
  },
  onUnload() {
    my.offSocketClose(this.callback);
    //    my.offSocketClose();
  },
  callback(res) {
  my.alert({content: '串連已關閉!'});
      this.setData({
        sendMessageAbility: false,
        closeLinkAbility: false,
      });
  },
})

是否需要傳 callback 值

  • 不傳遞 callback 值,則會移除監聽所有的事件回調。範例程式碼如下:

    my.offSocketClose();
  • 傳遞 callback 值,只移除對應的 callback 事件。範例程式碼如下:

    my.offSocketClose(this.callback);

my.rpc(Object)

小程式架構專用 rpc 介面,小程式網關介面。

參數說明

名稱

類型

必填

描述

operationType

String

網關 operationtype。

requestData

Array

網關請求資料。

success

Function

調用成功的回呼函數。

fail

Function

調用失敗的回呼函數。

complete

Function

調用結束的回呼函數(調用成功、失敗都會執行)。

程式碼範例

案例僅供參考,建議使用您自己的地址進行測試。

my.rpc({
      operationType: 'com.xx.xx',
      requestData: [{
        "param1":"",
        "param2":0
      }],
      success: res => {
      },
      fail: res => {
      }
});