本文介紹的是 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 逾時時間,單位為秒。 架構統一設定,策略較複雜。
| 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 限流彈框

常見問題
Q:出現如下報錯資訊:ESLint: 'AlipayJSBridge' is not defined,如何解決?
A:AlipayJSBridge 未定義的問題有如下兩種解決方案:
方案一:
window.AlipayJSBridge.call('rpc');方案二:
const { AlipayJSBridge } = window; AlipayJSBridge.call('rpc');