JSAPI

Since 8.5

rpc

重要提醒:由于JS传入的JSON数据无法包含数据类型,在Native层转为字典时可能会由于数据类型问题导致误差,如果是数字类型的精确值,尽量使用字符串来进行传递。举例:{"value":9.45} 会被native转为{"value":9.449999999999999} 然后上发到服务端。应该改为使用{"value":"9.45"}来传递

使用方法

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);

入参

名称类型描述必选默认值版本
operationTypestringrpc服务名称Y
requestDataarrayrpc请示的参数。需要开发者根据具体rpc接口自行构造N
headersobjectrpc请求设置的headersN{}}9.0
gatewaystring网关地址Nalipay网关9.0
compressboolean是否支持request gzip压缩Ntrue9.0
disableLimitViewbooleanRPC网关被限流时是否禁止自动弹出统一限流弹窗。Nfalse9.5
timeoutintRPC超时时间,单位秒N框架统一设置,策略较复杂,具体可咨询@狄萧 @觉梦
iOS端wifi环境20s,其它环境30s。
Android端wifi/4g环境12s到42s之间。其它环境32s到60s之间
10.0.3
getResponseboolean获取rpc响应头(注意,如果设置为true的话,响应数据会多一层嵌套,可用于数据回流上报获取traceId/entityId场景,需要开启MMTP开关)Nfalse10.0.18
fnfunction回调函数N

出参

回调函数带入的参数result: {error }

名称类型描述
errorstring错误码

错误

error描述
10网络错误
11请求超时
其他mobilegw网关定义

RPC原生错误码大全

error描述
1000成功
0未知错误
1客户端找不到通讯对象
2客户端没有网络(jsapi做了转换,返回10)
3客户端证书错误
4客户端网络连接超时
5客户端网络速度过慢
6客户端请求服务端没返回
7客户端网络IO错误
8客户端网络请求调度错误
9客户端处理错误
10客户端数据反序列化错误,服务端数据格式有误
11客户端登录失败
12客户端登录账号切换
13请求中断错误,例如线程中断时网络请求会被中断
14客户端网络缓存错误
15客户端网络授权错误
16DNS解析错误
17operationType 不在白名单
1001拒绝访问
1002调用次数超过限制:系统繁忙,请稍后再试。
2000登录超时,请重新登录:登录超时,请重新登录
3000缺少操作类型或者此操作类型不支持
3001请求数据为空:系统繁忙,请稍后再试
3002数据格式有误
4001服务请求超时,请稍后再试
4002远程调用业务系统异常:网络繁忙,请稍后再试
4003创建远程调用代理失败:网络繁忙,请稍后再试
5000未知错误:抱歉,暂时无法操作,请稍后再试
6000RPC-服务找不到
6001RPC-目标方法找不到
6002RPC-参数数目不正确
6003RPC-目标方法不可访问
6004RPC-JSON解析异常
6005RPC-调用目标方法时参数不合法
6666RPC-业务异常
7000没有设置公钥
7001验签的参数不够
7002验签失败
7003验签时间戳校验失败
7004验签RPC接口 operationType参数为空
7005productId参数为空
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为空
8001etag:响应数据没有变化

rpc自定义gateway

可以在支付宝钱包中请求网商银行或者其他app的网关,需要通过js传gateway,然后客户端添加gateway对应appKey到线上开关配置

RPC限流逻辑

容器版本disableLimitView行为回调参数
<=9.9.5true静默1002
<=9.9.5falseAlert1002
>=9.9.6true静默1002
>=9.9.6false网关处理100201
行为类型描述
静默
Alert弹出统一限流框,如下图
Toast弹出系统Toast, 如果用户关闭系统则没有
网关处理根据网关的rpc配置, 静默 Alert Toast

RPC限流弹框