全部產品
Search
文件中心

Mobile Platform as a Service:RPC 調用

更新時間:Jul 13, 2024

本文介紹的是 RPC 介面的使用方法。

說明

由於 JS 傳入的 JSON 資料無法包含資料類型,在 Native 層轉為字典時可能會由於資料類型問題導致誤差,如果是數字類型的精確值,盡量使用字串來進行傳遞。例如:{"value":9.45} 會被 native 轉為 {"value":9.449999999999999} 然後上發到服務端。應該改為使用 {"value":"9.45"} 來傳遞。

RPC 介面的使用方法

AlipayJSBridge.call('rpc', {
  operationType: 'alipay.client.xxxx',
  requestData: [],
  headers: {}
}, function(result) {
  console.log(result);
});

程式碼範例

<h1>點擊按鈕發起 RPC 請求</h1>

<a href="javascript:void(0)" class="btn rpc">發起請求</a><br/>
<a href="javascript:void(0)" class="btn rpcHeader">發起有回應標頭返回的請求</a>

<script>
function ready(callback) {
  // 如果 jsbridge 已經注入則直接調用
  if (window.AlipayJSBridge) {
    callback && callback();
  } else {
    // 如果沒有注入則監聽注入的事件
    document.addEventListener('AlipayJSBridgeReady', callback, false);
  }
}
ready(function() {
  document.querySelector('.rpc').addEventListener('click', function() {
    AlipayJSBridge.call('rpc', {
      operationType: 'alipay.client.xxxx',
      requestData: [],
      headers: {}
    }, function(result) {
      alert(JSON.stringify(result));
    });
  });

  document.querySelector('.rpcHeader').addEventListener('click', function() {
    AlipayJSBridge.call('rpc', {
      operationType: 'alipay.client.xxxx',
      requestData: [],
      headers: {},
      getResponse: true
    }, function(result) {
      alert(JSON.stringify(result));
    });
  });
});
</script>

API 說明

AlipayJSBridge.call('rpc', {
  operationType:,
  requestData:,
  headers
}, fn);

入參

屬性

類型

描述

必填

預設值

operationType

string

RPC 服務名稱。

Y

-

requestData

array

RPC 請求的參數。需要開發人員根據具體 RPC 介面進行構造。

N

-

headers

object

RPC 請求設定的 headers。

N

{}

gateway

string

網關地址。

N

alipay 網關

compress

boolean

是否支援 request gzip 壓縮。

N

true

disableLimitView

boolean

RPC 網關被限流時是否禁止自動彈出統一限流彈窗。

N

false

timeout

int

RPC 逾時時間,單位為秒。

架構統一設定,策略較複雜。

  • iOS 端 Wi-Fi 環境 20s,其它環境 30s。

  • Android 端 Wi-Fi/4G 環境 12s 到 42s 之間。其它環境 32s 到 60s 之間

N

-

getResponse

boolean

擷取 RPC 回應標頭。

重要

設定為 true 時,響應資料會多一層嵌套,可用於資料迴流上報擷取 traceId、entityId。

N

false

fn

function

回呼函數。

N

-

出參

回呼函數帶入的參數 result: {error }

屬性

類型

描述

error

string

錯誤碼

錯誤碼

錯誤碼

描述

10

網路錯誤。

11

請求逾時。

其他

由 mobilegw 網關定義。

RPC 原生錯誤碼

錯誤碼

描述

1000

成功。

0

未知錯誤。

1

用戶端找不到通訊對象。

2

用戶端沒有網路(JSAPI 做了轉換,返回 10)。

3

用戶端認證錯誤。

4

用戶端網路連接逾時。

5

用戶端網路速度過慢。

6

用戶端請求服務端未返回。

7

用戶端網路 IO 錯誤。

8

用戶端網路請求調度錯誤。

9

用戶端處理錯誤。

10

用戶端資料還原序列化錯誤,服務端資料格式有誤。

11

用戶端登入失敗。

12

用戶端登入帳號切換。

13

請求中斷錯誤,例如線程中斷時網路請求會被中斷。

14

用戶端網路緩衝錯誤。

15

用戶端網路授權錯誤。

16

DNS 解析錯誤。

17

operationType 不在白名單。

1001

拒絕訪問。

1002

調用次數超過限制:“系統繁忙,請稍後再試。”

2000

登入逾時,請重新登入。

3000

缺少操作類型或者此操作類型不支援。

3001

請求資料為空白:系統繁忙,請稍後再試。

3002

資料格式有誤。

4001

服務要求逾時,請稍後再試。

4002

遠程調用業務系統異常:網路繁忙,請稍後再試。

4003

建立遠程調用代理失敗:網路繁忙,請稍後再試。

5000

未知錯誤:“抱歉,暫時無法操作,請稍後再試。”

6000

RPC-服務找不到。

6001

RPC-目標方法找不到。

6002

RPC-參數數目不正確。

6003

RPC-目標方法不可訪問。

6004

RPC-JSON 解析異常。

6005

RPC-調用目標方法時參數不合法。

6666

RPC-業務異常。

7000

沒有設定公開金鑰。

7001

驗簽的參數不夠。

7002

驗簽失敗。

7003

驗簽時間戳記校正失敗。

7004

驗簽 RPC 介面 operationType 參數為空白。

7005

productId 參數為空白。

7006

驗簽介面 did 參數為空白。

7007

驗簽介面請求發送時間參數 t 為空白。

7008

驗簽介面 IMEI(用戶端裝置標識)參數為空白。

7009

驗簽介面 IMSI(用戶端使用者標識)為空白。

7010

驗簽介面 API 版本號碼為空白。

7011

驗簽介面使用者沒有許可權。

7012

驗簽介面 RPC 沒有對外開放。

7013

驗簽介面 productId 沒有註冊或者擷取密鑰為空白。

7014

驗簽介面加簽資料為空白。

7015

驗簽介面簽約無效。

7016

驗簽介面請求登入 RPC 傳入 sid 為空白。

7017

驗簽介面請求登入 RPC 傳入 sid 無效。

7018

驗簽介面請求登入 RPC 傳入 token 無效。

7019

驗簽介面請求登入 RPC 擷取 alipayuserid 為空白。

8001

etag:響應資料沒有變化。

RPC 自訂 gateway

可在 RPC 調用中指定請求的網關地址。

RPC 限流邏輯

容器版本

disableLimitView

行為

回調參數

<=9.9.5

true

靜默

1002

<=9.9.5

false

Alert

1002

>=9.9.6

true

靜默

1002

>=9.9.6

false

網關處理

100201

行為類型

描述

靜默

無。

Alert

彈出統一限流框,如下圖。

Toast

彈出系統 Toast,如果使用者關閉系統則沒有。

網關處理

根據網關的 RPC 配置,靜默 Alert Toast。

RPC 限流彈框

修改1.png

常見問題

Q:出現如下報錯資訊:ESLint: 'AlipayJSBridge' is not defined,如何解決?

A:AlipayJSBridge 未定義的問題有如下兩種解決方案:

  • 方案一:window.AlipayJSBridge.call('rpc');

  • 方案二:

      const { AlipayJSBridge } = window;
      AlipayJSBridge.call('rpc');